This repository has been archived on 2019-05-14. You can view files and clone it, but cannot push or open issues or pull requests.
Typertext/node_modules/grunt-typescript/node_modules/typescript/bin/tsc.js

62791 lines
2.7 MiB

/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */
var TypeScript;
(function (TypeScript) {
TypeScript.DiagnosticCode = {
error_TS_0_1: "error TS{0}: {1}",
warning_TS_0_1: "warning TS{0}: {1}",
Unrecognized_escape_sequence: "Unrecognized escape sequence.",
Unexpected_character_0: "Unexpected character {0}.",
Missing_close_quote_character: "Missing close quote character.",
Identifier_expected: "Identifier expected.",
_0_keyword_expected: "'{0}' keyword expected.",
_0_expected: "'{0}' expected.",
Identifier_expected_0_is_a_keyword: "Identifier expected; '{0}' is a keyword.",
Automatic_semicolon_insertion_not_allowed: "Automatic semicolon insertion not allowed.",
Unexpected_token_0_expected: "Unexpected token; '{0}' expected.",
Trailing_separator_not_allowed: "Trailing separator not allowed.",
AsteriskSlash_expected: "'*/' expected.",
public_or_private_modifier_must_precede_static: "'public' or 'private' modifier must precede 'static'.",
Unexpected_token: "Unexpected token.",
Catch_clause_parameter_cannot_have_a_type_annotation: "Catch clause parameter cannot have a type annotation.",
Rest_parameter_must_be_last_in_list: "Rest parameter must be last in list.",
Parameter_cannot_have_question_mark_and_initializer: "Parameter cannot have question mark and initializer.",
Required_parameter_cannot_follow_optional_parameter: "Required parameter cannot follow optional parameter.",
Index_signatures_cannot_have_rest_parameters: "Index signatures cannot have rest parameters.",
Index_signature_parameter_cannot_have_accessibility_modifiers: "Index signature parameter cannot have accessibility modifiers.",
Index_signature_parameter_cannot_have_a_question_mark: "Index signature parameter cannot have a question mark.",
Index_signature_parameter_cannot_have_an_initializer: "Index signature parameter cannot have an initializer.",
Index_signature_must_have_a_type_annotation: "Index signature must have a type annotation.",
Index_signature_parameter_must_have_a_type_annotation: "Index signature parameter must have a type annotation.",
Index_signature_parameter_type_must_be_string_or_number: "Index signature parameter type must be 'string' or 'number'.",
extends_clause_already_seen: "'extends' clause already seen.",
extends_clause_must_precede_implements_clause: "'extends' clause must precede 'implements' clause.",
Classes_can_only_extend_a_single_class: "Classes can only extend a single class.",
implements_clause_already_seen: "'implements' clause already seen.",
Accessibility_modifier_already_seen: "Accessibility modifier already seen.",
_0_modifier_must_precede_1_modifier: "'{0}' modifier must precede '{1}' modifier.",
_0_modifier_already_seen: "'{0}' modifier already seen.",
_0_modifier_cannot_appear_on_a_class_element: "'{0}' modifier cannot appear on a class element.",
Interface_declaration_cannot_have_implements_clause: "Interface declaration cannot have 'implements' clause.",
super_invocation_cannot_have_type_arguments: "'super' invocation cannot have type arguments.",
Only_ambient_modules_can_use_quoted_names: "Only ambient modules can use quoted names.",
Statements_are_not_allowed_in_ambient_contexts: "Statements are not allowed in ambient contexts.",
Implementations_are_not_allowed_in_ambient_contexts: "Implementations are not allowed in ambient contexts.",
declare_modifier_not_allowed_for_code_already_in_an_ambient_context: "'declare' modifier not allowed for code already in an ambient context.",
Initializers_are_not_allowed_in_ambient_contexts: "Initializers are not allowed in ambient contexts.",
Parameter_property_declarations_can_only_be_used_in_a_non_ambient_constructor_declaration: "Parameter property declarations can only be used in a non-ambient constructor declaration.",
Function_implementation_expected: "Function implementation expected.",
Constructor_implementation_expected: "Constructor implementation expected.",
Function_overload_name_must_be_0: "Function overload name must be '{0}'.",
_0_modifier_cannot_appear_on_a_module_element: "'{0}' modifier cannot appear on a module element.",
declare_modifier_cannot_appear_on_an_interface_declaration: "'declare' modifier cannot appear on an interface declaration.",
declare_modifier_required_for_top_level_element: "'declare' modifier required for top level element.",
Rest_parameter_cannot_be_optional: "Rest parameter cannot be optional.",
Rest_parameter_cannot_have_an_initializer: "Rest parameter cannot have an initializer.",
set_accessor_must_have_one_and_only_one_parameter: "'set' accessor must have one and only one parameter.",
set_accessor_parameter_cannot_be_optional: "'set' accessor parameter cannot be optional.",
set_accessor_parameter_cannot_have_an_initializer: "'set' accessor parameter cannot have an initializer.",
set_accessor_cannot_have_rest_parameter: "'set' accessor cannot have rest parameter.",
get_accessor_cannot_have_parameters: "'get' accessor cannot have parameters.",
Modifiers_cannot_appear_here: "Modifiers cannot appear here.",
Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: "Accessors are only available when targeting ECMAScript 5 and higher.",
Class_name_cannot_be_0: "Class name cannot be '{0}'.",
Interface_name_cannot_be_0: "Interface name cannot be '{0}'.",
Enum_name_cannot_be_0: "Enum name cannot be '{0}'.",
Module_name_cannot_be_0: "Module name cannot be '{0}'.",
Enum_member_must_have_initializer: "Enum member must have initializer.",
Export_assignment_cannot_be_used_in_internal_modules: "Export assignment cannot be used in internal modules.",
Export_assignment_not_allowed_in_module_with_exported_element: "Export assignment not allowed in module with exported element.",
Module_cannot_have_multiple_export_assignments: "Module cannot have multiple export assignments.",
Ambient_enum_elements_can_only_have_integer_literal_initializers: "Ambient enum elements can only have integer literal initializers.",
module_class_interface_enum_import_or_statement: "module, class, interface, enum, import or statement",
constructor_function_accessor_or_variable: "constructor, function, accessor or variable",
statement: "statement",
case_or_default_clause: "case or default clause",
identifier: "identifier",
call_construct_index_property_or_function_signature: "call, construct, index, property or function signature",
expression: "expression",
type_name: "type name",
property_or_accessor: "property or accessor",
parameter: "parameter",
type: "type",
type_parameter: "type parameter",
declare_modifier_not_allowed_on_import_declaration: "'declare' modifier not allowed on import declaration.",
Function_overload_must_be_static: "Function overload must be static.",
Function_overload_must_not_be_static: "Function overload must not be static.",
Parameter_property_declarations_cannot_be_used_in_a_constructor_overload: "Parameter property declarations cannot be used in a constructor overload.",
Invalid_reference_directive_syntax: "Invalid 'reference' directive syntax.",
Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: "Octal literals are not available when targeting ECMAScript 5 and higher.",
Accessors_are_not_allowed_in_ambient_contexts: "Accessors are not allowed in ambient contexts.",
_0_modifier_cannot_appear_on_a_constructor_declaration: "'{0}' modifier cannot appear on a constructor declaration.",
_0_modifier_cannot_appear_on_a_parameter: "'{0}' modifier cannot appear on a parameter.",
Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: "Only a single variable declaration is allowed in a 'for...in' statement.",
Type_parameters_cannot_appear_on_a_constructor_declaration: "Type parameters cannot appear on a constructor declaration.",
Type_annotation_cannot_appear_on_a_constructor_declaration: "Type annotation cannot appear on a constructor declaration.",
Duplicate_identifier_0: "Duplicate identifier '{0}'.",
The_name_0_does_not_exist_in_the_current_scope: "The name '{0}' does not exist in the current scope.",
The_name_0_does_not_refer_to_a_value: "The name '{0}' does not refer to a value.",
super_can_only_be_used_inside_a_class_instance_method: "'super' can only be used inside a class instance method.",
The_left_hand_side_of_an_assignment_expression_must_be_a_variable_property_or_indexer: "The left-hand side of an assignment expression must be a variable, property or indexer.",
Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: "Value of type '{0}' is not callable. Did you mean to include 'new'?",
Value_of_type_0_is_not_callable: "Value of type '{0}' is not callable.",
Value_of_type_0_is_not_newable: "Value of type '{0}' is not newable.",
Value_of_type_0_is_not_indexable_by_type_1: "Value of type '{0}' is not indexable by type '{1}'.",
Operator_0_cannot_be_applied_to_types_1_and_2: "Operator '{0}' cannot be applied to types '{1}' and '{2}'.",
Operator_0_cannot_be_applied_to_types_1_and_2_3: "Operator '{0}' cannot be applied to types '{1}' and '{2}': {3}",
Cannot_convert_0_to_1: "Cannot convert '{0}' to '{1}'.",
Cannot_convert_0_to_1_NL_2: "Cannot convert '{0}' to '{1}':{NL}{2}",
Expected_var_class_interface_or_module: "Expected var, class, interface, or module.",
Operator_0_cannot_be_applied_to_type_1: "Operator '{0}' cannot be applied to type '{1}'.",
Getter_0_already_declared: "Getter '{0}' already declared.",
Setter_0_already_declared: "Setter '{0}' already declared.",
Exported_class_0_extends_private_class_1: "Exported class '{0}' extends private class '{1}'.",
Exported_class_0_implements_private_interface_1: "Exported class '{0}' implements private interface '{1}'.",
Exported_interface_0_extends_private_interface_1: "Exported interface '{0}' extends private interface '{1}'.",
Exported_class_0_extends_class_from_inaccessible_module_1: "Exported class '{0}' extends class from inaccessible module {1}.",
Exported_class_0_implements_interface_from_inaccessible_module_1: "Exported class '{0}' implements interface from inaccessible module {1}.",
Exported_interface_0_extends_interface_from_inaccessible_module_1: "Exported interface '{0}' extends interface from inaccessible module {1}.",
Public_static_property_0_of_exported_class_has_or_is_using_private_type_1: "Public static property '{0}' of exported class has or is using private type '{1}'.",
Public_property_0_of_exported_class_has_or_is_using_private_type_1: "Public property '{0}' of exported class has or is using private type '{1}'.",
Property_0_of_exported_interface_has_or_is_using_private_type_1: "Property '{0}' of exported interface has or is using private type '{1}'.",
Exported_variable_0_has_or_is_using_private_type_1: "Exported variable '{0}' has or is using private type '{1}'.",
Public_static_property_0_of_exported_class_is_using_inaccessible_module_1: "Public static property '{0}' of exported class is using inaccessible module {1}.",
Public_property_0_of_exported_class_is_using_inaccessible_module_1: "Public property '{0}' of exported class is using inaccessible module {1}.",
Property_0_of_exported_interface_is_using_inaccessible_module_1: "Property '{0}' of exported interface is using inaccessible module {1}.",
Exported_variable_0_is_using_inaccessible_module_1: "Exported variable '{0}' is using inaccessible module {1}.",
Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of constructor from exported class has or is using private type '{1}'.",
Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public static property setter from exported class has or is using private type '{1}'.",
Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public property setter from exported class has or is using private type '{1}'.",
Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1: "Parameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.",
Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_type_1: "Parameter '{0}' of call signature from exported interface has or is using private type '{1}'.",
Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public static method from exported class has or is using private type '{1}'.",
Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public method from exported class has or is using private type '{1}'.",
Parameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1: "Parameter '{0}' of method from exported interface has or is using private type '{1}'.",
Parameter_0_of_exported_function_has_or_is_using_private_type_1: "Parameter '{0}' of exported function has or is using private type '{1}'.",
Parameter_0_of_constructor_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of constructor from exported class is using inaccessible module {1}.",
Parameter_0_of_public_static_property_setter_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public static property setter from exported class is using inaccessible module {1}.",
Parameter_0_of_public_property_setter_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public property setter from exported class is using inaccessible module {1}.",
Parameter_0_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_1: "Parameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.",
Parameter_0_of_call_signature_from_exported_interface_is_using_inaccessible_module_1: "Parameter '{0}' of call signature from exported interface is using inaccessible module {1}",
Parameter_0_of_public_static_method_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public static method from exported class is using inaccessible module {1}.",
Parameter_0_of_public_method_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public method from exported class is using inaccessible module {1}.",
Parameter_0_of_method_from_exported_interface_is_using_inaccessible_module_1: "Parameter '{0}' of method from exported interface is using inaccessible module {1}.",
Parameter_0_of_exported_function_is_using_inaccessible_module_1: "Parameter '{0}' of exported function is using inaccessible module {1}.",
Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_type_0: "Return type of public static property getter from exported class has or is using private type '{0}'.",
Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_type_0: "Return type of public property getter from exported class has or is using private type '{0}'.",
Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_0: "Return type of constructor signature from exported interface has or is using private type '{0}'.",
Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_type_0: "Return type of call signature from exported interface has or is using private type '{0}'.",
Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_type_0: "Return type of index signature from exported interface has or is using private type '{0}'.",
Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_type_0: "Return type of public static method from exported class has or is using private type '{0}'.",
Return_type_of_public_method_from_exported_class_has_or_is_using_private_type_0: "Return type of public method from exported class has or is using private type '{0}'.",
Return_type_of_method_from_exported_interface_has_or_is_using_private_type_0: "Return type of method from exported interface has or is using private type '{0}'.",
Return_type_of_exported_function_has_or_is_using_private_type_0: "Return type of exported function has or is using private type '{0}'.",
Return_type_of_public_static_property_getter_from_exported_class_is_using_inaccessible_module_0: "Return type of public static property getter from exported class is using inaccessible module {0}.",
Return_type_of_public_property_getter_from_exported_class_is_using_inaccessible_module_0: "Return type of public property getter from exported class is using inaccessible module {0}.",
Return_type_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_0: "Return type of constructor signature from exported interface is using inaccessible module {0}.",
Return_type_of_call_signature_from_exported_interface_is_using_inaccessible_module_0: "Return type of call signature from exported interface is using inaccessible module {0}.",
Return_type_of_index_signature_from_exported_interface_is_using_inaccessible_module_0: "Return type of index signature from exported interface is using inaccessible module {0}.",
Return_type_of_public_static_method_from_exported_class_is_using_inaccessible_module_0: "Return type of public static method from exported class is using inaccessible module {0}.",
Return_type_of_public_method_from_exported_class_is_using_inaccessible_module_0: "Return type of public method from exported class is using inaccessible module {0}.",
Return_type_of_method_from_exported_interface_is_using_inaccessible_module_0: "Return type of method from exported interface is using inaccessible module {0}.",
Return_type_of_exported_function_is_using_inaccessible_module_0: "Return type of exported function is using inaccessible module {0}.",
new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: "'new T[]' cannot be used to create an array. Use 'new Array<T>()' instead.",
A_parameter_list_must_follow_a_generic_type_argument_list_expected: "A parameter list must follow a generic type argument list. '(' expected.",
Multiple_constructor_implementations_are_not_allowed: "Multiple constructor implementations are not allowed.",
Unable_to_resolve_external_module_0: "Unable to resolve external module '{0}'.",
Module_cannot_be_aliased_to_a_non_module_type: "Module cannot be aliased to a non-module type.",
A_class_may_only_extend_another_class: "A class may only extend another class.",
A_class_may_only_implement_another_class_or_interface: "A class may only implement another class or interface.",
An_interface_may_only_extend_another_class_or_interface: "An interface may only extend another class or interface.",
Unable_to_resolve_type: "Unable to resolve type.",
Unable_to_resolve_type_of_0: "Unable to resolve type of '{0}'.",
Unable_to_resolve_type_parameter_constraint: "Unable to resolve type parameter constraint.",
Type_parameter_constraint_cannot_be_a_primitive_type: "Type parameter constraint cannot be a primitive type.",
Supplied_parameters_do_not_match_any_signature_of_call_target: "Supplied parameters do not match any signature of call target.",
Supplied_parameters_do_not_match_any_signature_of_call_target_NL_0: "Supplied parameters do not match any signature of call target:{NL}{0}",
Invalid_new_expression: "Invalid 'new' expression.",
Call_signatures_used_in_a_new_expression_must_have_a_void_return_type: "Call signatures used in a 'new' expression must have a 'void' return type.",
Could_not_select_overload_for_new_expression: "Could not select overload for 'new' expression.",
Type_0_does_not_satisfy_the_constraint_1_for_type_parameter_2: "Type '{0}' does not satisfy the constraint '{1}' for type parameter '{2}'.",
Could_not_select_overload_for_call_expression: "Could not select overload for 'call' expression.",
Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: "Cannot invoke an expression whose type lacks a call signature.",
Calls_to_super_are_only_valid_inside_a_class: "Calls to 'super' are only valid inside a class.",
Generic_type_0_requires_1_type_argument_s: "Generic type '{0}' requires {1} type argument(s).",
Type_of_array_literal_cannot_be_determined_Best_common_type_could_not_be_found_for_array_elements: "Type of array literal cannot be determined. Best common type could not be found for array elements.",
Could_not_find_enclosing_symbol_for_dotted_name_0: "Could not find enclosing symbol for dotted name '{0}'.",
The_property_0_does_not_exist_on_value_of_type_1: "The property '{0}' does not exist on value of type '{1}'.",
Could_not_find_symbol_0: "Could not find symbol '{0}'.",
get_and_set_accessor_must_have_the_same_type: "'get' and 'set' accessor must have the same type.",
this_cannot_be_referenced_in_current_location: "'this' cannot be referenced in current location.",
Static_members_cannot_reference_class_type_parameters: "Static members cannot reference class type parameters.",
Class_0_is_recursively_referenced_as_a_base_type_of_itself: "Class '{0}' is recursively referenced as a base type of itself.",
Interface_0_is_recursively_referenced_as_a_base_type_of_itself: "Interface '{0}' is recursively referenced as a base type of itself.",
super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class.",
super_cannot_be_referenced_in_non_derived_classes: "'super' cannot be referenced in non-derived classes.",
A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties.",
Constructors_for_derived_classes_must_contain_a_super_call: "Constructors for derived classes must contain a 'super' call.",
Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: "Super calls are not permitted outside constructors or in nested functions inside constructors.",
_0_1_is_inaccessible: "'{0}.{1}' is inaccessible.",
this_cannot_be_referenced_within_module_bodies: "'this' cannot be referenced within module bodies.",
Invalid_expression_types_not_known_to_support_the_addition_operator: "Invalid '+' expression - types not known to support the addition operator.",
The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.",
The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.",
The_type_of_a_unary_arithmetic_operation_operand_must_be_of_type_any_number_or_an_enum_type: "The type of a unary arithmetic operation operand must be of type 'any', 'number' or an enum type.",
Variable_declarations_of_a_for_statement_cannot_use_a_type_annotation: "Variable declarations of a 'for' statement cannot use a type annotation.",
Variable_declarations_of_a_for_statement_must_be_of_types_string_or_any: "Variable declarations of a 'for' statement must be of types 'string' or 'any'.",
The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter.",
The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number: "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'.",
The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter.",
The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter.",
The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type.",
Setters_cannot_return_a_value: "Setters cannot return a value.",
Tried_to_query_type_of_uninitialized_module_0: "Tried to query type of uninitialized module '{0}'.",
Tried_to_set_variable_type_to_uninitialized_module_type_0: "Tried to set variable type to uninitialized module type '{0}'.",
Type_0_does_not_have_type_parameters: "Type '{0}' does not have type parameters.",
Getters_must_return_a_value: "Getters must return a value.",
Getter_and_setter_accessors_do_not_agree_in_visibility: "Getter and setter accessors do not agree in visibility.",
Invalid_left_hand_side_of_assignment_expression: "Invalid left-hand side of assignment expression.",
Function_declared_a_non_void_return_type_but_has_no_return_expression: "Function declared a non-void return type, but has no return expression.",
Cannot_resolve_return_type_reference: "Cannot resolve return type reference.",
Constructors_cannot_have_a_return_type_of_void: "Constructors cannot have a return type of 'void'.",
Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'.",
All_symbols_within_a_with_block_will_be_resolved_to_any: "All symbols within a with block will be resolved to 'any'.",
Import_declarations_in_an_internal_module_cannot_reference_an_external_module: "Import declarations in an internal module cannot reference an external module.",
Class_0_declares_interface_1_but_does_not_implement_it_NL_2: "Class {0} declares interface {1} but does not implement it:{NL}{2}",
Class_0_declares_class_1_as_an_interface_but_does_not_implement_it_NL_2: "Class {0} declares class {1} as an interface but does not implement it:{NL}{2}",
The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: "The operand of an increment or decrement operator must be a variable, property or indexer.",
this_cannot_be_referenced_in_static_initializers_in_a_class_body: "'this' cannot be referenced in static initializers in a class body.",
Class_0_cannot_extend_class_1_NL_2: "Class '{0}' cannot extend class '{1}':{NL}{2}",
Interface_0_cannot_extend_class_1_NL_2: "Interface '{0}' cannot extend class '{1}':{NL}{2}",
Interface_0_cannot_extend_interface_1_NL_2: "Interface '{0}' cannot extend interface '{1}':{NL}{2}",
Duplicate_overload_signature_for_0: "Duplicate overload signature for '{0}'.",
Duplicate_constructor_overload_signature: "Duplicate constructor overload signature.",
Duplicate_overload_call_signature: "Duplicate overload call signature.",
Duplicate_overload_construct_signature: "Duplicate overload construct signature.",
Overload_signature_is_not_compatible_with_function_definition: "Overload signature is not compatible with function definition.",
Overload_signature_is_not_compatible_with_function_definition_NL_0: "Overload signature is not compatible with function definition:{NL}{0}",
Overload_signatures_must_all_be_public_or_private: "Overload signatures must all be public or private.",
Overload_signatures_must_all_be_exported_or_not_exported: "Overload signatures must all be exported or not exported.",
Overload_signatures_must_all_be_ambient_or_non_ambient: "Overload signatures must all be ambient or non-ambient.",
Overload_signatures_must_all_be_optional_or_required: "Overload signatures must all be optional or required.",
Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: "Specialized overload signature is not assignable to any non-specialized signature.",
this_cannot_be_referenced_in_constructor_arguments: "'this' cannot be referenced in constructor arguments.",
Instance_member_cannot_be_accessed_off_a_class: "Instance member cannot be accessed off a class.",
Untyped_function_calls_may_not_accept_type_arguments: "Untyped function calls may not accept type arguments.",
Non_generic_functions_may_not_accept_type_arguments: "Non-generic functions may not accept type arguments.",
A_generic_type_may_not_reference_itself_with_a_wrapped_form_of_its_own_type_parameters: "A generic type may not reference itself with a wrapped form of its own type parameters.",
Rest_parameters_must_be_array_types: "Rest parameters must be array types.",
Overload_signature_implementation_cannot_use_specialized_type: "Overload signature implementation cannot use specialized type.",
Export_assignments_may_only_be_used_at_the_top_level_of_external_modules: "Export assignments may only be used at the top-level of external modules.",
Export_assignments_may_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules: "Export assignments may only be made with variables, functions, classes, interfaces, enums and internal modules.",
Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword: "Only public methods of the base class are accessible via the 'super' keyword.",
Numeric_indexer_type_0_must_be_assignable_to_string_indexer_type_1: "Numeric indexer type '{0}' must be assignable to string indexer type '{1}'.",
Numeric_indexer_type_0_must_be_assignable_to_string_indexer_type_1_NL_2: "Numeric indexer type '{0}' must be assignable to string indexer type '{1}':{NL}{2}",
All_numerically_named_properties_must_be_assignable_to_numeric_indexer_type_0: "All numerically named properties must be assignable to numeric indexer type '{0}'.",
All_numerically_named_properties_must_be_assignable_to_numeric_indexer_type_0_NL_1: "All numerically named properties must be assignable to numeric indexer type '{0}':{NL}{1}",
All_named_properties_must_be_assignable_to_string_indexer_type_0: "All named properties must be assignable to string indexer type '{0}'.",
All_named_properties_must_be_assignable_to_string_indexer_type_0_NL_1: "All named properties must be assignable to string indexer type '{0}':{NL}{1}",
Generic_type_references_must_include_all_type_arguments: "Generic type references must include all type arguments.",
Default_arguments_are_only_allowed_in_implementation: "Default arguments are only allowed in implementation.",
Overloads_cannot_differ_only_by_return_type: "Overloads cannot differ only by return type.",
Function_expression_declared_a_non_void_return_type_but_has_no_return_expression: "Function expression declared a non-void return type, but has no return expression.",
Import_declaration_referencing_identifier_from_internal_module_can_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules: "Import declaration referencing identifier from internal module can only be made with variables, functions, classes, interfaces, enums and internal modules.",
Could_not_find_symbol_0_in_module_1: "Could not find symbol '{0}' in module '{1}'.",
Unable_to_resolve_module_reference_0: "Unable to resolve module reference '{0}'.",
Could_not_find_module_0_in_module_1: "Could not find module '{0}' in module '{1}'.",
Exported_import_declaration_0_is_assigned_value_with_type_that_has_or_is_using_private_type_1: "Exported import declaration '{0}' is assigned value with type that has or is using private type '{1}'.",
Exported_import_declaration_0_is_assigned_value_with_type_that_is_using_inaccessible_module_1: "Exported import declaration '{0}' is assigned value with type that is using inaccessible module '{1}'.",
Exported_import_declaration_0_is_assigned_type_that_has_or_is_using_private_type_1: "Exported import declaration '{0}' is assigned type that has or is using private type '{1}'.",
Exported_import_declaration_0_is_assigned_type_that_is_using_inaccessible_module_1: "Exported import declaration '{0}' is assigned type that is using inaccessible module '{1}'.",
Exported_import_declaration_0_is_assigned_container_that_is_or_is_using_inaccessible_module_1: "Exported import declaration '{0}' is assigned container that is or is using inaccessible module '{1}'.",
Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_1: "Type name '{0}' in extends clause does not reference constructor function for '{1}'.",
Internal_module_reference_0_in_import_declaration_does_not_reference_module_instance_for_1: "Internal module reference '{0}' in import declaration does not reference module instance for '{1}'.",
Module_0_cannot_merge_with_previous_declaration_of_1_in_a_different_file_2: "Module '{0}' cannot merge with previous declaration of '{1}' in a different file '{2}'.",
Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':{NL}{3}",
Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it.",
Ambient_external_module_declaration_cannot_be_reopened: "Ambient external module declaration cannot be reopened.",
All_declarations_of_merged_declaration_0_must_be_exported_or_not_exported: "All declarations of merged declaration '{0}' must be exported or not exported.",
super_cannot_be_referenced_in_constructor_arguments: "'super' cannot be referenced in constructor arguments.",
Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: "Return type of constructor signature must be assignable to the instance type of the class.",
Ambient_external_module_declaration_must_be_defined_in_global_context: "Ambient external module declaration must be defined in global context.",
Ambient_external_module_declaration_cannot_specify_relative_module_name: "Ambient external module declaration cannot specify relative module name.",
Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name: "Import declaration in an ambient external module declaration cannot reference external module through relative external module name.",
Could_not_find_the_best_common_type_of_types_of_all_return_statement_expressions: "Could not find the best common type of types of all return statement expressions.",
Import_declaration_cannot_refer_to_external_module_reference_when_noResolve_option_is_set: "Import declaration cannot refer to external module reference when --noResolve option is set.",
Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference.",
continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: "'continue' statement can only be used within an enclosing iteration statement.",
break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: "'break' statement can only be used within an enclosing iteration or switch statement.",
Jump_target_not_found: "Jump target not found.",
Jump_target_cannot_cross_function_boundary: "Jump target cannot cross function boundary.",
Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference.",
Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference.",
Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: "Expression resolves to '_super' that compiler uses to capture base class reference.",
TypeParameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.",
TypeParameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of call signature from exported interface has or is using private type '{1}'.",
TypeParameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1: "TypeParameter '{0}' of public static method from exported class has or is using private type '{1}'.",
TypeParameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1: "TypeParameter '{0}' of public method from exported class has or is using private type '{1}'.",
TypeParameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of method from exported interface has or is using private type '{1}'.",
TypeParameter_0_of_exported_function_has_or_is_using_private_type_1: "TypeParameter '{0}' of exported function has or is using private type '{1}'.",
TypeParameter_0_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.",
TypeParameter_0_of_call_signature_from_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of call signature from exported interface is using inaccessible module {1}",
TypeParameter_0_of_public_static_method_from_exported_class_is_using_inaccessible_module_1: "TypeParameter '{0}' of public static method from exported class is using inaccessible module {1}.",
TypeParameter_0_of_public_method_from_exported_class_is_using_inaccessible_module_1: "TypeParameter '{0}' of public method from exported class is using inaccessible module {1}.",
TypeParameter_0_of_method_from_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of method from exported interface is using inaccessible module {1}.",
TypeParameter_0_of_exported_function_is_using_inaccessible_module_1: "TypeParameter '{0}' of exported function is using inaccessible module {1}.",
TypeParameter_0_of_exported_class_has_or_is_using_private_type_1: "TypeParameter '{0}' of exported class has or is using private type '{1}'.",
TypeParameter_0_of_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of exported interface has or is using private type '{1}'.",
TypeParameter_0_of_exported_class_is_using_inaccessible_module_1: "TypeParameter '{0}' of exported class is using inaccessible module {1}.",
TypeParameter_0_of_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of exported interface is using inaccessible module {1}.",
Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter: "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter.",
Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters.",
Type_of_conditional_0_must_be_identical_to_1_or_2: "Type of conditional '{0}' must be identical to '{1}' or '{2}'.",
Type_of_conditional_0_must_be_identical_to_1_2_or_3: "Type of conditional '{0}' must be identical to '{1}', '{2}' or '{3}'.",
Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_an_external_module: "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of an external module.",
Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: "Constraint of a type parameter cannot reference any type parameter from the same type parameter list.",
Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor.",
Parameter_0_cannot_be_referenced_in_its_initializer: "Parameter '{0}' cannot be referenced in its initializer.",
Duplicate_string_index_signature: "Duplicate string index signature.",
Duplicate_number_index_signature: "Duplicate number index signature.",
All_declarations_of_an_interface_must_have_identical_type_parameters: "All declarations of an interface must have identical type parameters.",
Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter: "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter.",
Type_0_is_missing_property_1_from_type_2: "Type '{0}' is missing property '{1}' from type '{2}'.",
Types_of_property_0_of_types_1_and_2_are_incompatible: "Types of property '{0}' of types '{1}' and '{2}' are incompatible.",
Types_of_property_0_of_types_1_and_2_are_incompatible_NL_3: "Types of property '{0}' of types '{1}' and '{2}' are incompatible:{NL}{3}",
Property_0_defined_as_private_in_type_1_is_defined_as_public_in_type_2: "Property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.",
Property_0_defined_as_public_in_type_1_is_defined_as_private_in_type_2: "Property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.",
Types_0_and_1_define_property_2_as_private: "Types '{0}' and '{1}' define property '{2}' as private.",
Call_signatures_of_types_0_and_1_are_incompatible: "Call signatures of types '{0}' and '{1}' are incompatible.",
Call_signatures_of_types_0_and_1_are_incompatible_NL_2: "Call signatures of types '{0}' and '{1}' are incompatible:{NL}{2}",
Type_0_requires_a_call_signature_but_type_1_lacks_one: "Type '{0}' requires a call signature, but type '{1}' lacks one.",
Construct_signatures_of_types_0_and_1_are_incompatible: "Construct signatures of types '{0}' and '{1}' are incompatible.",
Construct_signatures_of_types_0_and_1_are_incompatible_NL_2: "Construct signatures of types '{0}' and '{1}' are incompatible:{NL}{2}",
Type_0_requires_a_construct_signature_but_type_1_lacks_one: "Type '{0}' requires a construct signature, but type '{1}' lacks one.",
Index_signatures_of_types_0_and_1_are_incompatible: "Index signatures of types '{0}' and '{1}' are incompatible.",
Index_signatures_of_types_0_and_1_are_incompatible_NL_2: "Index signatures of types '{0}' and '{1}' are incompatible:{NL}{2}",
Call_signature_expects_0_or_fewer_parameters: "Call signature expects {0} or fewer parameters.",
Could_not_apply_type_0_to_argument_1_which_is_of_type_2: "Could not apply type '{0}' to argument {1} which is of type '{2}'.",
Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function.",
Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function.",
Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor.",
Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property.",
Types_of_static_property_0_of_class_1_and_class_2_are_incompatible: "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible.",
Types_of_static_property_0_of_class_1_and_class_2_are_incompatible_NL_3: "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible:{NL}{3}",
Type_reference_cannot_refer_to_container_0: "Type reference cannot refer to container '{0}'.",
Type_reference_must_refer_to_type: "Type reference must refer to type.",
In_enums_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_the_first_enum_element: "In enums with multiple declarations only one declaration can omit an initializer for the first enum element.",
_0_overload_s: " (+ {0} overload(s))",
Variable_declaration_cannot_have_the_same_name_as_an_import_declaration: "Variable declaration cannot have the same name as an import declaration.",
Signature_expected_0_type_arguments_got_1_instead: "Signature expected {0} type arguments, got {1} instead.",
Property_0_defined_as_optional_in_type_1_but_is_required_in_type_2: "Property '{0}' defined as optional in type '{1}', but is required in type '{2}'.",
Types_0_and_1_originating_in_infinitely_expanding_type_reference_do_not_refer_to_same_named_type: "Types '{0}' and '{1}' originating in infinitely expanding type reference do not refer to same named type.",
Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments: "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments.",
Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments_NL_2: "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments:{NL}{2}",
Named_properties_0_of_types_1_and_2_are_not_identical: "Named properties '{0}' of types '{1}' and '{2}' are not identical.",
Types_of_string_indexer_of_types_0_and_1_are_not_identical: "Types of string indexer of types '{0}' and '{1}' are not identical.",
Types_of_number_indexer_of_types_0_and_1_are_not_identical: "Types of number indexer of types '{0}' and '{1}' are not identical.",
Type_of_number_indexer_in_type_0_is_not_assignable_to_string_indexer_type_in_type_1_NL_2: "Type of number indexer in type '{0}' is not assignable to string indexer type in type '{1}'.{NL}{2}",
Type_of_property_0_in_type_1_is_not_assignable_to_string_indexer_type_in_type_2_NL_3: "Type of property '{0}' in type '{1}' is not assignable to string indexer type in type '{2}'.{NL}{3}",
Type_of_property_0_in_type_1_is_not_assignable_to_number_indexer_type_in_type_2_NL_3: "Type of property '{0}' in type '{1}' is not assignable to number indexer type in type '{2}'.{NL}{3}",
Static_property_0_defined_as_private_in_type_1_is_defined_as_public_in_type_2: "Static property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.",
Static_property_0_defined_as_public_in_type_1_is_defined_as_private_in_type_2: "Static property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.",
Types_0_and_1_define_static_property_2_as_private: "Types '{0}' and '{1}' define static property '{2}' as private.",
Current_host_does_not_support_0_option: "Current host does not support '{0}' option.",
ECMAScript_target_version_0_not_supported_Specify_a_valid_target_version_1_default_or_2: "ECMAScript target version '{0}' not supported. Specify a valid target version: '{1}' (default), or '{2}'",
Module_code_generation_0_not_supported: "Module code generation '{0}' not supported.",
Could_not_find_file_0: "Could not find file: '{0}'.",
A_file_cannot_have_a_reference_to_itself: "A file cannot have a reference to itself.",
Cannot_resolve_referenced_file_0: "Cannot resolve referenced file: '{0}'.",
Cannot_find_the_common_subdirectory_path_for_the_input_files: "Cannot find the common subdirectory path for the input files.",
Emit_Error_0: "Emit Error: {0}.",
Cannot_read_file_0_1: "Cannot read file '{0}': {1}",
Unsupported_file_encoding: "Unsupported file encoding.",
Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: "Locale must be of the form <language> or <language>-<territory>. For example '{0}' or '{1}'.",
Unsupported_locale_0: "Unsupported locale: '{0}'.",
Execution_Failed_NL: "Execution Failed.{NL}",
Invalid_call_to_up: "Invalid call to 'up'",
Invalid_call_to_down: "Invalid call to 'down'",
Base64_value_0_finished_with_a_continuation_bit: "Base64 value '{0}' finished with a continuation bit.",
Unknown_option_0: "Unknown option '{0}'",
Expected_0_arguments_to_message_got_1_instead: "Expected {0} arguments to message, got {1} instead.",
Expected_the_message_0_to_have_1_arguments_but_it_had_2: "Expected the message '{0}' to have {1} arguments, but it had {2}",
Could_not_delete_file_0: "Could not delete file '{0}'",
Could_not_create_directory_0: "Could not create directory '{0}'",
Error_while_executing_file_0: "Error while executing file '{0}': ",
Cannot_compile_external_modules_unless_the_module_flag_is_provided: "Cannot compile external modules unless the '--module' flag is provided.",
Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option: "Option mapRoot cannot be specified without specifying sourcemap option.",
Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: "Option sourceRoot cannot be specified without specifying sourcemap option.",
Options_mapRoot_and_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: "Options mapRoot and sourceRoot cannot be specified without specifying sourcemap option.",
Option_0_specified_without_1: "Option '{0}' specified without '{1}'",
codepage_option_not_supported_on_current_platform: "'codepage' option not supported on current platform.",
Concatenate_and_emit_output_to_single_file: "Concatenate and emit output to single file.",
Generates_corresponding_0_file: "Generates corresponding {0} file.",
Specifies_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: "Specifies the location where debugger should locate map files instead of generated locations.",
Specifies_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: "Specifies the location where debugger should locate TypeScript files instead of source locations.",
Watch_input_files: "Watch input files.",
Redirect_output_structure_to_the_directory: "Redirect output structure to the directory.",
Do_not_emit_comments_to_output: "Do not emit comments to output.",
Skip_resolution_and_preprocessing: "Skip resolution and preprocessing.",
Specify_ECMAScript_target_version_0_default_or_1: "Specify ECMAScript target version: '{0}' (default), or '{1}'",
Specify_module_code_generation_0_or_1: "Specify module code generation: '{0}' or '{1}'",
Print_this_message: "Print this message.",
Print_the_compiler_s_version_0: "Print the compiler's version: {0}",
Allow_use_of_deprecated_0_keyword_when_referencing_an_external_module: "Allow use of deprecated '{0}' keyword when referencing an external module.",
Specify_locale_for_errors_and_messages_For_example_0_or_1: "Specify locale for errors and messages. For example '{0}' or '{1}'",
Syntax_0: "Syntax: {0}",
options: "options",
file1: "file",
Examples: "Examples:",
Options: "Options:",
Insert_command_line_options_and_files_from_a_file: "Insert command line options and files from a file.",
Version_0: "Version {0}",
Use_the_0_flag_to_see_options: "Use the '{0}' flag to see options.",
NL_Recompiling_0: "{NL}Recompiling ({0}):",
STRING: "STRING",
KIND: "KIND",
file2: "FILE",
VERSION: "VERSION",
LOCATION: "LOCATION",
DIRECTORY: "DIRECTORY",
NUMBER: "NUMBER",
Specify_the_codepage_to_use_when_opening_source_files: "Specify the codepage to use when opening source files.",
Additional_locations: "Additional locations:",
This_version_of_the_Javascript_runtime_does_not_support_the_0_function: "This version of the Javascript runtime does not support the '{0}' function.",
Unknown_rule: "Unknown rule.",
Invalid_line_number_0: "Invalid line number ({0})",
Warn_on_expressions_and_declarations_with_an_implied_any_type: "Warn on expressions and declarations with an implied 'any' type.",
Variable_0_implicitly_has_an_any_type: "Variable '{0}' implicitly has an 'any' type.",
Parameter_0_of_1_implicitly_has_an_any_type: "Parameter '{0}' of '{1}' implicitly has an 'any' type.",
Parameter_0_of_function_type_implicitly_has_an_any_type: "Parameter '{0}' of function type implicitly has an 'any' type.",
Member_0_of_object_type_implicitly_has_an_any_type: "Member '{0}' of object type implicitly has an 'any' type.",
new_expression_which_lacks_a_constructor_signature_implicitly_has_an_any_type: "'new' expression, which lacks a constructor signature, implicitly has an 'any' type.",
_0_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "'{0}', which lacks return-type annotation, implicitly has an 'any' return type.",
Function_expression_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "Function expression, which lacks return-type annotation, implicitly has an 'any' return type.",
Parameter_0_of_lambda_function_implicitly_has_an_any_type: "Parameter '{0}' of lambda function implicitly has an 'any' type.",
Constructor_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "Constructor signature, which lacks return-type annotation, implicitly has an 'any' return type.",
Lambda_Function_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "Lambda Function, which lacks return-type annotation, implicitly has an 'any' return type.",
Array_Literal_implicitly_has_an_any_type_from_widening: "Array Literal implicitly has an 'any' type from widening.",
_0_which_lacks_get_accessor_and_parameter_type_annotation_on_set_accessor_implicitly_has_an_any_type: "'{0}', which lacks 'get' accessor and parameter type annotation on 'set' accessor, implicitly has an 'any' type.",
Index_signature_of_object_type_implicitly_has_an_any_type: "Index signature of object type implicitly has an 'any' type.",
Object_literal_s_property_0_implicitly_has_an_any_type_from_widening: "Object literal's property '{0}' implicitly has an 'any' type from widening."
};
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var ArrayUtilities = (function () {
function ArrayUtilities() {
}
ArrayUtilities.isArray = function (value) {
return Object.prototype.toString.apply(value, []) === '[object Array]';
};
ArrayUtilities.sequenceEquals = function (array1, array2, equals) {
if (array1 === array2) {
return true;
}
if (array1 === null || array2 === null) {
return false;
}
if (array1.length !== array2.length) {
return false;
}
for (var i = 0, n = array1.length; i < n; i++) {
if (!equals(array1[i], array2[i])) {
return false;
}
}
return true;
};
ArrayUtilities.contains = function (array, value) {
for (var i = 0; i < array.length; i++) {
if (array[i] === value) {
return true;
}
}
return false;
};
ArrayUtilities.groupBy = function (array, func) {
var result = {};
for (var i = 0, n = array.length; i < n; i++) {
var v = array[i];
var k = func(v);
var list = result[k] || [];
list.push(v);
result[k] = list;
}
return result;
};
ArrayUtilities.distinct = function (array, equalsFn) {
var result = [];
for (var i = 0, n = array.length; i < n; i++) {
var current = array[i];
for (var j = 0; j < result.length; j++) {
if (equalsFn(result[j], current)) {
break;
}
}
if (j === result.length) {
result.push(current);
}
}
return result;
};
ArrayUtilities.min = function (array, func) {
var min = func(array[0]);
for (var i = 1; i < array.length; i++) {
var next = func(array[i]);
if (next < min) {
min = next;
}
}
return min;
};
ArrayUtilities.max = function (array, func) {
var max = func(array[0]);
for (var i = 1; i < array.length; i++) {
var next = func(array[i]);
if (next > max) {
max = next;
}
}
return max;
};
ArrayUtilities.last = function (array) {
if (array.length === 0) {
throw TypeScript.Errors.argumentOutOfRange('array');
}
return array[array.length - 1];
};
ArrayUtilities.lastOrDefault = function (array, predicate) {
for (var i = array.length - 1; i >= 0; i--) {
var v = array[i];
if (predicate(v, i)) {
return v;
}
}
return null;
};
ArrayUtilities.firstOrDefault = function (array, func) {
for (var i = 0, n = array.length; i < n; i++) {
var value = array[i];
if (func(value, i)) {
return value;
}
}
return null;
};
ArrayUtilities.first = function (array, func) {
for (var i = 0, n = array.length; i < n; i++) {
var value = array[i];
if (!func || func(value, i)) {
return value;
}
}
throw TypeScript.Errors.invalidOperation();
};
ArrayUtilities.sum = function (array, func) {
var result = 0;
for (var i = 0, n = array.length; i < n; i++) {
result += func(array[i]);
}
return result;
};
ArrayUtilities.select = function (values, func) {
var result = new Array(values.length);
for (var i = 0; i < values.length; i++) {
result[i] = func(values[i]);
}
return result;
};
ArrayUtilities.where = function (values, func) {
var result = new Array();
for (var i = 0; i < values.length; i++) {
if (func(values[i])) {
result.push(values[i]);
}
}
return result;
};
ArrayUtilities.any = function (array, func) {
for (var i = 0, n = array.length; i < n; i++) {
if (func(array[i])) {
return true;
}
}
return false;
};
ArrayUtilities.all = function (array, func) {
for (var i = 0, n = array.length; i < n; i++) {
if (!func(array[i])) {
return false;
}
}
return true;
};
ArrayUtilities.binarySearch = function (array, value) {
var low = 0;
var high = array.length - 1;
while (low <= high) {
var middle = low + ((high - low) >> 1);
var midValue = array[middle];
if (midValue === value) {
return middle;
} else if (midValue > value) {
high = middle - 1;
} else {
low = middle + 1;
}
}
return ~low;
};
ArrayUtilities.createArray = function (length, defaultValue) {
var result = new Array(length);
for (var i = 0; i < length; i++) {
result[i] = defaultValue;
}
return result;
};
ArrayUtilities.grow = function (array, length, defaultValue) {
var count = length - array.length;
for (var i = 0; i < count; i++) {
array.push(defaultValue);
}
};
ArrayUtilities.copy = function (sourceArray, sourceIndex, destinationArray, destinationIndex, length) {
for (var i = 0; i < length; i++) {
destinationArray[destinationIndex + i] = sourceArray[sourceIndex + i];
}
};
ArrayUtilities.indexOf = function (array, predicate) {
for (var i = 0, n = array.length; i < n; i++) {
if (predicate(array[i])) {
return i;
}
}
return -1;
};
return ArrayUtilities;
})();
TypeScript.ArrayUtilities = ArrayUtilities;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (BitVector) {
var pool = [];
var Constants;
(function (Constants) {
Constants[Constants["MaxBitsPerEncodedNumber"] = 30] = "MaxBitsPerEncodedNumber";
Constants[Constants["BitsPerEncodedBiStateValue"] = 1] = "BitsPerEncodedBiStateValue";
Constants[Constants["BitsPerEncodedTriStateValue"] = 2] = "BitsPerEncodedTriStateValue";
Constants[Constants["BiStateEncodedTrue"] = 1] = "BiStateEncodedTrue";
Constants[Constants["BiStateClearBitsMask"] = 1] = "BiStateClearBitsMask";
Constants[Constants["TriStateEncodedFalse"] = 1] = "TriStateEncodedFalse";
Constants[Constants["TriStateEncodedTrue"] = 2] = "TriStateEncodedTrue";
Constants[Constants["TriStateClearBitsMask"] = 3] = "TriStateClearBitsMask";
})(Constants || (Constants = {}));
var BitVectorImpl = (function () {
function BitVectorImpl(allowUndefinedValues) {
this.allowUndefinedValues = allowUndefinedValues;
this.isReleased = false;
this.bits = [];
}
BitVectorImpl.prototype.computeTriStateArrayIndex = function (index) {
var encodedValuesPerNumber = 30 /* MaxBitsPerEncodedNumber */ / 2 /* BitsPerEncodedTriStateValue */;
return (index / encodedValuesPerNumber) >>> 0;
};
BitVectorImpl.prototype.computeBiStateArrayIndex = function (index) {
var encodedValuesPerNumber = 30 /* MaxBitsPerEncodedNumber */ / 1 /* BitsPerEncodedBiStateValue */;
return (index / encodedValuesPerNumber) >>> 0;
};
BitVectorImpl.prototype.computeTriStateEncodedValueIndex = function (index) {
var encodedValuesPerNumber = 30 /* MaxBitsPerEncodedNumber */ / 2 /* BitsPerEncodedTriStateValue */;
return (index % encodedValuesPerNumber) * 2 /* BitsPerEncodedTriStateValue */;
};
BitVectorImpl.prototype.computeBiStateEncodedValueIndex = function (index) {
var encodedValuesPerNumber = 30 /* MaxBitsPerEncodedNumber */ / 1 /* BitsPerEncodedBiStateValue */;
return (index % encodedValuesPerNumber) * 1 /* BitsPerEncodedBiStateValue */;
};
BitVectorImpl.prototype.valueAt = function (index) {
TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector");
if (this.allowUndefinedValues) {
var arrayIndex = this.computeTriStateArrayIndex(index);
var encoded = this.bits[arrayIndex];
if (encoded === undefined) {
return undefined;
}
var bitIndex = this.computeTriStateEncodedValueIndex(index);
if (encoded & (2 /* TriStateEncodedTrue */ << bitIndex)) {
return true;
} else if (encoded & (1 /* TriStateEncodedFalse */ << bitIndex)) {
return false;
} else {
return undefined;
}
} else {
var arrayIndex = this.computeBiStateArrayIndex(index);
var encoded = this.bits[arrayIndex];
if (encoded === undefined) {
return false;
}
var bitIndex = this.computeBiStateEncodedValueIndex(index);
if (encoded & (1 /* BiStateEncodedTrue */ << bitIndex)) {
return true;
} else {
return false;
}
}
};
BitVectorImpl.prototype.setValueAt = function (index, value) {
TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector");
if (this.allowUndefinedValues) {
TypeScript.Debug.assert(value === true || value === false || value === undefined, "value must only be true, false or undefined.");
var arrayIndex = this.computeTriStateArrayIndex(index);
var encoded = this.bits[arrayIndex];
if (encoded === undefined) {
if (value === undefined) {
return;
}
encoded = 0;
}
var bitIndex = this.computeTriStateEncodedValueIndex(index);
var clearMask = ~(3 /* TriStateClearBitsMask */ << bitIndex);
encoded = encoded & clearMask;
if (value === true) {
encoded = encoded | (2 /* TriStateEncodedTrue */ << bitIndex);
} else if (value === false) {
encoded = encoded | (1 /* TriStateEncodedFalse */ << bitIndex);
}
this.bits[arrayIndex] = encoded;
} else {
TypeScript.Debug.assert(value === true || value === false, "value must only be true or false.");
var arrayIndex = this.computeBiStateArrayIndex(index);
var encoded = this.bits[arrayIndex];
if (encoded === undefined) {
if (value === false) {
return;
}
encoded = 0;
}
var bitIndex = this.computeBiStateEncodedValueIndex(index);
encoded = encoded & ~(1 /* BiStateClearBitsMask */ << bitIndex);
if (value) {
encoded = encoded | (1 /* BiStateEncodedTrue */ << bitIndex);
}
this.bits[arrayIndex] = encoded;
}
};
BitVectorImpl.prototype.release = function () {
TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector");
this.isReleased = true;
this.bits.length = 0;
pool.push(this);
};
return BitVectorImpl;
})();
function getBitVector(allowUndefinedValues) {
if (pool.length === 0) {
return new BitVectorImpl(allowUndefinedValues);
}
var vector = pool.pop();
vector.isReleased = false;
vector.allowUndefinedValues = allowUndefinedValues;
return vector;
}
BitVector.getBitVector = getBitVector;
})(TypeScript.BitVector || (TypeScript.BitVector = {}));
var BitVector = TypeScript.BitVector;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (BitMatrix) {
var pool = [];
var BitMatrixImpl = (function () {
function BitMatrixImpl(allowUndefinedValues) {
this.allowUndefinedValues = allowUndefinedValues;
this.isReleased = false;
this.vectors = [];
}
BitMatrixImpl.prototype.valueAt = function (x, y) {
TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector");
var vector = this.vectors[x];
if (!vector) {
return this.allowUndefinedValues ? undefined : false;
}
return vector.valueAt(y);
};
BitMatrixImpl.prototype.setValueAt = function (x, y, value) {
TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector");
var vector = this.vectors[x];
if (!vector) {
if (value === undefined) {
return;
}
vector = TypeScript.BitVector.getBitVector(this.allowUndefinedValues);
this.vectors[x] = vector;
}
vector.setValueAt(y, value);
};
BitMatrixImpl.prototype.release = function () {
TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector");
this.isReleased = true;
for (var name in this.vectors) {
if (this.vectors.hasOwnProperty(name)) {
var vector = this.vectors[name];
vector.release();
}
}
this.vectors.length = 0;
pool.push(this);
};
return BitMatrixImpl;
})();
function getBitMatrix(allowUndefinedValues) {
if (pool.length === 0) {
return new BitMatrixImpl(allowUndefinedValues);
}
var matrix = pool.pop();
matrix.isReleased = false;
matrix.allowUndefinedValues = allowUndefinedValues;
return matrix;
}
BitMatrix.getBitMatrix = getBitMatrix;
})(TypeScript.BitMatrix || (TypeScript.BitMatrix = {}));
var BitMatrix = TypeScript.BitMatrix;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (Constants) {
Constants[Constants["Max31BitInteger"] = 1073741823] = "Max31BitInteger";
Constants[Constants["Min31BitInteger"] = -1073741824] = "Min31BitInteger";
})(TypeScript.Constants || (TypeScript.Constants = {}));
var Constants = TypeScript.Constants;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (AssertionLevel) {
AssertionLevel[AssertionLevel["None"] = 0] = "None";
AssertionLevel[AssertionLevel["Normal"] = 1] = "Normal";
AssertionLevel[AssertionLevel["Aggressive"] = 2] = "Aggressive";
AssertionLevel[AssertionLevel["VeryAggressive"] = 3] = "VeryAggressive";
})(TypeScript.AssertionLevel || (TypeScript.AssertionLevel = {}));
var AssertionLevel = TypeScript.AssertionLevel;
var Debug = (function () {
function Debug() {
}
Debug.shouldAssert = function (level) {
return this.currentAssertionLevel >= level;
};
Debug.assert = function (expression, message, verboseDebugInfo) {
if (typeof message === "undefined") { message = ""; }
if (typeof verboseDebugInfo === "undefined") { verboseDebugInfo = null; }
if (!expression) {
var verboseDebugString = "";
if (verboseDebugInfo) {
verboseDebugString = "\r\nVerbose Debug Information:" + verboseDebugInfo();
}
throw new Error("Debug Failure. False expression: " + message + verboseDebugString);
}
};
Debug.fail = function (message) {
Debug.assert(false, message);
};
Debug.currentAssertionLevel = 0 /* None */;
return Debug;
})();
TypeScript.Debug = Debug;
})(TypeScript || (TypeScript = {}));
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) {
TypeScript.LocalizedDiagnosticMessages = null;
var Location = (function () {
function Location(fileName, lineMap, start, length) {
this._fileName = fileName;
this._lineMap = lineMap;
this._start = start;
this._length = length;
}
Location.prototype.fileName = function () {
return this._fileName;
};
Location.prototype.lineMap = function () {
return this._lineMap;
};
Location.prototype.line = function () {
return this._lineMap ? this._lineMap.getLineNumberFromPosition(this.start()) : 0;
};
Location.prototype.character = function () {
return this._lineMap ? this._lineMap.getLineAndCharacterFromPosition(this.start()).character() : 0;
};
Location.prototype.start = function () {
return this._start;
};
Location.prototype.length = function () {
return this._length;
};
Location.equals = function (location1, location2) {
return location1._fileName === location2._fileName && location1._start === location2._start && location1._length === location2._length;
};
return Location;
})();
TypeScript.Location = Location;
var Diagnostic = (function (_super) {
__extends(Diagnostic, _super);
function Diagnostic(fileName, lineMap, start, length, diagnosticKey, _arguments, additionalLocations) {
if (typeof _arguments === "undefined") { _arguments = null; }
if (typeof additionalLocations === "undefined") { additionalLocations = null; }
_super.call(this, fileName, lineMap, start, length);
this._diagnosticKey = diagnosticKey;
this._arguments = (_arguments && _arguments.length > 0) ? _arguments : null;
this._additionalLocations = (additionalLocations && additionalLocations.length > 0) ? additionalLocations : null;
}
Diagnostic.prototype.toJSON = function (key) {
var result = {};
result.start = this.start();
result.length = this.length();
result.diagnosticCode = this._diagnosticKey;
var _arguments = this.arguments();
if (_arguments && _arguments.length > 0) {
result.arguments = _arguments;
}
return result;
};
Diagnostic.prototype.diagnosticKey = function () {
return this._diagnosticKey;
};
Diagnostic.prototype.arguments = function () {
return this._arguments;
};
Diagnostic.prototype.text = function () {
return TypeScript.getLocalizedText(this._diagnosticKey, this._arguments);
};
Diagnostic.prototype.message = function () {
return TypeScript.getDiagnosticMessage(this._diagnosticKey, this._arguments);
};
Diagnostic.prototype.additionalLocations = function () {
return this._additionalLocations || [];
};
Diagnostic.equals = function (diagnostic1, diagnostic2) {
return Location.equals(diagnostic1, diagnostic2) && diagnostic1._diagnosticKey === diagnostic2._diagnosticKey && TypeScript.ArrayUtilities.sequenceEquals(diagnostic1._arguments, diagnostic2._arguments, function (v1, v2) {
return v1 === v2;
});
};
Diagnostic.prototype.info = function () {
return getDiagnosticInfoFromKey(this.diagnosticKey());
};
return Diagnostic;
})(Location);
TypeScript.Diagnostic = Diagnostic;
function newLine() {
return TypeScript.Environment ? TypeScript.Environment.newLine : "\r\n";
}
TypeScript.newLine = newLine;
function getLargestIndex(diagnostic) {
var largest = -1;
var regex = /\{(\d+)\}/g;
var match;
while (match = regex.exec(diagnostic)) {
var val = parseInt(match[1]);
if (!isNaN(val) && val > largest) {
largest = val;
}
}
return largest;
}
function getDiagnosticInfoFromKey(diagnosticKey) {
var result = TypeScript.diagnosticInformationMap[diagnosticKey];
TypeScript.Debug.assert(result);
return result;
}
function getLocalizedText(diagnosticKey, args) {
if (TypeScript.LocalizedDiagnosticMessages) {
}
var diagnosticMessageText = TypeScript.LocalizedDiagnosticMessages ? TypeScript.LocalizedDiagnosticMessages[diagnosticKey] : diagnosticKey;
TypeScript.Debug.assert(diagnosticMessageText !== undefined && diagnosticMessageText !== null);
var actualCount = args ? args.length : 0;
var expectedCount = 1 + getLargestIndex(diagnosticKey);
if (expectedCount !== actualCount) {
throw new Error(getLocalizedText(TypeScript.DiagnosticCode.Expected_0_arguments_to_message_got_1_instead, [expectedCount, actualCount]));
}
var valueCount = 1 + getLargestIndex(diagnosticMessageText);
if (valueCount !== expectedCount) {
throw new Error(getLocalizedText(TypeScript.DiagnosticCode.Expected_the_message_0_to_have_1_arguments_but_it_had_2, [diagnosticMessageText, expectedCount, valueCount]));
}
diagnosticMessageText = diagnosticMessageText.replace(/{(\d+)}/g, function (match, num) {
return typeof args[num] !== 'undefined' ? args[num] : match;
});
diagnosticMessageText = diagnosticMessageText.replace(/{(NL)}/g, function (match) {
return TypeScript.newLine();
});
return diagnosticMessageText;
}
TypeScript.getLocalizedText = getLocalizedText;
function getDiagnosticMessage(diagnosticKey, args) {
var diagnostic = getDiagnosticInfoFromKey(diagnosticKey);
var diagnosticMessageText = getLocalizedText(diagnosticKey, args);
var message;
if (diagnostic.category === 1 /* Error */) {
message = getLocalizedText(TypeScript.DiagnosticCode.error_TS_0_1, [diagnostic.code, diagnosticMessageText]);
} else if (diagnostic.category === 0 /* Warning */) {
message = getLocalizedText(TypeScript.DiagnosticCode.warning_TS_0_1, [diagnostic.code, diagnosticMessageText]);
} else {
message = diagnosticMessageText;
}
return message;
}
TypeScript.getDiagnosticMessage = getDiagnosticMessage;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Errors = (function () {
function Errors() {
}
Errors.argument = function (argument, message) {
return new Error("Invalid argument: " + argument + ". " + message);
};
Errors.argumentOutOfRange = function (argument) {
return new Error("Argument out of range: " + argument);
};
Errors.argumentNull = function (argument) {
return new Error("Argument null: " + argument);
};
Errors.abstract = function () {
return new Error("Operation not implemented properly by subclass.");
};
Errors.notYetImplemented = function () {
return new Error("Not yet implemented.");
};
Errors.invalidOperation = function (message) {
return new Error("Invalid operation: " + message);
};
return Errors;
})();
TypeScript.Errors = Errors;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Hash = (function () {
function Hash() {
}
Hash.computeFnv1aCharArrayHashCode = function (text, start, len) {
var hashCode = Hash.FNV_BASE;
var end = start + len;
for (var i = start; i < end; i++) {
hashCode = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(hashCode ^ text[i], Hash.FNV_PRIME);
}
return hashCode;
};
Hash.computeSimple31BitCharArrayHashCode = function (key, start, len) {
var hash = 0;
for (var i = 0; i < len; i++) {
var ch = key[start + i];
hash = ((((hash << 5) - hash) | 0) + ch) | 0;
}
return hash & 0x7FFFFFFF;
};
Hash.computeSimple31BitStringHashCode = function (key) {
var hash = 0;
var start = 0;
var len = key.length;
for (var i = 0; i < len; i++) {
var ch = key.charCodeAt(start + i);
hash = ((((hash << 5) - hash) | 0) + ch) | 0;
}
return hash & 0x7FFFFFFF;
};
Hash.computeMurmur2StringHashCode = function (key, seed) {
var m = 0x5bd1e995;
var r = 24;
var numberOfCharsLeft = key.length;
var h = Math.abs(seed ^ numberOfCharsLeft);
var index = 0;
while (numberOfCharsLeft >= 2) {
var c1 = key.charCodeAt(index);
var c2 = key.charCodeAt(index + 1);
var k = Math.abs(c1 | (c2 << 16));
k = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(k, m);
k ^= k >> r;
k = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(k, m);
h = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(h, m);
h ^= k;
index += 2;
numberOfCharsLeft -= 2;
}
if (numberOfCharsLeft === 1) {
h ^= key.charCodeAt(index);
h = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(h, m);
}
h ^= h >> 13;
h = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(h, m);
h ^= h >> 15;
return h;
};
Hash.getPrime = function (min) {
for (var i = 0; i < Hash.primes.length; i++) {
var num = Hash.primes[i];
if (num >= min) {
return num;
}
}
throw TypeScript.Errors.notYetImplemented();
};
Hash.expandPrime = function (oldSize) {
var num = oldSize << 1;
if (num > 2146435069 && 2146435069 > oldSize) {
return 2146435069;
}
return Hash.getPrime(num);
};
Hash.combine = function (value, currentHash) {
return (((currentHash << 5) + currentHash) + value) & 0x7FFFFFFF;
};
Hash.FNV_BASE = 2166136261;
Hash.FNV_PRIME = 16777619;
Hash.primes = [
3, 7, 11, 17, 23, 29, 37, 47, 59, 71, 89, 107, 131, 163, 197, 239, 293, 353, 431, 521,
631, 761, 919, 1103, 1327, 1597, 1931, 2333, 2801, 3371, 4049, 4861, 5839, 7013, 8419,
10103, 12143, 14591, 17519, 21023, 25229, 30293, 36353, 43627, 52361, 62851, 75431,
90523, 108631, 130363, 156437, 187751, 225307, 270371, 324449, 389357, 467237, 560689,
672827, 807403, 968897, 1162687, 1395263, 1674319, 2009191, 2411033, 2893249, 3471899,
4166287, 4999559, 5999471, 7199369];
return Hash;
})();
TypeScript.Hash = Hash;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (Collections) {
Collections.DefaultHashTableCapacity = 1024;
var HashTableEntry = (function () {
function HashTableEntry(Key, Value, HashCode, Next) {
this.Key = Key;
this.Value = Value;
this.HashCode = HashCode;
this.Next = Next;
}
return HashTableEntry;
})();
var HashTable = (function () {
function HashTable(capacity, hash) {
this.hash = hash;
this.count = 0;
var size = TypeScript.Hash.getPrime(capacity);
this.entries = TypeScript.ArrayUtilities.createArray(size, null);
}
HashTable.prototype.set = function (key, value) {
this.addOrSet(key, value, false);
};
HashTable.prototype.add = function (key, value) {
this.addOrSet(key, value, true);
};
HashTable.prototype.containsKey = function (key) {
var hashCode = this.computeHashCode(key);
var entry = this.findEntry(key, hashCode);
return entry !== null;
};
HashTable.prototype.get = function (key) {
var hashCode = this.computeHashCode(key);
var entry = this.findEntry(key, hashCode);
return entry === null ? null : entry.Value;
};
HashTable.prototype.computeHashCode = function (key) {
var hashCode = this.hash === null ? key.hashCode : this.hash(key);
hashCode = hashCode & 0x7FFFFFFF;
TypeScript.Debug.assert(hashCode >= 0);
return hashCode;
};
HashTable.prototype.addOrSet = function (key, value, throwOnExistingEntry) {
var hashCode = this.computeHashCode(key);
var entry = this.findEntry(key, hashCode);
if (entry !== null) {
if (throwOnExistingEntry) {
throw TypeScript.Errors.argument('key', "Key was already in table.");
}
entry.Key = key;
entry.Value = value;
return;
}
return this.addEntry(key, value, hashCode);
};
HashTable.prototype.findEntry = function (key, hashCode) {
for (var e = this.entries[hashCode % this.entries.length]; e !== null; e = e.Next) {
if (e.HashCode === hashCode && key === e.Key) {
return e;
}
}
return null;
};
HashTable.prototype.addEntry = function (key, value, hashCode) {
var index = hashCode % this.entries.length;
var e = new HashTableEntry(key, value, hashCode, this.entries[index]);
this.entries[index] = e;
if (this.count >= (this.entries.length / 2)) {
this.grow();
}
this.count++;
return e.Key;
};
HashTable.prototype.grow = function () {
var newSize = TypeScript.Hash.expandPrime(this.entries.length);
var oldEntries = this.entries;
var newEntries = TypeScript.ArrayUtilities.createArray(newSize, null);
this.entries = newEntries;
for (var i = 0; i < oldEntries.length; i++) {
var e = oldEntries[i];
while (e !== null) {
var newIndex = e.HashCode % newSize;
var tmp = e.Next;
e.Next = newEntries[newIndex];
newEntries[newIndex] = e;
e = tmp;
}
}
};
return HashTable;
})();
Collections.HashTable = HashTable;
function createHashTable(capacity, hash) {
if (typeof capacity === "undefined") { capacity = Collections.DefaultHashTableCapacity; }
if (typeof hash === "undefined") { hash = null; }
return new HashTable(capacity, hash);
}
Collections.createHashTable = createHashTable;
var currentHashCode = 1;
function identityHashCode(value) {
if (value.__hash === undefined) {
value.__hash = currentHashCode;
currentHashCode++;
}
return value.__hash;
}
Collections.identityHashCode = identityHashCode;
})(TypeScript.Collections || (TypeScript.Collections = {}));
var Collections = TypeScript.Collections;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
TypeScript.nodeMakeDirectoryTime = 0;
TypeScript.nodeCreateBufferTime = 0;
TypeScript.nodeWriteFileSyncTime = 0;
(function (ByteOrderMark) {
ByteOrderMark[ByteOrderMark["None"] = 0] = "None";
ByteOrderMark[ByteOrderMark["Utf8"] = 1] = "Utf8";
ByteOrderMark[ByteOrderMark["Utf16BigEndian"] = 2] = "Utf16BigEndian";
ByteOrderMark[ByteOrderMark["Utf16LittleEndian"] = 3] = "Utf16LittleEndian";
})(TypeScript.ByteOrderMark || (TypeScript.ByteOrderMark = {}));
var ByteOrderMark = TypeScript.ByteOrderMark;
var FileInformation = (function () {
function FileInformation(contents, byteOrderMark) {
this.contents = contents;
this.byteOrderMark = byteOrderMark;
}
return FileInformation;
})();
TypeScript.FileInformation = FileInformation;
TypeScript.Environment = (function () {
function getWindowsScriptHostEnvironment() {
try {
var fso = new ActiveXObject("Scripting.FileSystemObject");
} catch (e) {
return null;
}
var streamObjectPool = [];
function getStreamObject() {
if (streamObjectPool.length > 0) {
return streamObjectPool.pop();
} else {
return new ActiveXObject("ADODB.Stream");
}
}
function releaseStreamObject(obj) {
streamObjectPool.push(obj);
}
var args = [];
for (var i = 0; i < WScript.Arguments.length; i++) {
args[i] = WScript.Arguments.Item(i);
}
return {
newLine: "\r\n",
currentDirectory: function () {
return WScript.CreateObject("WScript.Shell").CurrentDirectory;
},
supportsCodePage: function () {
return WScript.ReadFile;
},
readFile: function (path, codepage) {
try {
if (codepage !== null && this.supportsCodePage()) {
try {
var contents = WScript.ReadFile(path, codepage);
return new FileInformation(contents, 0 /* None */);
} catch (e) {
}
}
var streamObj = getStreamObject();
streamObj.Open();
streamObj.Type = 2;
streamObj.Charset = 'x-ansi';
streamObj.LoadFromFile(path);
var bomChar = streamObj.ReadText(2);
streamObj.Position = 0;
var byteOrderMark = 0 /* None */;
if (bomChar.charCodeAt(0) === 0xFE && bomChar.charCodeAt(1) === 0xFF) {
streamObj.Charset = 'unicode';
byteOrderMark = 2 /* Utf16BigEndian */;
} else if (bomChar.charCodeAt(0) === 0xFF && bomChar.charCodeAt(1) === 0xFE) {
streamObj.Charset = 'unicode';
byteOrderMark = 3 /* Utf16LittleEndian */;
} else if (bomChar.charCodeAt(0) === 0xEF && bomChar.charCodeAt(1) === 0xBB) {
streamObj.Charset = 'utf-8';
byteOrderMark = 1 /* Utf8 */;
} else {
streamObj.Charset = 'utf-8';
}
var contents = streamObj.ReadText(-1);
streamObj.Close();
releaseStreamObject(streamObj);
return new FileInformation(contents, byteOrderMark);
} catch (err) {
var message;
if (err.number === -2147024809) {
message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Unsupported_file_encoding, null);
} else {
message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Cannot_read_file_0_1, [path, err.message]);
}
throw new Error(message);
}
},
writeFile: function (path, contents, writeByteOrderMark) {
var textStream = getStreamObject();
textStream.Charset = 'utf-8';
textStream.Open();
textStream.WriteText(contents, 0);
if (!writeByteOrderMark) {
textStream.Position = 3;
} else {
textStream.Position = 0;
}
var fileStream = getStreamObject();
fileStream.Type = 1;
fileStream.Open();
textStream.CopyTo(fileStream);
fileStream.Flush();
fileStream.SaveToFile(path, 2);
fileStream.Close();
textStream.Flush();
textStream.Close();
},
fileExists: function (path) {
return fso.FileExists(path);
},
deleteFile: function (path) {
if (fso.FileExists(path)) {
fso.DeleteFile(path, true);
}
},
directoryExists: function (path) {
return fso.FolderExists(path);
},
listFiles: function (path, spec, options) {
options = options || {};
function filesInFolder(folder, root) {
var paths = [];
var fc;
if (options.recursive) {
fc = new Enumerator(folder.subfolders);
for (; !fc.atEnd(); fc.moveNext()) {
paths = paths.concat(filesInFolder(fc.item(), root + "\\" + fc.item().Name));
}
}
fc = new Enumerator(folder.files);
for (; !fc.atEnd(); fc.moveNext()) {
if (!spec || fc.item().Name.match(spec)) {
paths.push(root + "\\" + fc.item().Name);
}
}
return paths;
}
var folder = fso.GetFolder(path);
var paths = [];
return filesInFolder(folder, path);
},
arguments: args,
standardOut: WScript.StdOut
};
}
;
function getNodeEnvironment() {
var _fs = require('fs');
var _path = require('path');
var _module = require('module');
var _os = require('os');
return {
newLine: _os.EOL,
currentDirectory: function () {
return process.cwd();
},
supportsCodePage: function () {
return false;
},
readFile: function (file, codepage) {
if (codepage !== null) {
throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.codepage_option_not_supported_on_current_platform, null));
}
var buffer = _fs.readFileSync(file);
switch (buffer[0]) {
case 0xFE:
if (buffer[1] === 0xFF) {
var i = 0;
while ((i + 1) < buffer.length) {
var temp = buffer[i];
buffer[i] = buffer[i + 1];
buffer[i + 1] = temp;
i += 2;
}
return new FileInformation(buffer.toString("ucs2", 2), 2 /* Utf16BigEndian */);
}
break;
case 0xFF:
if (buffer[1] === 0xFE) {
return new FileInformation(buffer.toString("ucs2", 2), 3 /* Utf16LittleEndian */);
}
break;
case 0xEF:
if (buffer[1] === 0xBB) {
return new FileInformation(buffer.toString("utf8", 3), 1 /* Utf8 */);
}
}
return new FileInformation(buffer.toString("utf8", 0), 0 /* None */);
},
writeFile: function (path, contents, writeByteOrderMark) {
function mkdirRecursiveSync(path) {
var stats = _fs.statSync(path);
if (stats.isFile()) {
throw "\"" + path + "\" exists but isn't a directory.";
} else if (stats.isDirectory()) {
return;
} else {
mkdirRecursiveSync(_path.dirname(path));
_fs.mkdirSync(path, 509);
}
}
var start = new Date().getTime();
mkdirRecursiveSync(_path.dirname(path));
TypeScript.nodeMakeDirectoryTime += new Date().getTime() - start;
if (writeByteOrderMark) {
contents = '\uFEFF' + contents;
}
var start = new Date().getTime();
var chunkLength = 4 * 1024;
var fileDescriptor = _fs.openSync(path, "w");
try {
for (var index = 0; index < contents.length; index += chunkLength) {
var bufferStart = new Date().getTime();
var buffer = new Buffer(contents.substr(index, chunkLength), "utf8");
TypeScript.nodeCreateBufferTime += new Date().getTime() - bufferStart;
_fs.writeSync(fileDescriptor, buffer, 0, buffer.length, null);
}
} finally {
_fs.closeSync(fileDescriptor);
}
TypeScript.nodeWriteFileSyncTime += new Date().getTime() - start;
},
fileExists: function (path) {
return _fs.existsSync(path);
},
deleteFile: function (path) {
try {
_fs.unlinkSync(path);
} catch (e) {
}
},
directoryExists: function (path) {
return _fs.existsSync(path) && _fs.statSync(path).isDirectory();
},
listFiles: function dir(path, spec, options) {
options = options || {};
function filesInFolder(folder) {
var paths = [];
var files = _fs.readdirSync(folder);
for (var i = 0; i < files.length; i++) {
var stat = _fs.statSync(folder + "\\" + files[i]);
if (options.recursive && stat.isDirectory()) {
paths = paths.concat(filesInFolder(folder + "\\" + files[i]));
} else if (stat.isFile() && (!spec || files[i].match(spec))) {
paths.push(folder + "\\" + files[i]);
}
}
return paths;
}
return filesInFolder(path);
},
arguments: process.argv.slice(2),
standardOut: {
Write: function (str) {
process.stdout.write(str);
},
WriteLine: function (str) {
process.stdout.write(str + '\n');
},
Close: function () {
}
}
};
}
;
if (typeof WScript !== "undefined" && typeof ActiveXObject === "function") {
return getWindowsScriptHostEnvironment();
} else if (typeof module !== 'undefined' && module.exports) {
return getNodeEnvironment();
} else {
return null;
}
})();
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (IntegerUtilities) {
function integerDivide(numerator, denominator) {
return (numerator / denominator) >> 0;
}
IntegerUtilities.integerDivide = integerDivide;
function integerMultiplyLow32Bits(n1, n2) {
var n1Low16 = n1 & 0x0000ffff;
var n1High16 = n1 >>> 16;
var n2Low16 = n2 & 0x0000ffff;
var n2High16 = n2 >>> 16;
var resultLow32 = (((n1 & 0xffff0000) * n2) >>> 0) + (((n1 & 0x0000ffff) * n2) >>> 0) >>> 0;
return resultLow32;
}
IntegerUtilities.integerMultiplyLow32Bits = integerMultiplyLow32Bits;
function integerMultiplyHigh32Bits(n1, n2) {
var n1Low16 = n1 & 0x0000ffff;
var n1High16 = n1 >>> 16;
var n2Low16 = n2 & 0x0000ffff;
var n2High16 = n2 >>> 16;
var resultHigh32 = n1High16 * n2High16 + ((((n1Low16 * n2Low16) >>> 17) + n1Low16 * n2High16) >>> 15);
return resultHigh32;
}
IntegerUtilities.integerMultiplyHigh32Bits = integerMultiplyHigh32Bits;
function isInteger(text) {
return /^[0-9]+$/.test(text);
}
IntegerUtilities.isInteger = isInteger;
function isHexInteger(text) {
return /^0(x|X)[0-9a-fA-F]+$/.test(text);
}
IntegerUtilities.isHexInteger = isHexInteger;
})(TypeScript.IntegerUtilities || (TypeScript.IntegerUtilities = {}));
var IntegerUtilities = TypeScript.IntegerUtilities;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var LineMap = (function () {
function LineMap(_computeLineStarts, length) {
this._computeLineStarts = _computeLineStarts;
this.length = length;
this._lineStarts = null;
}
LineMap.prototype.toJSON = function (key) {
return { lineStarts: this.lineStarts(), length: this.length };
};
LineMap.prototype.equals = function (other) {
return this.length === other.length && TypeScript.ArrayUtilities.sequenceEquals(this.lineStarts(), other.lineStarts(), function (v1, v2) {
return v1 === v2;
});
};
LineMap.prototype.lineStarts = function () {
if (this._lineStarts === null) {
this._lineStarts = this._computeLineStarts();
}
return this._lineStarts;
};
LineMap.prototype.lineCount = function () {
return this.lineStarts().length;
};
LineMap.prototype.getPosition = function (line, character) {
return this.lineStarts()[line] + character;
};
LineMap.prototype.getLineNumberFromPosition = function (position) {
if (position < 0 || position > this.length) {
throw TypeScript.Errors.argumentOutOfRange("position");
}
if (position === this.length) {
return this.lineCount() - 1;
}
var lineNumber = TypeScript.ArrayUtilities.binarySearch(this.lineStarts(), position);
if (lineNumber < 0) {
lineNumber = (~lineNumber) - 1;
}
return lineNumber;
};
LineMap.prototype.getLineStartPosition = function (lineNumber) {
return this.lineStarts()[lineNumber];
};
LineMap.prototype.fillLineAndCharacterFromPosition = function (position, lineAndCharacter) {
if (position < 0 || position > this.length) {
throw TypeScript.Errors.argumentOutOfRange("position");
}
var lineNumber = this.getLineNumberFromPosition(position);
lineAndCharacter.line = lineNumber;
lineAndCharacter.character = position - this.lineStarts()[lineNumber];
};
LineMap.prototype.getLineAndCharacterFromPosition = function (position) {
if (position < 0 || position > this.length) {
throw TypeScript.Errors.argumentOutOfRange("position");
}
var lineNumber = this.getLineNumberFromPosition(position);
return new TypeScript.LineAndCharacter(lineNumber, position - this.lineStarts()[lineNumber]);
};
LineMap.empty = new LineMap(function () {
return [0];
}, 0);
return LineMap;
})();
TypeScript.LineMap = LineMap;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var LineAndCharacter = (function () {
function LineAndCharacter(line, character) {
this._line = 0;
this._character = 0;
if (line < 0) {
throw TypeScript.Errors.argumentOutOfRange("line");
}
if (character < 0) {
throw TypeScript.Errors.argumentOutOfRange("character");
}
this._line = line;
this._character = character;
}
LineAndCharacter.prototype.line = function () {
return this._line;
};
LineAndCharacter.prototype.character = function () {
return this._character;
};
return LineAndCharacter;
})();
TypeScript.LineAndCharacter = LineAndCharacter;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var MathPrototype = (function () {
function MathPrototype() {
}
MathPrototype.max = function (a, b) {
return a >= b ? a : b;
};
MathPrototype.min = function (a, b) {
return a <= b ? a : b;
};
return MathPrototype;
})();
TypeScript.MathPrototype = MathPrototype;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (Collections) {
Collections.DefaultStringTableCapacity = 256;
var StringTableEntry = (function () {
function StringTableEntry(Text, HashCode, Next) {
this.Text = Text;
this.HashCode = HashCode;
this.Next = Next;
}
return StringTableEntry;
})();
var StringTable = (function () {
function StringTable(capacity) {
this.count = 0;
var size = TypeScript.Hash.getPrime(capacity);
this.entries = TypeScript.ArrayUtilities.createArray(size, null);
}
StringTable.prototype.addCharArray = function (key, start, len) {
var hashCode = TypeScript.Hash.computeSimple31BitCharArrayHashCode(key, start, len) & 0x7FFFFFFF;
var entry = this.findCharArrayEntry(key, start, len, hashCode);
if (entry !== null) {
return entry.Text;
}
var slice = key.slice(start, start + len);
return this.addEntry(TypeScript.StringUtilities.fromCharCodeArray(slice), hashCode);
};
StringTable.prototype.findCharArrayEntry = function (key, start, len, hashCode) {
for (var e = this.entries[hashCode % this.entries.length]; e !== null; e = e.Next) {
if (e.HashCode === hashCode && StringTable.textCharArrayEquals(e.Text, key, start, len)) {
return e;
}
}
return null;
};
StringTable.prototype.addEntry = function (text, hashCode) {
var index = hashCode % this.entries.length;
var e = new StringTableEntry(text, hashCode, this.entries[index]);
this.entries[index] = e;
if (this.count === this.entries.length) {
this.grow();
}
this.count++;
return e.Text;
};
StringTable.prototype.grow = function () {
var newSize = TypeScript.Hash.expandPrime(this.entries.length);
var oldEntries = this.entries;
var newEntries = TypeScript.ArrayUtilities.createArray(newSize, null);
this.entries = newEntries;
for (var i = 0; i < oldEntries.length; i++) {
var e = oldEntries[i];
while (e !== null) {
var newIndex = e.HashCode % newSize;
var tmp = e.Next;
e.Next = newEntries[newIndex];
newEntries[newIndex] = e;
e = tmp;
}
}
};
StringTable.textCharArrayEquals = function (text, array, start, length) {
if (text.length !== length) {
return false;
}
var s = start;
for (var i = 0; i < length; i++) {
if (text.charCodeAt(i) !== array[s]) {
return false;
}
s++;
}
return true;
};
return StringTable;
})();
Collections.StringTable = StringTable;
Collections.DefaultStringTable = new StringTable(Collections.DefaultStringTableCapacity);
})(TypeScript.Collections || (TypeScript.Collections = {}));
var Collections = TypeScript.Collections;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var StringUtilities = (function () {
function StringUtilities() {
}
StringUtilities.isString = function (value) {
return Object.prototype.toString.apply(value, []) === '[object String]';
};
StringUtilities.fromCharCodeArray = function (array) {
return String.fromCharCode.apply(null, array);
};
StringUtilities.endsWith = function (string, value) {
return string.substring(string.length - value.length, string.length) === value;
};
StringUtilities.startsWith = function (string, value) {
return string.substr(0, value.length) === value;
};
StringUtilities.copyTo = function (source, sourceIndex, destination, destinationIndex, count) {
for (var i = 0; i < count; i++) {
destination[destinationIndex + i] = source.charCodeAt(sourceIndex + i);
}
};
StringUtilities.repeat = function (value, count) {
return Array(count + 1).join(value);
};
StringUtilities.stringEquals = function (val1, val2) {
return val1 === val2;
};
return StringUtilities;
})();
TypeScript.StringUtilities = StringUtilities;
})(TypeScript || (TypeScript = {}));
var global = Function("return this").call(null);
var TypeScript;
(function (TypeScript) {
var Clock;
(function (Clock) {
Clock.now;
Clock.resolution;
if (typeof WScript !== "undefined" && typeof global['WScript'].InitializeProjection !== "undefined") {
global['WScript'].InitializeProjection();
Clock.now = function () {
return TestUtilities.QueryPerformanceCounter();
};
Clock.resolution = TestUtilities.QueryPerformanceFrequency();
} else {
Clock.now = function () {
return Date.now();
};
Clock.resolution = 1000;
}
})(Clock || (Clock = {}));
var Timer = (function () {
function Timer() {
this.time = 0;
}
Timer.prototype.start = function () {
this.time = 0;
this.startTime = Clock.now();
};
Timer.prototype.end = function () {
this.time = (Clock.now() - this.startTime);
};
return Timer;
})();
TypeScript.Timer = Timer;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (DiagnosticCategory) {
DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning";
DiagnosticCategory[DiagnosticCategory["Error"] = 1] = "Error";
DiagnosticCategory[DiagnosticCategory["Message"] = 2] = "Message";
DiagnosticCategory[DiagnosticCategory["NoPrefix"] = 3] = "NoPrefix";
})(TypeScript.DiagnosticCategory || (TypeScript.DiagnosticCategory = {}));
var DiagnosticCategory = TypeScript.DiagnosticCategory;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
TypeScript.diagnosticInformationMap = {
"error TS{0}: {1}": {
"code": 0,
"category": 3 /* NoPrefix */
},
"warning TS{0}: {1}": {
"code": 1,
"category": 3 /* NoPrefix */
},
"Unrecognized escape sequence.": {
"code": 1000,
"category": 1 /* Error */
},
"Unexpected character {0}.": {
"code": 1001,
"category": 1 /* Error */
},
"Missing close quote character.": {
"code": 1002,
"category": 1 /* Error */
},
"Identifier expected.": {
"code": 1003,
"category": 1 /* Error */
},
"'{0}' keyword expected.": {
"code": 1004,
"category": 1 /* Error */
},
"'{0}' expected.": {
"code": 1005,
"category": 1 /* Error */
},
"Identifier expected; '{0}' is a keyword.": {
"code": 1006,
"category": 1 /* Error */
},
"Automatic semicolon insertion not allowed.": {
"code": 1007,
"category": 1 /* Error */
},
"Unexpected token; '{0}' expected.": {
"code": 1008,
"category": 1 /* Error */
},
"Trailing separator not allowed.": {
"code": 1009,
"category": 1 /* Error */
},
"'*/' expected.": {
"code": 1010,
"category": 1 /* Error */
},
"'public' or 'private' modifier must precede 'static'.": {
"code": 1011,
"category": 1 /* Error */
},
"Unexpected token.": {
"code": 1012,
"category": 1 /* Error */
},
"Catch clause parameter cannot have a type annotation.": {
"code": 1013,
"category": 1 /* Error */
},
"Rest parameter must be last in list.": {
"code": 1014,
"category": 1 /* Error */
},
"Parameter cannot have question mark and initializer.": {
"code": 1015,
"category": 1 /* Error */
},
"Required parameter cannot follow optional parameter.": {
"code": 1016,
"category": 1 /* Error */
},
"Index signatures cannot have rest parameters.": {
"code": 1017,
"category": 1 /* Error */
},
"Index signature parameter cannot have accessibility modifiers.": {
"code": 1018,
"category": 1 /* Error */
},
"Index signature parameter cannot have a question mark.": {
"code": 1019,
"category": 1 /* Error */
},
"Index signature parameter cannot have an initializer.": {
"code": 1020,
"category": 1 /* Error */
},
"Index signature must have a type annotation.": {
"code": 1021,
"category": 1 /* Error */
},
"Index signature parameter must have a type annotation.": {
"code": 1022,
"category": 1 /* Error */
},
"Index signature parameter type must be 'string' or 'number'.": {
"code": 1023,
"category": 1 /* Error */
},
"'extends' clause already seen.": {
"code": 1024,
"category": 1 /* Error */
},
"'extends' clause must precede 'implements' clause.": {
"code": 1025,
"category": 1 /* Error */
},
"Classes can only extend a single class.": {
"code": 1026,
"category": 1 /* Error */
},
"'implements' clause already seen.": {
"code": 1027,
"category": 1 /* Error */
},
"Accessibility modifier already seen.": {
"code": 1028,
"category": 1 /* Error */
},
"'{0}' modifier must precede '{1}' modifier.": {
"code": 1029,
"category": 1 /* Error */
},
"'{0}' modifier already seen.": {
"code": 1030,
"category": 1 /* Error */
},
"'{0}' modifier cannot appear on a class element.": {
"code": 1031,
"category": 1 /* Error */
},
"Interface declaration cannot have 'implements' clause.": {
"code": 1032,
"category": 1 /* Error */
},
"'super' invocation cannot have type arguments.": {
"code": 1034,
"category": 1 /* Error */
},
"Only ambient modules can use quoted names.": {
"code": 1035,
"category": 1 /* Error */
},
"Statements are not allowed in ambient contexts.": {
"code": 1036,
"category": 1 /* Error */
},
"Implementations are not allowed in ambient contexts.": {
"code": 1037,
"category": 1 /* Error */
},
"'declare' modifier not allowed for code already in an ambient context.": {
"code": 1038,
"category": 1 /* Error */
},
"Initializers are not allowed in ambient contexts.": {
"code": 1039,
"category": 1 /* Error */
},
"Parameter property declarations can only be used in a non-ambient constructor declaration.": {
"code": 1040,
"category": 1 /* Error */
},
"Function implementation expected.": {
"code": 1041,
"category": 1 /* Error */
},
"Constructor implementation expected.": {
"code": 1042,
"category": 1 /* Error */
},
"Function overload name must be '{0}'.": {
"code": 1043,
"category": 1 /* Error */
},
"'{0}' modifier cannot appear on a module element.": {
"code": 1044,
"category": 1 /* Error */
},
"'declare' modifier cannot appear on an interface declaration.": {
"code": 1045,
"category": 1 /* Error */
},
"'declare' modifier required for top level element.": {
"code": 1046,
"category": 1 /* Error */
},
"Rest parameter cannot be optional.": {
"code": 1047,
"category": 1 /* Error */
},
"Rest parameter cannot have an initializer.": {
"code": 1048,
"category": 1 /* Error */
},
"'set' accessor must have one and only one parameter.": {
"code": 1049,
"category": 1 /* Error */
},
"'set' accessor parameter cannot be optional.": {
"code": 1051,
"category": 1 /* Error */
},
"'set' accessor parameter cannot have an initializer.": {
"code": 1052,
"category": 1 /* Error */
},
"'set' accessor cannot have rest parameter.": {
"code": 1053,
"category": 1 /* Error */
},
"'get' accessor cannot have parameters.": {
"code": 1054,
"category": 1 /* Error */
},
"Modifiers cannot appear here.": {
"code": 1055,
"category": 1 /* Error */
},
"Accessors are only available when targeting ECMAScript 5 and higher.": {
"code": 1056,
"category": 1 /* Error */
},
"Class name cannot be '{0}'.": {
"code": 1057,
"category": 1 /* Error */
},
"Interface name cannot be '{0}'.": {
"code": 1058,
"category": 1 /* Error */
},
"Enum name cannot be '{0}'.": {
"code": 1059,
"category": 1 /* Error */
},
"Module name cannot be '{0}'.": {
"code": 1060,
"category": 1 /* Error */
},
"Enum member must have initializer.": {
"code": 1061,
"category": 1 /* Error */
},
"Export assignment cannot be used in internal modules.": {
"code": 1063,
"category": 1 /* Error */
},
"Export assignment not allowed in module with exported element.": {
"code": 1064,
"category": 1 /* Error */
},
"Module cannot have multiple export assignments.": {
"code": 1065,
"category": 1 /* Error */
},
"Ambient enum elements can only have integer literal initializers.": {
"code": 1066,
"category": 1 /* Error */
},
"module, class, interface, enum, import or statement": {
"code": 1067,
"category": 3 /* NoPrefix */
},
"constructor, function, accessor or variable": {
"code": 1068,
"category": 3 /* NoPrefix */
},
"statement": {
"code": 1069,
"category": 3 /* NoPrefix */
},
"case or default clause": {
"code": 1070,
"category": 3 /* NoPrefix */
},
"identifier": {
"code": 1071,
"category": 3 /* NoPrefix */
},
"call, construct, index, property or function signature": {
"code": 1072,
"category": 3 /* NoPrefix */
},
"expression": {
"code": 1073,
"category": 3 /* NoPrefix */
},
"type name": {
"code": 1074,
"category": 3 /* NoPrefix */
},
"property or accessor": {
"code": 1075,
"category": 3 /* NoPrefix */
},
"parameter": {
"code": 1076,
"category": 3 /* NoPrefix */
},
"type": {
"code": 1077,
"category": 3 /* NoPrefix */
},
"type parameter": {
"code": 1078,
"category": 3 /* NoPrefix */
},
"'declare' modifier not allowed on import declaration.": {
"code": 1079,
"category": 1 /* Error */
},
"Function overload must be static.": {
"code": 1080,
"category": 1 /* Error */
},
"Function overload must not be static.": {
"code": 1081,
"category": 1 /* Error */
},
"Parameter property declarations cannot be used in a constructor overload.": {
"code": 1083,
"category": 1 /* Error */
},
"Invalid 'reference' directive syntax.": {
"code": 1084,
"category": 1 /* Error */
},
"Octal literals are not available when targeting ECMAScript 5 and higher.": {
"code": 1085,
"category": 1 /* Error */
},
"Accessors are not allowed in ambient contexts.": {
"code": 1086,
"category": 1 /* Error */
},
"'{0}' modifier cannot appear on a constructor declaration.": {
"code": 1089,
"category": 1 /* Error */
},
"'{0}' modifier cannot appear on a parameter.": {
"code": 1090,
"category": 1 /* Error */
},
"Only a single variable declaration is allowed in a 'for...in' statement.": {
"code": 1091,
"category": 1 /* Error */
},
"Type parameters cannot appear on a constructor declaration.": {
"code": 1091,
"category": 1 /* Error */
},
"Type annotation cannot appear on a constructor declaration.": {
"code": 1092,
"category": 1 /* Error */
},
"Duplicate identifier '{0}'.": {
"code": 2000,
"category": 1 /* Error */
},
"The name '{0}' does not exist in the current scope.": {
"code": 2001,
"category": 1 /* Error */
},
"The name '{0}' does not refer to a value.": {
"code": 2002,
"category": 1 /* Error */
},
"'super' can only be used inside a class instance method.": {
"code": 2003,
"category": 1 /* Error */
},
"The left-hand side of an assignment expression must be a variable, property or indexer.": {
"code": 2004,
"category": 1 /* Error */
},
"Value of type '{0}' is not callable. Did you mean to include 'new'?": {
"code": 2161,
"category": 1 /* Error */
},
"Value of type '{0}' is not callable.": {
"code": 2006,
"category": 1 /* Error */
},
"Value of type '{0}' is not newable.": {
"code": 2007,
"category": 1 /* Error */
},
"Value of type '{0}' is not indexable by type '{1}'.": {
"code": 2008,
"category": 1 /* Error */
},
"Operator '{0}' cannot be applied to types '{1}' and '{2}'.": {
"code": 2009,
"category": 1 /* Error */
},
"Operator '{0}' cannot be applied to types '{1}' and '{2}': {3}": {
"code": 2010,
"category": 1 /* Error */
},
"Cannot convert '{0}' to '{1}'.": {
"code": 2011,
"category": 1 /* Error */
},
"Cannot convert '{0}' to '{1}':{NL}{2}": {
"code": 2012,
"category": 1 /* Error */
},
"Expected var, class, interface, or module.": {
"code": 2013,
"category": 1 /* Error */
},
"Operator '{0}' cannot be applied to type '{1}'.": {
"code": 2014,
"category": 1 /* Error */
},
"Getter '{0}' already declared.": {
"code": 2015,
"category": 1 /* Error */
},
"Setter '{0}' already declared.": {
"code": 2016,
"category": 1 /* Error */
},
"Exported class '{0}' extends private class '{1}'.": {
"code": 2018,
"category": 1 /* Error */
},
"Exported class '{0}' implements private interface '{1}'.": {
"code": 2019,
"category": 1 /* Error */
},
"Exported interface '{0}' extends private interface '{1}'.": {
"code": 2020,
"category": 1 /* Error */
},
"Exported class '{0}' extends class from inaccessible module {1}.": {
"code": 2021,
"category": 1 /* Error */
},
"Exported class '{0}' implements interface from inaccessible module {1}.": {
"code": 2022,
"category": 1 /* Error */
},
"Exported interface '{0}' extends interface from inaccessible module {1}.": {
"code": 2023,
"category": 1 /* Error */
},
"Public static property '{0}' of exported class has or is using private type '{1}'.": {
"code": 2024,
"category": 1 /* Error */
},
"Public property '{0}' of exported class has or is using private type '{1}'.": {
"code": 2025,
"category": 1 /* Error */
},
"Property '{0}' of exported interface has or is using private type '{1}'.": {
"code": 2026,
"category": 1 /* Error */
},
"Exported variable '{0}' has or is using private type '{1}'.": {
"code": 2027,
"category": 1 /* Error */
},
"Public static property '{0}' of exported class is using inaccessible module {1}.": {
"code": 2028,
"category": 1 /* Error */
},
"Public property '{0}' of exported class is using inaccessible module {1}.": {
"code": 2029,
"category": 1 /* Error */
},
"Property '{0}' of exported interface is using inaccessible module {1}.": {
"code": 2030,
"category": 1 /* Error */
},
"Exported variable '{0}' is using inaccessible module {1}.": {
"code": 2031,
"category": 1 /* Error */
},
"Parameter '{0}' of constructor from exported class has or is using private type '{1}'.": {
"code": 2032,
"category": 1 /* Error */
},
"Parameter '{0}' of public static property setter from exported class has or is using private type '{1}'.": {
"code": 2033,
"category": 1 /* Error */
},
"Parameter '{0}' of public property setter from exported class has or is using private type '{1}'.": {
"code": 2034,
"category": 1 /* Error */
},
"Parameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.": {
"code": 2035,
"category": 1 /* Error */
},
"Parameter '{0}' of call signature from exported interface has or is using private type '{1}'.": {
"code": 2036,
"category": 1 /* Error */
},
"Parameter '{0}' of public static method from exported class has or is using private type '{1}'.": {
"code": 2037,
"category": 1 /* Error */
},
"Parameter '{0}' of public method from exported class has or is using private type '{1}'.": {
"code": 2038,
"category": 1 /* Error */
},
"Parameter '{0}' of method from exported interface has or is using private type '{1}'.": {
"code": 2039,
"category": 1 /* Error */
},
"Parameter '{0}' of exported function has or is using private type '{1}'.": {
"code": 2040,
"category": 1 /* Error */
},
"Parameter '{0}' of constructor from exported class is using inaccessible module {1}.": {
"code": 2041,
"category": 1 /* Error */
},
"Parameter '{0}' of public static property setter from exported class is using inaccessible module {1}.": {
"code": 2042,
"category": 1 /* Error */
},
"Parameter '{0}' of public property setter from exported class is using inaccessible module {1}.": {
"code": 2043,
"category": 1 /* Error */
},
"Parameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.": {
"code": 2044,
"category": 1 /* Error */
},
"Parameter '{0}' of call signature from exported interface is using inaccessible module {1}": {
"code": 2045,
"category": 1 /* Error */
},
"Parameter '{0}' of public static method from exported class is using inaccessible module {1}.": {
"code": 2046,
"category": 1 /* Error */
},
"Parameter '{0}' of public method from exported class is using inaccessible module {1}.": {
"code": 2047,
"category": 1 /* Error */
},
"Parameter '{0}' of method from exported interface is using inaccessible module {1}.": {
"code": 2048,
"category": 1 /* Error */
},
"Parameter '{0}' of exported function is using inaccessible module {1}.": {
"code": 2049,
"category": 1 /* Error */
},
"Return type of public static property getter from exported class has or is using private type '{0}'.": {
"code": 2050,
"category": 1 /* Error */
},
"Return type of public property getter from exported class has or is using private type '{0}'.": {
"code": 2051,
"category": 1 /* Error */
},
"Return type of constructor signature from exported interface has or is using private type '{0}'.": {
"code": 2052,
"category": 1 /* Error */
},
"Return type of call signature from exported interface has or is using private type '{0}'.": {
"code": 2053,
"category": 1 /* Error */
},
"Return type of index signature from exported interface has or is using private type '{0}'.": {
"code": 2054,
"category": 1 /* Error */
},
"Return type of public static method from exported class has or is using private type '{0}'.": {
"code": 2055,
"category": 1 /* Error */
},
"Return type of public method from exported class has or is using private type '{0}'.": {
"code": 2056,
"category": 1 /* Error */
},
"Return type of method from exported interface has or is using private type '{0}'.": {
"code": 2057,
"category": 1 /* Error */
},
"Return type of exported function has or is using private type '{0}'.": {
"code": 2058,
"category": 1 /* Error */
},
"Return type of public static property getter from exported class is using inaccessible module {0}.": {
"code": 2059,
"category": 1 /* Error */
},
"Return type of public property getter from exported class is using inaccessible module {0}.": {
"code": 2060,
"category": 1 /* Error */
},
"Return type of constructor signature from exported interface is using inaccessible module {0}.": {
"code": 2061,
"category": 1 /* Error */
},
"Return type of call signature from exported interface is using inaccessible module {0}.": {
"code": 2062,
"category": 1 /* Error */
},
"Return type of index signature from exported interface is using inaccessible module {0}.": {
"code": 2063,
"category": 1 /* Error */
},
"Return type of public static method from exported class is using inaccessible module {0}.": {
"code": 2064,
"category": 1 /* Error */
},
"Return type of public method from exported class is using inaccessible module {0}.": {
"code": 2065,
"category": 1 /* Error */
},
"Return type of method from exported interface is using inaccessible module {0}.": {
"code": 2066,
"category": 1 /* Error */
},
"Return type of exported function is using inaccessible module {0}.": {
"code": 2067,
"category": 1 /* Error */
},
"'new T[]' cannot be used to create an array. Use 'new Array<T>()' instead.": {
"code": 2068,
"category": 1 /* Error */
},
"A parameter list must follow a generic type argument list. '(' expected.": {
"code": 2069,
"category": 1 /* Error */
},
"Multiple constructor implementations are not allowed.": {
"code": 2070,
"category": 1 /* Error */
},
"Unable to resolve external module '{0}'.": {
"code": 2071,
"category": 1 /* Error */
},
"Module cannot be aliased to a non-module type.": {
"code": 2072,
"category": 1 /* Error */
},
"A class may only extend another class.": {
"code": 2073,
"category": 1 /* Error */
},
"A class may only implement another class or interface.": {
"code": 2074,
"category": 1 /* Error */
},
"An interface may only extend another class or interface.": {
"code": 2075,
"category": 1 /* Error */
},
"Unable to resolve type.": {
"code": 2077,
"category": 1 /* Error */
},
"Unable to resolve type of '{0}'.": {
"code": 2078,
"category": 1 /* Error */
},
"Unable to resolve type parameter constraint.": {
"code": 2079,
"category": 1 /* Error */
},
"Type parameter constraint cannot be a primitive type.": {
"code": 2080,
"category": 1 /* Error */
},
"Supplied parameters do not match any signature of call target.": {
"code": 2081,
"category": 1 /* Error */
},
"Supplied parameters do not match any signature of call target:{NL}{0}": {
"code": 2082,
"category": 1 /* Error */
},
"Invalid 'new' expression.": {
"code": 2083,
"category": 1 /* Error */
},
"Call signatures used in a 'new' expression must have a 'void' return type.": {
"code": 2084,
"category": 1 /* Error */
},
"Could not select overload for 'new' expression.": {
"code": 2085,
"category": 1 /* Error */
},
"Type '{0}' does not satisfy the constraint '{1}' for type parameter '{2}'.": {
"code": 2086,
"category": 1 /* Error */
},
"Could not select overload for 'call' expression.": {
"code": 2087,
"category": 1 /* Error */
},
"Cannot invoke an expression whose type lacks a call signature.": {
"code": 2088,
"category": 1 /* Error */
},
"Calls to 'super' are only valid inside a class.": {
"code": 2089,
"category": 1 /* Error */
},
"Generic type '{0}' requires {1} type argument(s).": {
"code": 2090,
"category": 1 /* Error */
},
"Type of array literal cannot be determined. Best common type could not be found for array elements.": {
"code": 2092,
"category": 1 /* Error */
},
"Could not find enclosing symbol for dotted name '{0}'.": {
"code": 2093,
"category": 1 /* Error */
},
"The property '{0}' does not exist on value of type '{1}'.": {
"code": 2094,
"category": 1 /* Error */
},
"Could not find symbol '{0}'.": {
"code": 2095,
"category": 1 /* Error */
},
"'get' and 'set' accessor must have the same type.": {
"code": 2096,
"category": 1 /* Error */
},
"'this' cannot be referenced in current location.": {
"code": 2097,
"category": 1 /* Error */
},
"Static members cannot reference class type parameters.": {
"code": 2099,
"category": 1 /* Error */
},
"Class '{0}' is recursively referenced as a base type of itself.": {
"code": 2100,
"category": 1 /* Error */
},
"Interface '{0}' is recursively referenced as a base type of itself.": {
"code": 2101,
"category": 1 /* Error */
},
"'super' property access is permitted only in a constructor, member function, or member accessor of a derived class.": {
"code": 2102,
"category": 1 /* Error */
},
"'super' cannot be referenced in non-derived classes.": {
"code": 2103,
"category": 1 /* Error */
},
"A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties.": {
"code": 2104,
"category": 1 /* Error */
},
"Constructors for derived classes must contain a 'super' call.": {
"code": 2105,
"category": 1 /* Error */
},
"Super calls are not permitted outside constructors or in nested functions inside constructors.": {
"code": 2106,
"category": 1 /* Error */
},
"'{0}.{1}' is inaccessible.": {
"code": 2107,
"category": 1 /* Error */
},
"'this' cannot be referenced within module bodies.": {
"code": 2108,
"category": 1 /* Error */
},
"Invalid '+' expression - types not known to support the addition operator.": {
"code": 2111,
"category": 1 /* Error */
},
"The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.": {
"code": 2112,
"category": 1 /* Error */
},
"The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.": {
"code": 2113,
"category": 1 /* Error */
},
"The type of a unary arithmetic operation operand must be of type 'any', 'number' or an enum type.": {
"code": 2114,
"category": 1 /* Error */
},
"Variable declarations of a 'for' statement cannot use a type annotation.": {
"code": 2115,
"category": 1 /* Error */
},
"Variable declarations of a 'for' statement must be of types 'string' or 'any'.": {
"code": 2116,
"category": 1 /* Error */
},
"The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter.": {
"code": 2117,
"category": 1 /* Error */
},
"The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'.": {
"code": 2118,
"category": 1 /* Error */
},
"The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter.": {
"code": 2119,
"category": 1 /* Error */
},
"The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter.": {
"code": 2120,
"category": 1 /* Error */
},
"The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type.": {
"code": 2121,
"category": 1 /* Error */
},
"Setters cannot return a value.": {
"code": 2122,
"category": 1 /* Error */
},
"Tried to query type of uninitialized module '{0}'.": {
"code": 2123,
"category": 1 /* Error */
},
"Tried to set variable type to uninitialized module type '{0}'.": {
"code": 2124,
"category": 1 /* Error */
},
"Type '{0}' does not have type parameters.": {
"code": 2125,
"category": 1 /* Error */
},
"Getters must return a value.": {
"code": 2126,
"category": 1 /* Error */
},
"Getter and setter accessors do not agree in visibility.": {
"code": 2127,
"category": 1 /* Error */
},
"Invalid left-hand side of assignment expression.": {
"code": 2130,
"category": 1 /* Error */
},
"Function declared a non-void return type, but has no return expression.": {
"code": 2131,
"category": 1 /* Error */
},
"Cannot resolve return type reference.": {
"code": 2132,
"category": 1 /* Error */
},
"Constructors cannot have a return type of 'void'.": {
"code": 2133,
"category": 1 /* Error */
},
"Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'.": {
"code": 2134,
"category": 1 /* Error */
},
"All symbols within a with block will be resolved to 'any'.": {
"code": 2135,
"category": 1 /* Error */
},
"Import declarations in an internal module cannot reference an external module.": {
"code": 2136,
"category": 1 /* Error */
},
"Class {0} declares interface {1} but does not implement it:{NL}{2}": {
"code": 2137,
"category": 1 /* Error */
},
"Class {0} declares class {1} as an interface but does not implement it:{NL}{2}": {
"code": 2138,
"category": 1 /* Error */
},
"The operand of an increment or decrement operator must be a variable, property or indexer.": {
"code": 2139,
"category": 1 /* Error */
},
"'this' cannot be referenced in static initializers in a class body.": {
"code": 2140,
"category": 1 /* Error */
},
"Class '{0}' cannot extend class '{1}':{NL}{2}": {
"code": 2141,
"category": 1 /* Error */
},
"Interface '{0}' cannot extend class '{1}':{NL}{2}": {
"code": 2142,
"category": 1 /* Error */
},
"Interface '{0}' cannot extend interface '{1}':{NL}{2}": {
"code": 2143,
"category": 1 /* Error */
},
"Duplicate overload signature for '{0}'.": {
"code": 2144,
"category": 1 /* Error */
},
"Duplicate constructor overload signature.": {
"code": 2145,
"category": 1 /* Error */
},
"Duplicate overload call signature.": {
"code": 2146,
"category": 1 /* Error */
},
"Duplicate overload construct signature.": {
"code": 2147,
"category": 1 /* Error */
},
"Overload signature is not compatible with function definition.": {
"code": 2148,
"category": 1 /* Error */
},
"Overload signature is not compatible with function definition:{NL}{0}": {
"code": 2149,
"category": 1 /* Error */
},
"Overload signatures must all be public or private.": {
"code": 2150,
"category": 1 /* Error */
},
"Overload signatures must all be exported or not exported.": {
"code": 2151,
"category": 1 /* Error */
},
"Overload signatures must all be ambient or non-ambient.": {
"code": 2152,
"category": 1 /* Error */
},
"Overload signatures must all be optional or required.": {
"code": 2153,
"category": 1 /* Error */
},
"Specialized overload signature is not assignable to any non-specialized signature.": {
"code": 2154,
"category": 1 /* Error */
},
"'this' cannot be referenced in constructor arguments.": {
"code": 2155,
"category": 1 /* Error */
},
"Instance member cannot be accessed off a class.": {
"code": 2157,
"category": 1 /* Error */
},
"Untyped function calls may not accept type arguments.": {
"code": 2158,
"category": 1 /* Error */
},
"Non-generic functions may not accept type arguments.": {
"code": 2159,
"category": 1 /* Error */
},
"A generic type may not reference itself with a wrapped form of its own type parameters.": {
"code": 2160,
"category": 1 /* Error */
},
"Rest parameters must be array types.": {
"code": 2162,
"category": 1 /* Error */
},
"Overload signature implementation cannot use specialized type.": {
"code": 2163,
"category": 1 /* Error */
},
"Export assignments may only be used at the top-level of external modules.": {
"code": 2164,
"category": 1 /* Error */
},
"Export assignments may only be made with variables, functions, classes, interfaces, enums and internal modules.": {
"code": 2165,
"category": 1 /* Error */
},
"Only public methods of the base class are accessible via the 'super' keyword.": {
"code": 2166,
"category": 1 /* Error */
},
"Numeric indexer type '{0}' must be assignable to string indexer type '{1}'.": {
"code": 2167,
"category": 1 /* Error */
},
"Numeric indexer type '{0}' must be assignable to string indexer type '{1}':{NL}{2}": {
"code": 2168,
"category": 1 /* Error */
},
"All numerically named properties must be assignable to numeric indexer type '{0}'.": {
"code": 2169,
"category": 1 /* Error */
},
"All numerically named properties must be assignable to numeric indexer type '{0}':{NL}{1}": {
"code": 2170,
"category": 1 /* Error */
},
"All named properties must be assignable to string indexer type '{0}'.": {
"code": 2171,
"category": 1 /* Error */
},
"All named properties must be assignable to string indexer type '{0}':{NL}{1}": {
"code": 2172,
"category": 1 /* Error */
},
"Generic type references must include all type arguments.": {
"code": 2173,
"category": 1 /* Error */
},
"Default arguments are only allowed in implementation.": {
"code": 2174,
"category": 1 /* Error */
},
"Overloads cannot differ only by return type.": {
"code": 2175,
"category": 1 /* Error */
},
"Function expression declared a non-void return type, but has no return expression.": {
"code": 2176,
"category": 1 /* Error */
},
"Import declaration referencing identifier from internal module can only be made with variables, functions, classes, interfaces, enums and internal modules.": {
"code": 2177,
"category": 1 /* Error */
},
"Could not find symbol '{0}' in module '{1}'.": {
"code": 2178,
"category": 1 /* Error */
},
"Unable to resolve module reference '{0}'.": {
"code": 2179,
"category": 1 /* Error */
},
"Could not find module '{0}' in module '{1}'.": {
"code": 2180,
"category": 1 /* Error */
},
"Exported import declaration '{0}' is assigned value with type that has or is using private type '{1}'.": {
"code": 2181,
"category": 1 /* Error */
},
"Exported import declaration '{0}' is assigned value with type that is using inaccessible module '{1}'.": {
"code": 2182,
"category": 1 /* Error */
},
"Exported import declaration '{0}' is assigned type that has or is using private type '{1}'.": {
"code": 2183,
"category": 1 /* Error */
},
"Exported import declaration '{0}' is assigned type that is using inaccessible module '{1}'.": {
"code": 2184,
"category": 1 /* Error */
},
"Exported import declaration '{0}' is assigned container that is or is using inaccessible module '{1}'.": {
"code": 2185,
"category": 1 /* Error */
},
"Type name '{0}' in extends clause does not reference constructor function for '{1}'.": {
"code": 2186,
"category": 1 /* Error */
},
"Internal module reference '{0}' in import declaration does not reference module instance for '{1}'.": {
"code": 2187,
"category": 1 /* Error */
},
"Module '{0}' cannot merge with previous declaration of '{1}' in a different file '{2}'.": {
"code": 2188,
"category": 1 /* Error */
},
"Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':{NL}{3}": {
"code": 2189,
"category": 1 /* Error */
},
"Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it.": {
"code": 2190,
"category": 1 /* Error */
},
"Ambient external module declaration cannot be reopened.": {
"code": 2191,
"category": 1 /* Error */
},
"All declarations of merged declaration '{0}' must be exported or not exported.": {
"code": 2192,
"category": 1 /* Error */
},
"'super' cannot be referenced in constructor arguments.": {
"code": 2193,
"category": 1 /* Error */
},
"Return type of constructor signature must be assignable to the instance type of the class.": {
"code": 2194,
"category": 1 /* Error */
},
"Ambient external module declaration must be defined in global context.": {
"code": 2195,
"category": 1 /* Error */
},
"Ambient external module declaration cannot specify relative module name.": {
"code": 2196,
"category": 1 /* Error */
},
"Import declaration in an ambient external module declaration cannot reference external module through relative external module name.": {
"code": 2197,
"category": 1 /* Error */
},
"Could not find the best common type of types of all return statement expressions.": {
"code": 2198,
"category": 1 /* Error */
},
"Import declaration cannot refer to external module reference when --noResolve option is set.": {
"code": 2199,
"category": 1 /* Error */
},
"Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference.": {
"code": 2200,
"category": 1 /* Error */
},
"'continue' statement can only be used within an enclosing iteration statement.": {
"code": 2201,
"category": 1 /* Error */
},
"'break' statement can only be used within an enclosing iteration or switch statement.": {
"code": 2202,
"category": 1 /* Error */
},
"Jump target not found.": {
"code": 2203,
"category": 1 /* Error */
},
"Jump target cannot cross function boundary.": {
"code": 2204,
"category": 1 /* Error */
},
"Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference.": {
"code": 2205,
"category": 1 /* Error */
},
"Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference.": {
"code": 2206,
"category": 1 /* Error */
},
"Expression resolves to '_super' that compiler uses to capture base class reference.": {
"code": 2207,
"category": 1 /* Error */
},
"TypeParameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.": {
"code": 2208,
"category": 1 /* Error */
},
"TypeParameter '{0}' of call signature from exported interface has or is using private type '{1}'.": {
"code": 2209,
"category": 1 /* Error */
},
"TypeParameter '{0}' of public static method from exported class has or is using private type '{1}'.": {
"code": 2210,
"category": 1 /* Error */
},
"TypeParameter '{0}' of public method from exported class has or is using private type '{1}'.": {
"code": 2211,
"category": 1 /* Error */
},
"TypeParameter '{0}' of method from exported interface has or is using private type '{1}'.": {
"code": 2212,
"category": 1 /* Error */
},
"TypeParameter '{0}' of exported function has or is using private type '{1}'.": {
"code": 2213,
"category": 1 /* Error */
},
"TypeParameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.": {
"code": 2214,
"category": 1 /* Error */
},
"TypeParameter '{0}' of call signature from exported interface is using inaccessible module {1}": {
"code": 2215,
"category": 1 /* Error */
},
"TypeParameter '{0}' of public static method from exported class is using inaccessible module {1}.": {
"code": 2216,
"category": 1 /* Error */
},
"TypeParameter '{0}' of public method from exported class is using inaccessible module {1}.": {
"code": 2217,
"category": 1 /* Error */
},
"TypeParameter '{0}' of method from exported interface is using inaccessible module {1}.": {
"code": 2218,
"category": 1 /* Error */
},
"TypeParameter '{0}' of exported function is using inaccessible module {1}.": {
"code": 2219,
"category": 1 /* Error */
},
"TypeParameter '{0}' of exported class has or is using private type '{1}'.": {
"code": 2220,
"category": 1 /* Error */
},
"TypeParameter '{0}' of exported interface has or is using private type '{1}'.": {
"code": 2221,
"category": 1 /* Error */
},
"TypeParameter '{0}' of exported class is using inaccessible module {1}.": {
"code": 2222,
"category": 1 /* Error */
},
"TypeParameter '{0}' of exported interface is using inaccessible module {1}.": {
"code": 2223,
"category": 1 /* Error */
},
"Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter.": {
"code": 2224,
"category": 1 /* Error */
},
"Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters.": {
"code": 2225,
"category": 1 /* Error */
},
"Type of conditional '{0}' must be identical to '{1}' or '{2}'.": {
"code": 2226,
"category": 1 /* Error */
},
"Type of conditional '{0}' must be identical to '{1}', '{2}' or '{3}'.": {
"code": 2227,
"category": 1 /* Error */
},
"Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of an external module.": {
"code": 2228,
"category": 1 /* Error */
},
"Constraint of a type parameter cannot reference any type parameter from the same type parameter list.": {
"code": 2229,
"category": 1 /* Error */
},
"Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor.": {
"code": 2230,
"category": 1 /* Error */
},
"Parameter '{0}' cannot be referenced in its initializer.": {
"code": 2231,
"category": 1 /* Error */
},
"Duplicate string index signature.": {
"code": 2232,
"category": 1 /* Error */
},
"Duplicate number index signature.": {
"code": 2233,
"category": 1 /* Error */
},
"All declarations of an interface must have identical type parameters.": {
"code": 2234,
"category": 1 /* Error */
},
"Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter.": {
"code": 2235,
"category": 1 /* Error */
},
"Type '{0}' is missing property '{1}' from type '{2}'.": {
"code": 4000,
"category": 3 /* NoPrefix */
},
"Types of property '{0}' of types '{1}' and '{2}' are incompatible.": {
"code": 4001,
"category": 3 /* NoPrefix */
},
"Types of property '{0}' of types '{1}' and '{2}' are incompatible:{NL}{3}": {
"code": 4002,
"category": 3 /* NoPrefix */
},
"Property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.": {
"code": 4003,
"category": 3 /* NoPrefix */
},
"Property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.": {
"code": 4004,
"category": 3 /* NoPrefix */
},
"Types '{0}' and '{1}' define property '{2}' as private.": {
"code": 4005,
"category": 3 /* NoPrefix */
},
"Call signatures of types '{0}' and '{1}' are incompatible.": {
"code": 4006,
"category": 3 /* NoPrefix */
},
"Call signatures of types '{0}' and '{1}' are incompatible:{NL}{2}": {
"code": 4007,
"category": 3 /* NoPrefix */
},
"Type '{0}' requires a call signature, but type '{1}' lacks one.": {
"code": 4008,
"category": 3 /* NoPrefix */
},
"Construct signatures of types '{0}' and '{1}' are incompatible.": {
"code": 4009,
"category": 3 /* NoPrefix */
},
"Construct signatures of types '{0}' and '{1}' are incompatible:{NL}{2}": {
"code": 4010,
"category": 3 /* NoPrefix */
},
"Type '{0}' requires a construct signature, but type '{1}' lacks one.": {
"code": 4011,
"category": 3 /* NoPrefix */
},
"Index signatures of types '{0}' and '{1}' are incompatible.": {
"code": 4012,
"category": 3 /* NoPrefix */
},
"Index signatures of types '{0}' and '{1}' are incompatible:{NL}{2}": {
"code": 4013,
"category": 3 /* NoPrefix */
},
"Call signature expects {0} or fewer parameters.": {
"code": 4014,
"category": 3 /* NoPrefix */
},
"Could not apply type '{0}' to argument {1} which is of type '{2}'.": {
"code": 4015,
"category": 3 /* NoPrefix */
},
"Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function.": {
"code": 4016,
"category": 3 /* NoPrefix */
},
"Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function.": {
"code": 4017,
"category": 3 /* NoPrefix */
},
"Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor.": {
"code": 4018,
"category": 3 /* NoPrefix */
},
"Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property.": {
"code": 4019,
"category": 3 /* NoPrefix */
},
"Types of static property '{0}' of class '{1}' and class '{2}' are incompatible.": {
"code": 4020,
"category": 3 /* NoPrefix */
},
"Types of static property '{0}' of class '{1}' and class '{2}' are incompatible:{NL}{3}": {
"code": 4021,
"category": 3 /* NoPrefix */
},
"Type reference cannot refer to container '{0}'.": {
"code": 4022,
"category": 1 /* Error */
},
"Type reference must refer to type.": {
"code": 4023,
"category": 1 /* Error */
},
"In enums with multiple declarations only one declaration can omit an initializer for the first enum element.": {
"code": 4024,
"category": 1 /* Error */
},
" (+ {0} overload(s))": {
"code": 4025,
"category": 2 /* Message */
},
"Variable declaration cannot have the same name as an import declaration.": {
"code": 4026,
"category": 1 /* Error */
},
"Signature expected {0} type arguments, got {1} instead.": {
"code": 4027,
"category": 1 /* Error */
},
"Property '{0}' defined as optional in type '{1}', but is required in type '{2}'.": {
"code": 4028,
"category": 3 /* NoPrefix */
},
"Types '{0}' and '{1}' originating in infinitely expanding type reference do not refer to same named type.": {
"code": 4029,
"category": 3 /* NoPrefix */
},
"Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments.": {
"code": 4030,
"category": 3 /* NoPrefix */
},
"Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments:{NL}{2}": {
"code": 4031,
"category": 3 /* NoPrefix */
},
"Named properties '{0}' of types '{1}' and '{2}' are not identical.": {
"code": 4032,
"category": 3 /* NoPrefix */
},
"Types of string indexer of types '{0}' and '{1}' are not identical.": {
"code": 4033,
"category": 3 /* NoPrefix */
},
"Types of number indexer of types '{0}' and '{1}' are not identical.": {
"code": 4034,
"category": 3 /* NoPrefix */
},
"Type of number indexer in type '{0}' is not assignable to string indexer type in type '{1}'.{NL}{2}": {
"code": 4035,
"category": 3 /* NoPrefix */
},
"Type of property '{0}' in type '{1}' is not assignable to string indexer type in type '{2}'.{NL}{3}": {
"code": 4036,
"category": 3 /* NoPrefix */
},
"Type of property '{0}' in type '{1}' is not assignable to number indexer type in type '{2}'.{NL}{3}": {
"code": 4037,
"category": 3 /* NoPrefix */
},
"Static property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.": {
"code": 4038,
"category": 3 /* NoPrefix */
},
"Static property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.": {
"code": 4039,
"category": 3 /* NoPrefix */
},
"Types '{0}' and '{1}' define static property '{2}' as private.": {
"code": 4040,
"category": 3 /* NoPrefix */
},
"Current host does not support '{0}' option.": {
"code": 5001,
"category": 1 /* Error */
},
"ECMAScript target version '{0}' not supported. Specify a valid target version: '{1}' (default), or '{2}'": {
"code": 5002,
"category": 1 /* Error */
},
"Module code generation '{0}' not supported.": {
"code": 5003,
"category": 1 /* Error */
},
"Could not find file: '{0}'.": {
"code": 5004,
"category": 1 /* Error */
},
"A file cannot have a reference to itself.": {
"code": 5006,
"category": 1 /* Error */
},
"Cannot resolve referenced file: '{0}'.": {
"code": 5007,
"category": 1 /* Error */
},
"Cannot find the common subdirectory path for the input files.": {
"code": 5009,
"category": 1 /* Error */
},
"Emit Error: {0}.": {
"code": 5011,
"category": 1 /* Error */
},
"Cannot read file '{0}': {1}": {
"code": 5012,
"category": 1 /* Error */
},
"Unsupported file encoding.": {
"code": 5013,
"category": 3 /* NoPrefix */
},
"Locale must be of the form <language> or <language>-<territory>. For example '{0}' or '{1}'.": {
"code": 5014,
"category": 1 /* Error */
},
"Unsupported locale: '{0}'.": {
"code": 5015,
"category": 1 /* Error */
},
"Execution Failed.{NL}": {
"code": 5016,
"category": 1 /* Error */
},
"Invalid call to 'up'": {
"code": 5019,
"category": 1 /* Error */
},
"Invalid call to 'down'": {
"code": 5020,
"category": 1 /* Error */
},
"Base64 value '{0}' finished with a continuation bit.": {
"code": 5021,
"category": 1 /* Error */
},
"Unknown option '{0}'": {
"code": 5023,
"category": 1 /* Error */
},
"Expected {0} arguments to message, got {1} instead.": {
"code": 5024,
"category": 1 /* Error */
},
"Expected the message '{0}' to have {1} arguments, but it had {2}": {
"code": 5025,
"category": 1 /* Error */
},
"Could not delete file '{0}'": {
"code": 5034,
"category": 1 /* Error */
},
"Could not create directory '{0}'": {
"code": 5035,
"category": 1 /* Error */
},
"Error while executing file '{0}': ": {
"code": 5036,
"category": 1 /* Error */
},
"Cannot compile external modules unless the '--module' flag is provided.": {
"code": 5037,
"category": 1 /* Error */
},
"Option mapRoot cannot be specified without specifying sourcemap option.": {
"code": 5038,
"category": 1 /* Error */
},
"Option sourceRoot cannot be specified without specifying sourcemap option.": {
"code": 5039,
"category": 1 /* Error */
},
"Options mapRoot and sourceRoot cannot be specified without specifying sourcemap option.": {
"code": 5040,
"category": 1 /* Error */
},
"Option '{0}' specified without '{1}'": {
"code": 5041,
"category": 1 /* Error */
},
"'codepage' option not supported on current platform.": {
"code": 5042,
"category": 1 /* Error */
},
"Concatenate and emit output to single file.": {
"code": 6001,
"category": 2 /* Message */
},
"Generates corresponding {0} file.": {
"code": 6002,
"category": 2 /* Message */
},
"Specifies the location where debugger should locate map files instead of generated locations.": {
"code": 6003,
"category": 2 /* Message */
},
"Specifies the location where debugger should locate TypeScript files instead of source locations.": {
"code": 6004,
"category": 2 /* Message */
},
"Watch input files.": {
"code": 6005,
"category": 2 /* Message */
},
"Redirect output structure to the directory.": {
"code": 6006,
"category": 2 /* Message */
},
"Do not emit comments to output.": {
"code": 6009,
"category": 2 /* Message */
},
"Skip resolution and preprocessing.": {
"code": 6010,
"category": 2 /* Message */
},
"Specify ECMAScript target version: '{0}' (default), or '{1}'": {
"code": 6015,
"category": 2 /* Message */
},
"Specify module code generation: '{0}' or '{1}'": {
"code": 6016,
"category": 2 /* Message */
},
"Print this message.": {
"code": 6017,
"category": 2 /* Message */
},
"Print the compiler's version: {0}": {
"code": 6019,
"category": 2 /* Message */
},
"Allow use of deprecated '{0}' keyword when referencing an external module.": {
"code": 6021,
"category": 2 /* Message */
},
"Specify locale for errors and messages. For example '{0}' or '{1}'": {
"code": 6022,
"category": 2 /* Message */
},
"Syntax: {0}": {
"code": 6023,
"category": 2 /* Message */
},
"options": {
"code": 6024,
"category": 2 /* Message */
},
"file1": {
"code": 6025,
"category": 2 /* Message */
},
"Examples:": {
"code": 6026,
"category": 2 /* Message */
},
"Options:": {
"code": 6027,
"category": 2 /* Message */
},
"Insert command line options and files from a file.": {
"code": 6030,
"category": 2 /* Message */
},
"Version {0}": {
"code": 6029,
"category": 2 /* Message */
},
"Use the '{0}' flag to see options.": {
"code": 6031,
"category": 2 /* Message */
},
"{NL}Recompiling ({0}):": {
"code": 6032,
"category": 2 /* Message */
},
"STRING": {
"code": 6033,
"category": 2 /* Message */
},
"KIND": {
"code": 6034,
"category": 2 /* Message */
},
"file2": {
"code": 6035,
"category": 2 /* Message */
},
"VERSION": {
"code": 6036,
"category": 2 /* Message */
},
"LOCATION": {
"code": 6037,
"category": 2 /* Message */
},
"DIRECTORY": {
"code": 6038,
"category": 2 /* Message */
},
"NUMBER": {
"code": 6039,
"category": 2 /* Message */
},
"Specify the codepage to use when opening source files.": {
"code": 6040,
"category": 2 /* Message */
},
"Additional locations:": {
"code": 6041,
"category": 2 /* Message */
},
"This version of the Javascript runtime does not support the '{0}' function.": {
"code": 7000,
"category": 1 /* Error */
},
"Unknown rule.": {
"code": 7002,
"category": 1 /* Error */
},
"Invalid line number ({0})": {
"code": 7003,
"category": 1 /* Error */
},
"Warn on expressions and declarations with an implied 'any' type.": {
"code": 7004,
"category": 2 /* Message */
},
"Variable '{0}' implicitly has an 'any' type.": {
"code": 7005,
"category": 1 /* Error */
},
"Parameter '{0}' of '{1}' implicitly has an 'any' type.": {
"code": 7006,
"category": 1 /* Error */
},
"Parameter '{0}' of function type implicitly has an 'any' type.": {
"code": 7007,
"category": 1 /* Error */
},
"Member '{0}' of object type implicitly has an 'any' type.": {
"code": 7008,
"category": 1 /* Error */
},
"'new' expression, which lacks a constructor signature, implicitly has an 'any' type.": {
"code": 7009,
"category": 1 /* Error */
},
"'{0}', which lacks return-type annotation, implicitly has an 'any' return type.": {
"code": 7010,
"category": 1 /* Error */
},
"Function expression, which lacks return-type annotation, implicitly has an 'any' return type.": {
"code": 7011,
"category": 1 /* Error */
},
"Parameter '{0}' of lambda function implicitly has an 'any' type.": {
"code": 7012,
"category": 1 /* Error */
},
"Constructor signature, which lacks return-type annotation, implicitly has an 'any' return type.": {
"code": 7013,
"category": 1 /* Error */
},
"Lambda Function, which lacks return-type annotation, implicitly has an 'any' return type.": {
"code": 7014,
"category": 1 /* Error */
},
"Array Literal implicitly has an 'any' type from widening.": {
"code": 7015,
"category": 1 /* Error */
},
"'{0}', which lacks 'get' accessor and parameter type annotation on 'set' accessor, implicitly has an 'any' type.": {
"code": 7016,
"category": 1 /* Error */
},
"Index signature of object type implicitly has an 'any' type.": {
"code": 7017,
"category": 1 /* Error */
},
"Object literal's property '{0}' implicitly has an 'any' type from widening.": {
"code": 7018,
"category": 1 /* Error */
}
};
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (CharacterCodes) {
CharacterCodes[CharacterCodes["nullCharacter"] = 0] = "nullCharacter";
CharacterCodes[CharacterCodes["maxAsciiCharacter"] = 127] = "maxAsciiCharacter";
CharacterCodes[CharacterCodes["lineFeed"] = 10] = "lineFeed";
CharacterCodes[CharacterCodes["carriageReturn"] = 13] = "carriageReturn";
CharacterCodes[CharacterCodes["lineSeparator"] = 0x2028] = "lineSeparator";
CharacterCodes[CharacterCodes["paragraphSeparator"] = 0x2029] = "paragraphSeparator";
CharacterCodes[CharacterCodes["nextLine"] = 0x0085] = "nextLine";
CharacterCodes[CharacterCodes["space"] = 0x0020] = "space";
CharacterCodes[CharacterCodes["nonBreakingSpace"] = 0x00A0] = "nonBreakingSpace";
CharacterCodes[CharacterCodes["enQuad"] = 0x2000] = "enQuad";
CharacterCodes[CharacterCodes["emQuad"] = 0x2001] = "emQuad";
CharacterCodes[CharacterCodes["enSpace"] = 0x2002] = "enSpace";
CharacterCodes[CharacterCodes["emSpace"] = 0x2003] = "emSpace";
CharacterCodes[CharacterCodes["threePerEmSpace"] = 0x2004] = "threePerEmSpace";
CharacterCodes[CharacterCodes["fourPerEmSpace"] = 0x2005] = "fourPerEmSpace";
CharacterCodes[CharacterCodes["sixPerEmSpace"] = 0x2006] = "sixPerEmSpace";
CharacterCodes[CharacterCodes["figureSpace"] = 0x2007] = "figureSpace";
CharacterCodes[CharacterCodes["punctuationSpace"] = 0x2008] = "punctuationSpace";
CharacterCodes[CharacterCodes["thinSpace"] = 0x2009] = "thinSpace";
CharacterCodes[CharacterCodes["hairSpace"] = 0x200A] = "hairSpace";
CharacterCodes[CharacterCodes["zeroWidthSpace"] = 0x200B] = "zeroWidthSpace";
CharacterCodes[CharacterCodes["narrowNoBreakSpace"] = 0x202F] = "narrowNoBreakSpace";
CharacterCodes[CharacterCodes["ideographicSpace"] = 0x3000] = "ideographicSpace";
CharacterCodes[CharacterCodes["_"] = 95] = "_";
CharacterCodes[CharacterCodes["$"] = 36] = "$";
CharacterCodes[CharacterCodes["_0"] = 48] = "_0";
CharacterCodes[CharacterCodes["_7"] = 55] = "_7";
CharacterCodes[CharacterCodes["_9"] = 57] = "_9";
CharacterCodes[CharacterCodes["a"] = 97] = "a";
CharacterCodes[CharacterCodes["b"] = 98] = "b";
CharacterCodes[CharacterCodes["c"] = 99] = "c";
CharacterCodes[CharacterCodes["d"] = 100] = "d";
CharacterCodes[CharacterCodes["e"] = 101] = "e";
CharacterCodes[CharacterCodes["f"] = 102] = "f";
CharacterCodes[CharacterCodes["g"] = 103] = "g";
CharacterCodes[CharacterCodes["h"] = 104] = "h";
CharacterCodes[CharacterCodes["i"] = 105] = "i";
CharacterCodes[CharacterCodes["k"] = 107] = "k";
CharacterCodes[CharacterCodes["l"] = 108] = "l";
CharacterCodes[CharacterCodes["m"] = 109] = "m";
CharacterCodes[CharacterCodes["n"] = 110] = "n";
CharacterCodes[CharacterCodes["o"] = 111] = "o";
CharacterCodes[CharacterCodes["p"] = 112] = "p";
CharacterCodes[CharacterCodes["q"] = 113] = "q";
CharacterCodes[CharacterCodes["r"] = 114] = "r";
CharacterCodes[CharacterCodes["s"] = 115] = "s";
CharacterCodes[CharacterCodes["t"] = 116] = "t";
CharacterCodes[CharacterCodes["u"] = 117] = "u";
CharacterCodes[CharacterCodes["v"] = 118] = "v";
CharacterCodes[CharacterCodes["w"] = 119] = "w";
CharacterCodes[CharacterCodes["x"] = 120] = "x";
CharacterCodes[CharacterCodes["y"] = 121] = "y";
CharacterCodes[CharacterCodes["z"] = 122] = "z";
CharacterCodes[CharacterCodes["A"] = 65] = "A";
CharacterCodes[CharacterCodes["E"] = 69] = "E";
CharacterCodes[CharacterCodes["F"] = 70] = "F";
CharacterCodes[CharacterCodes["X"] = 88] = "X";
CharacterCodes[CharacterCodes["Z"] = 90] = "Z";
CharacterCodes[CharacterCodes["ampersand"] = 38] = "ampersand";
CharacterCodes[CharacterCodes["asterisk"] = 42] = "asterisk";
CharacterCodes[CharacterCodes["at"] = 64] = "at";
CharacterCodes[CharacterCodes["backslash"] = 92] = "backslash";
CharacterCodes[CharacterCodes["bar"] = 124] = "bar";
CharacterCodes[CharacterCodes["caret"] = 94] = "caret";
CharacterCodes[CharacterCodes["closeBrace"] = 125] = "closeBrace";
CharacterCodes[CharacterCodes["closeBracket"] = 93] = "closeBracket";
CharacterCodes[CharacterCodes["closeParen"] = 41] = "closeParen";
CharacterCodes[CharacterCodes["colon"] = 58] = "colon";
CharacterCodes[CharacterCodes["comma"] = 44] = "comma";
CharacterCodes[CharacterCodes["dot"] = 46] = "dot";
CharacterCodes[CharacterCodes["doubleQuote"] = 34] = "doubleQuote";
CharacterCodes[CharacterCodes["equals"] = 61] = "equals";
CharacterCodes[CharacterCodes["exclamation"] = 33] = "exclamation";
CharacterCodes[CharacterCodes["greaterThan"] = 62] = "greaterThan";
CharacterCodes[CharacterCodes["lessThan"] = 60] = "lessThan";
CharacterCodes[CharacterCodes["minus"] = 45] = "minus";
CharacterCodes[CharacterCodes["openBrace"] = 123] = "openBrace";
CharacterCodes[CharacterCodes["openBracket"] = 91] = "openBracket";
CharacterCodes[CharacterCodes["openParen"] = 40] = "openParen";
CharacterCodes[CharacterCodes["percent"] = 37] = "percent";
CharacterCodes[CharacterCodes["plus"] = 43] = "plus";
CharacterCodes[CharacterCodes["question"] = 63] = "question";
CharacterCodes[CharacterCodes["semicolon"] = 59] = "semicolon";
CharacterCodes[CharacterCodes["singleQuote"] = 39] = "singleQuote";
CharacterCodes[CharacterCodes["slash"] = 47] = "slash";
CharacterCodes[CharacterCodes["tilde"] = 126] = "tilde";
CharacterCodes[CharacterCodes["backspace"] = 8] = "backspace";
CharacterCodes[CharacterCodes["formFeed"] = 12] = "formFeed";
CharacterCodes[CharacterCodes["byteOrderMark"] = 0xFEFF] = "byteOrderMark";
CharacterCodes[CharacterCodes["tab"] = 9] = "tab";
CharacterCodes[CharacterCodes["verticalTab"] = 11] = "verticalTab";
})(TypeScript.CharacterCodes || (TypeScript.CharacterCodes = {}));
var CharacterCodes = TypeScript.CharacterCodes;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (ScriptSnapshot) {
var StringScriptSnapshot = (function () {
function StringScriptSnapshot(text) {
this.text = text;
this._lineStartPositions = null;
}
StringScriptSnapshot.prototype.getText = function (start, end) {
return this.text.substring(start, end);
};
StringScriptSnapshot.prototype.getLength = function () {
return this.text.length;
};
StringScriptSnapshot.prototype.getLineStartPositions = function () {
if (!this._lineStartPositions) {
this._lineStartPositions = TypeScript.TextUtilities.parseLineStarts(this.text);
}
return this._lineStartPositions;
};
StringScriptSnapshot.prototype.getTextChangeRangeSinceVersion = function (scriptVersion) {
throw TypeScript.Errors.notYetImplemented();
};
return StringScriptSnapshot;
})();
function fromString(text) {
return new StringScriptSnapshot(text);
}
ScriptSnapshot.fromString = fromString;
})(TypeScript.ScriptSnapshot || (TypeScript.ScriptSnapshot = {}));
var ScriptSnapshot = TypeScript.ScriptSnapshot;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (LineMap1) {
function fromSimpleText(text) {
return new TypeScript.LineMap(function () {
return TypeScript.TextUtilities.parseLineStarts({ charCodeAt: function (index) {
return text.charCodeAt(index);
}, length: text.length() });
}, text.length());
}
LineMap1.fromSimpleText = fromSimpleText;
function fromScriptSnapshot(scriptSnapshot) {
return new TypeScript.LineMap(function () {
return scriptSnapshot.getLineStartPositions();
}, scriptSnapshot.getLength());
}
LineMap1.fromScriptSnapshot = fromScriptSnapshot;
function fromString(text) {
return new TypeScript.LineMap(function () {
return TypeScript.TextUtilities.parseLineStarts(text);
}, text.length);
}
LineMap1.fromString = fromString;
})(TypeScript.LineMap1 || (TypeScript.LineMap1 = {}));
var LineMap1 = TypeScript.LineMap1;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (TextFactory) {
function getStartAndLengthOfLineBreakEndingAt(text, index, info) {
var c = text.charCodeAt(index);
if (c === 10 /* lineFeed */) {
if (index > 0 && text.charCodeAt(index - 1) === 13 /* carriageReturn */) {
info.startPosition = index - 1;
info.length = 2;
} else {
info.startPosition = index;
info.length = 1;
}
} else if (TypeScript.TextUtilities.isAnyLineBreakCharacter(c)) {
info.startPosition = index;
info.length = 1;
} else {
info.startPosition = index + 1;
info.length = 0;
}
}
var LinebreakInfo = (function () {
function LinebreakInfo(startPosition, length) {
this.startPosition = startPosition;
this.length = length;
}
return LinebreakInfo;
})();
var TextLine = (function () {
function TextLine(text, body, lineBreakLength, lineNumber) {
this._text = null;
this._textSpan = null;
if (text === null) {
throw TypeScript.Errors.argumentNull('text');
}
TypeScript.Debug.assert(lineBreakLength >= 0);
TypeScript.Debug.assert(lineNumber >= 0);
this._text = text;
this._textSpan = body;
this._lineBreakLength = lineBreakLength;
this._lineNumber = lineNumber;
}
TextLine.prototype.start = function () {
return this._textSpan.start();
};
TextLine.prototype.end = function () {
return this._textSpan.end();
};
TextLine.prototype.endIncludingLineBreak = function () {
return this.end() + this._lineBreakLength;
};
TextLine.prototype.extent = function () {
return this._textSpan;
};
TextLine.prototype.extentIncludingLineBreak = function () {
return TypeScript.TextSpan.fromBounds(this.start(), this.endIncludingLineBreak());
};
TextLine.prototype.toString = function () {
return this._text.toString(this._textSpan);
};
TextLine.prototype.lineNumber = function () {
return this._lineNumber;
};
return TextLine;
})();
var TextBase = (function () {
function TextBase() {
this.linebreakInfo = new LinebreakInfo(0, 0);
this.lastLineFoundForPosition = null;
}
TextBase.prototype.length = function () {
throw TypeScript.Errors.abstract();
};
TextBase.prototype.charCodeAt = function (position) {
throw TypeScript.Errors.abstract();
};
TextBase.prototype.checkSubSpan = function (span) {
if (span.start() < 0 || span.start() > this.length() || span.end() > this.length()) {
throw TypeScript.Errors.argumentOutOfRange("span");
}
};
TextBase.prototype.toString = function (span) {
if (typeof span === "undefined") { span = null; }
throw TypeScript.Errors.abstract();
};
TextBase.prototype.subText = function (span) {
this.checkSubSpan(span);
return new SubText(this, span);
};
TextBase.prototype.substr = function (start, length, intern) {
throw TypeScript.Errors.abstract();
};
TextBase.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) {
throw TypeScript.Errors.abstract();
};
TextBase.prototype.lineCount = function () {
return this._lineStarts().length;
};
TextBase.prototype.lines = function () {
var lines = [];
var length = this.lineCount();
for (var i = 0; i < length; ++i) {
lines[i] = this.getLineFromLineNumber(i);
}
return lines;
};
TextBase.prototype.lineMap = function () {
var _this = this;
return new TypeScript.LineMap(function () {
return _this._lineStarts();
}, this.length());
};
TextBase.prototype._lineStarts = function () {
throw TypeScript.Errors.abstract();
};
TextBase.prototype.getLineFromLineNumber = function (lineNumber) {
var lineStarts = this._lineStarts();
if (lineNumber < 0 || lineNumber >= lineStarts.length) {
throw TypeScript.Errors.argumentOutOfRange("lineNumber");
}
var first = lineStarts[lineNumber];
if (lineNumber === lineStarts.length - 1) {
return new TextLine(this, new TypeScript.TextSpan(first, this.length() - first), 0, lineNumber);
} else {
getStartAndLengthOfLineBreakEndingAt(this, lineStarts[lineNumber + 1] - 1, this.linebreakInfo);
return new TextLine(this, new TypeScript.TextSpan(first, this.linebreakInfo.startPosition - first), this.linebreakInfo.length, lineNumber);
}
};
TextBase.prototype.getLineFromPosition = function (position) {
var lastFound = this.lastLineFoundForPosition;
if (lastFound !== null && lastFound.start() <= position && lastFound.endIncludingLineBreak() > position) {
return lastFound;
}
var lineNumber = this.getLineNumberFromPosition(position);
var result = this.getLineFromLineNumber(lineNumber);
this.lastLineFoundForPosition = result;
return result;
};
TextBase.prototype.getLineNumberFromPosition = function (position) {
if (position < 0 || position > this.length()) {
throw TypeScript.Errors.argumentOutOfRange("position");
}
if (position === this.length()) {
return this.lineCount() - 1;
}
var lineNumber = TypeScript.ArrayUtilities.binarySearch(this._lineStarts(), position);
if (lineNumber < 0) {
lineNumber = (~lineNumber) - 1;
}
return lineNumber;
};
TextBase.prototype.getLinePosition = function (position) {
if (position < 0 || position > this.length()) {
throw TypeScript.Errors.argumentOutOfRange("position");
}
var lineNumber = this.getLineNumberFromPosition(position);
return new TypeScript.LineAndCharacter(lineNumber, position - this._lineStarts()[lineNumber]);
};
return TextBase;
})();
var SubText = (function (_super) {
__extends(SubText, _super);
function SubText(text, span) {
_super.call(this);
this._lazyLineStarts = null;
if (text === null) {
throw TypeScript.Errors.argumentNull("text");
}
if (span.start() < 0 || span.start() >= text.length() || span.end() < 0 || span.end() > text.length()) {
throw TypeScript.Errors.argument("span");
}
this.text = text;
this.span = span;
}
SubText.prototype.length = function () {
return this.span.length();
};
SubText.prototype.charCodeAt = function (position) {
if (position < 0 || position > this.length()) {
throw TypeScript.Errors.argumentOutOfRange("position");
}
return this.text.charCodeAt(this.span.start() + position);
};
SubText.prototype.subText = function (span) {
this.checkSubSpan(span);
return new SubText(this.text, this.getCompositeSpan(span.start(), span.length()));
};
SubText.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) {
var span = this.getCompositeSpan(sourceIndex, count);
this.text.copyTo(span.start(), destination, destinationIndex, span.length());
};
SubText.prototype.substr = function (start, length, intern) {
var startInOriginalText = this.span.start() + start;
return this.text.substr(startInOriginalText, length, intern);
};
SubText.prototype.getCompositeSpan = function (start, length) {
var compositeStart = TypeScript.MathPrototype.min(this.text.length(), this.span.start() + start);
var compositeEnd = TypeScript.MathPrototype.min(this.text.length(), compositeStart + length);
return new TypeScript.TextSpan(compositeStart, compositeEnd - compositeStart);
};
SubText.prototype._lineStarts = function () {
var _this = this;
if (!this._lazyLineStarts) {
this._lazyLineStarts = TypeScript.TextUtilities.parseLineStarts({ charCodeAt: function (index) {
return _this.charCodeAt(index);
}, length: this.length() });
}
return this._lazyLineStarts;
};
return SubText;
})(TextBase);
var StringText = (function (_super) {
__extends(StringText, _super);
function StringText(data) {
_super.call(this);
this.source = null;
this._lazyLineStarts = null;
if (data === null) {
throw TypeScript.Errors.argumentNull("data");
}
this.source = data;
}
StringText.prototype.length = function () {
return this.source.length;
};
StringText.prototype.charCodeAt = function (position) {
if (position < 0 || position >= this.source.length) {
throw TypeScript.Errors.argumentOutOfRange("position");
}
return this.source.charCodeAt(position);
};
StringText.prototype.substr = function (start, length, intern) {
return this.source.substr(start, length);
};
StringText.prototype.toString = function (span) {
if (typeof span === "undefined") { span = null; }
if (span === null) {
span = new TypeScript.TextSpan(0, this.length());
}
this.checkSubSpan(span);
if (span.start() === 0 && span.length() === this.length()) {
return this.source;
}
return this.source.substr(span.start(), span.length());
};
StringText.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) {
TypeScript.StringUtilities.copyTo(this.source, sourceIndex, destination, destinationIndex, count);
};
StringText.prototype._lineStarts = function () {
if (this._lazyLineStarts === null) {
this._lazyLineStarts = TypeScript.TextUtilities.parseLineStarts(this.source);
}
return this._lazyLineStarts;
};
return StringText;
})(TextBase);
function createText(value) {
return new StringText(value);
}
TextFactory.createText = createText;
})(TypeScript.TextFactory || (TypeScript.TextFactory = {}));
var TextFactory = TypeScript.TextFactory;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (SimpleText) {
var SimpleSubText = (function () {
function SimpleSubText(text, span) {
this.text = null;
this.span = null;
if (text === null) {
throw TypeScript.Errors.argumentNull("text");
}
if (span.start() < 0 || span.start() >= text.length() || span.end() < 0 || span.end() > text.length()) {
throw TypeScript.Errors.argument("span");
}
this.text = text;
this.span = span;
}
SimpleSubText.prototype.checkSubSpan = function (span) {
if (span.start() < 0 || span.start() > this.length() || span.end() > this.length()) {
throw TypeScript.Errors.argumentOutOfRange("span");
}
};
SimpleSubText.prototype.checkSubPosition = function (position) {
if (position < 0 || position >= this.length()) {
throw TypeScript.Errors.argumentOutOfRange("position");
}
};
SimpleSubText.prototype.length = function () {
return this.span.length();
};
SimpleSubText.prototype.subText = function (span) {
this.checkSubSpan(span);
return new SimpleSubText(this.text, this.getCompositeSpan(span.start(), span.length()));
};
SimpleSubText.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) {
var span = this.getCompositeSpan(sourceIndex, count);
this.text.copyTo(span.start(), destination, destinationIndex, span.length());
};
SimpleSubText.prototype.substr = function (start, length, intern) {
var span = this.getCompositeSpan(start, length);
return this.text.substr(span.start(), span.length(), intern);
};
SimpleSubText.prototype.getCompositeSpan = function (start, length) {
var compositeStart = TypeScript.MathPrototype.min(this.text.length(), this.span.start() + start);
var compositeEnd = TypeScript.MathPrototype.min(this.text.length(), compositeStart + length);
return new TypeScript.TextSpan(compositeStart, compositeEnd - compositeStart);
};
SimpleSubText.prototype.charCodeAt = function (index) {
this.checkSubPosition(index);
return this.text.charCodeAt(this.span.start() + index);
};
SimpleSubText.prototype.lineMap = function () {
return TypeScript.LineMap1.fromSimpleText(this);
};
return SimpleSubText;
})();
var SimpleStringText = (function () {
function SimpleStringText(value) {
this.value = value;
this._lineMap = null;
}
SimpleStringText.prototype.length = function () {
return this.value.length;
};
SimpleStringText.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) {
TypeScript.StringUtilities.copyTo(this.value, sourceIndex, destination, destinationIndex, count);
};
SimpleStringText.prototype.substr = function (start, length, intern) {
if (intern) {
var array = length <= SimpleStringText.charArray.length ? SimpleStringText.charArray : TypeScript.ArrayUtilities.createArray(length, 0);
this.copyTo(start, array, 0, length);
return TypeScript.Collections.DefaultStringTable.addCharArray(array, 0, length);
}
return this.value.substr(start, length);
};
SimpleStringText.prototype.subText = function (span) {
return new SimpleSubText(this, span);
};
SimpleStringText.prototype.charCodeAt = function (index) {
return this.value.charCodeAt(index);
};
SimpleStringText.prototype.lineMap = function () {
if (!this._lineMap) {
this._lineMap = TypeScript.LineMap1.fromString(this.value);
}
return this._lineMap;
};
SimpleStringText.charArray = TypeScript.ArrayUtilities.createArray(1024, 0);
return SimpleStringText;
})();
var SimpleScriptSnapshotText = (function () {
function SimpleScriptSnapshotText(scriptSnapshot) {
this.scriptSnapshot = scriptSnapshot;
}
SimpleScriptSnapshotText.prototype.charCodeAt = function (index) {
return this.scriptSnapshot.getText(index, index + 1).charCodeAt(0);
};
SimpleScriptSnapshotText.prototype.length = function () {
return this.scriptSnapshot.getLength();
};
SimpleScriptSnapshotText.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) {
var text = this.scriptSnapshot.getText(sourceIndex, sourceIndex + count);
TypeScript.StringUtilities.copyTo(text, 0, destination, destinationIndex, count);
};
SimpleScriptSnapshotText.prototype.substr = function (start, length, intern) {
return this.scriptSnapshot.getText(start, start + length);
};
SimpleScriptSnapshotText.prototype.subText = function (span) {
return new SimpleSubText(this, span);
};
SimpleScriptSnapshotText.prototype.lineMap = function () {
var _this = this;
return new TypeScript.LineMap(function () {
return _this.scriptSnapshot.getLineStartPositions();
}, this.length());
};
return SimpleScriptSnapshotText;
})();
function fromString(value) {
return new SimpleStringText(value);
}
SimpleText.fromString = fromString;
function fromScriptSnapshot(scriptSnapshot) {
return new SimpleScriptSnapshotText(scriptSnapshot);
}
SimpleText.fromScriptSnapshot = fromScriptSnapshot;
})(TypeScript.SimpleText || (TypeScript.SimpleText = {}));
var SimpleText = TypeScript.SimpleText;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (TextUtilities) {
function parseLineStarts(text) {
var length = text.length;
if (0 === length) {
var result = new Array();
result.push(0);
return result;
}
var position = 0;
var index = 0;
var arrayBuilder = new Array();
var lineNumber = 0;
while (index < length) {
var c = text.charCodeAt(index);
var lineBreakLength;
if (c > 13 /* carriageReturn */ && c <= 127) {
index++;
continue;
} else if (c === 13 /* carriageReturn */ && index + 1 < length && text.charCodeAt(index + 1) === 10 /* lineFeed */) {
lineBreakLength = 2;
} else if (c === 10 /* lineFeed */) {
lineBreakLength = 1;
} else {
lineBreakLength = TextUtilities.getLengthOfLineBreak(text, index);
}
if (0 === lineBreakLength) {
index++;
} else {
arrayBuilder.push(position);
index += lineBreakLength;
position = index;
lineNumber++;
}
}
arrayBuilder.push(position);
return arrayBuilder;
}
TextUtilities.parseLineStarts = parseLineStarts;
function getLengthOfLineBreakSlow(text, index, c) {
if (c === 13 /* carriageReturn */) {
var next = index + 1;
return (next < text.length) && 10 /* lineFeed */ === text.charCodeAt(next) ? 2 : 1;
} else if (isAnyLineBreakCharacter(c)) {
return 1;
} else {
return 0;
}
}
TextUtilities.getLengthOfLineBreakSlow = getLengthOfLineBreakSlow;
function getLengthOfLineBreak(text, index) {
var c = text.charCodeAt(index);
if (c > 13 /* carriageReturn */ && c <= 127) {
return 0;
}
return getLengthOfLineBreakSlow(text, index, c);
}
TextUtilities.getLengthOfLineBreak = getLengthOfLineBreak;
function isAnyLineBreakCharacter(c) {
return c === 10 /* lineFeed */ || c === 13 /* carriageReturn */ || c === 133 /* nextLine */ || c === 8232 /* lineSeparator */ || c === 8233 /* paragraphSeparator */;
}
TextUtilities.isAnyLineBreakCharacter = isAnyLineBreakCharacter;
})(TypeScript.TextUtilities || (TypeScript.TextUtilities = {}));
var TextUtilities = TypeScript.TextUtilities;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var TextSpan = (function () {
function TextSpan(start, length) {
if (start < 0) {
TypeScript.Errors.argument("start");
}
if (length < 0) {
TypeScript.Errors.argument("length");
}
this._start = start;
this._length = length;
}
TextSpan.prototype.start = function () {
return this._start;
};
TextSpan.prototype.length = function () {
return this._length;
};
TextSpan.prototype.end = function () {
return this._start + this._length;
};
TextSpan.prototype.isEmpty = function () {
return this._length === 0;
};
TextSpan.prototype.containsPosition = function (position) {
return position >= this._start && position < this.end();
};
TextSpan.prototype.containsTextSpan = function (span) {
return span._start >= this._start && span.end() <= this.end();
};
TextSpan.prototype.overlapsWith = function (span) {
var overlapStart = TypeScript.MathPrototype.max(this._start, span._start);
var overlapEnd = TypeScript.MathPrototype.min(this.end(), span.end());
return overlapStart < overlapEnd;
};
TextSpan.prototype.overlap = function (span) {
var overlapStart = TypeScript.MathPrototype.max(this._start, span._start);
var overlapEnd = TypeScript.MathPrototype.min(this.end(), span.end());
if (overlapStart < overlapEnd) {
return TextSpan.fromBounds(overlapStart, overlapEnd);
}
return null;
};
TextSpan.prototype.intersectsWithTextSpan = function (span) {
return span._start <= this.end() && span.end() >= this._start;
};
TextSpan.prototype.intersectsWith = function (start, length) {
var end = start + length;
return start <= this.end() && end >= this._start;
};
TextSpan.prototype.intersectsWithPosition = function (position) {
return position <= this.end() && position >= this._start;
};
TextSpan.prototype.intersection = function (span) {
var intersectStart = TypeScript.MathPrototype.max(this._start, span._start);
var intersectEnd = TypeScript.MathPrototype.min(this.end(), span.end());
if (intersectStart <= intersectEnd) {
return TextSpan.fromBounds(intersectStart, intersectEnd);
}
return null;
};
TextSpan.fromBounds = function (start, end) {
TypeScript.Debug.assert(start >= 0);
TypeScript.Debug.assert(end - start >= 0);
return new TextSpan(start, end - start);
};
return TextSpan;
})();
TypeScript.TextSpan = TextSpan;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var TextChangeRange = (function () {
function TextChangeRange(span, newLength) {
if (newLength < 0) {
throw TypeScript.Errors.argumentOutOfRange("newLength");
}
this._span = span;
this._newLength = newLength;
}
TextChangeRange.prototype.span = function () {
return this._span;
};
TextChangeRange.prototype.newLength = function () {
return this._newLength;
};
TextChangeRange.prototype.newSpan = function () {
return new TypeScript.TextSpan(this.span().start(), this.newLength());
};
TextChangeRange.prototype.isUnchanged = function () {
return this.span().isEmpty() && this.newLength() === 0;
};
TextChangeRange.collapseChangesFromSingleVersion = function (changes) {
var diff = 0;
var start = 1073741823 /* Max31BitInteger */;
var end = 0;
for (var i = 0; i < changes.length; i++) {
var change = changes[i];
diff += change.newLength() - change.span().length();
if (change.span().start() < start) {
start = change.span().start();
}
if (change.span().end() > end) {
end = change.span().end();
}
}
if (start > end) {
return null;
}
var combined = TypeScript.TextSpan.fromBounds(start, end);
var newLen = combined.length() + diff;
return new TextChangeRange(combined, newLen);
};
TextChangeRange.collapseChangesAcrossMultipleVersions = function (changes) {
if (changes.length === 0) {
return TextChangeRange.unchanged;
}
if (changes.length === 1) {
return changes[0];
}
var change0 = changes[0];
var oldStartN = change0.span().start();
var oldEndN = change0.span().end();
var newEndN = oldStartN + change0.newLength();
for (var i = 1; i < changes.length; i++) {
var nextChange = changes[i];
var oldStart1 = oldStartN;
var oldEnd1 = oldEndN;
var newEnd1 = newEndN;
var oldStart2 = nextChange.span().start();
var oldEnd2 = nextChange.span().end();
var newEnd2 = oldStart2 + nextChange.newLength();
oldStartN = TypeScript.MathPrototype.min(oldStart1, oldStart2);
oldEndN = TypeScript.MathPrototype.max(oldEnd1, oldEnd1 + (oldEnd2 - newEnd1));
newEndN = TypeScript.MathPrototype.max(newEnd2, newEnd2 + (newEnd1 - oldEnd2));
}
return new TextChangeRange(TypeScript.TextSpan.fromBounds(oldStartN, oldEndN), newEndN - oldStartN);
};
TextChangeRange.unchanged = new TextChangeRange(new TypeScript.TextSpan(0, 0), 0);
return TextChangeRange;
})();
TypeScript.TextChangeRange = TextChangeRange;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var CharacterInfo = (function () {
function CharacterInfo() {
}
CharacterInfo.isDecimalDigit = function (c) {
return c >= 48 /* _0 */ && c <= 57 /* _9 */;
};
CharacterInfo.isOctalDigit = function (c) {
return c >= 48 /* _0 */ && c <= 55 /* _7 */;
};
CharacterInfo.isHexDigit = function (c) {
return CharacterInfo.isDecimalDigit(c) || (c >= 65 /* A */ && c <= 70 /* F */) || (c >= 97 /* a */ && c <= 102 /* f */);
};
CharacterInfo.hexValue = function (c) {
return CharacterInfo.isDecimalDigit(c) ? (c - 48 /* _0 */) : (c >= 65 /* A */ && c <= 70 /* F */) ? c - 65 /* A */ + 10 : c - 97 /* a */ + 10;
};
CharacterInfo.isWhitespace = function (ch) {
switch (ch) {
case 32 /* space */:
case 160 /* nonBreakingSpace */:
case 8192 /* enQuad */:
case 8193 /* emQuad */:
case 8194 /* enSpace */:
case 8195 /* emSpace */:
case 8196 /* threePerEmSpace */:
case 8197 /* fourPerEmSpace */:
case 8198 /* sixPerEmSpace */:
case 8199 /* figureSpace */:
case 8200 /* punctuationSpace */:
case 8201 /* thinSpace */:
case 8202 /* hairSpace */:
case 8203 /* zeroWidthSpace */:
case 8239 /* narrowNoBreakSpace */:
case 12288 /* ideographicSpace */:
case 9 /* tab */:
case 11 /* verticalTab */:
case 12 /* formFeed */:
case 65279 /* byteOrderMark */:
return true;
}
return false;
};
CharacterInfo.isLineTerminator = function (ch) {
switch (ch) {
case 13 /* carriageReturn */:
case 10 /* lineFeed */:
case 8233 /* paragraphSeparator */:
case 8232 /* lineSeparator */:
return true;
}
return false;
};
return CharacterInfo;
})();
TypeScript.CharacterInfo = CharacterInfo;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (SyntaxConstants) {
SyntaxConstants[SyntaxConstants["TriviaNewLineMask"] = 0x00000001] = "TriviaNewLineMask";
SyntaxConstants[SyntaxConstants["TriviaCommentMask"] = 0x00000002] = "TriviaCommentMask";
SyntaxConstants[SyntaxConstants["TriviaFullWidthShift"] = 2] = "TriviaFullWidthShift";
SyntaxConstants[SyntaxConstants["NodeDataComputed"] = 0x00000001] = "NodeDataComputed";
SyntaxConstants[SyntaxConstants["NodeIncrementallyUnusableMask"] = 0x00000002] = "NodeIncrementallyUnusableMask";
SyntaxConstants[SyntaxConstants["NodeParsedInStrictModeMask"] = 0x00000004] = "NodeParsedInStrictModeMask";
SyntaxConstants[SyntaxConstants["NodeFullWidthShift"] = 3] = "NodeFullWidthShift";
SyntaxConstants[SyntaxConstants["IsVariableWidthKeyword"] = 1 << 31] = "IsVariableWidthKeyword";
})(TypeScript.SyntaxConstants || (TypeScript.SyntaxConstants = {}));
var SyntaxConstants = TypeScript.SyntaxConstants;
})(TypeScript || (TypeScript = {}));
var FormattingOptions = (function () {
function FormattingOptions(useTabs, spacesPerTab, indentSpaces, newLineCharacter) {
this.useTabs = useTabs;
this.spacesPerTab = spacesPerTab;
this.indentSpaces = indentSpaces;
this.newLineCharacter = newLineCharacter;
}
FormattingOptions.defaultOptions = new FormattingOptions(false, 4, 4, "\r\n");
return FormattingOptions;
})();
var TypeScript;
(function (TypeScript) {
(function (Indentation) {
function columnForEndOfToken(token, syntaxInformationMap, options) {
return columnForStartOfToken(token, syntaxInformationMap, options) + token.width();
}
Indentation.columnForEndOfToken = columnForEndOfToken;
function columnForStartOfToken(token, syntaxInformationMap, options) {
var firstTokenInLine = syntaxInformationMap.firstTokenInLineContainingToken(token);
var leadingTextInReverse = [];
var current = token;
while (current !== firstTokenInLine) {
current = syntaxInformationMap.previousToken(current);
if (current === firstTokenInLine) {
leadingTextInReverse.push(current.trailingTrivia().fullText());
leadingTextInReverse.push(current.text());
} else {
leadingTextInReverse.push(current.fullText());
}
}
collectLeadingTriviaTextToStartOfLine(firstTokenInLine, leadingTextInReverse);
return columnForLeadingTextInReverse(leadingTextInReverse, options);
}
Indentation.columnForStartOfToken = columnForStartOfToken;
function columnForStartOfFirstTokenInLineContainingToken(token, syntaxInformationMap, options) {
var firstTokenInLine = syntaxInformationMap.firstTokenInLineContainingToken(token);
var leadingTextInReverse = [];
collectLeadingTriviaTextToStartOfLine(firstTokenInLine, leadingTextInReverse);
return columnForLeadingTextInReverse(leadingTextInReverse, options);
}
Indentation.columnForStartOfFirstTokenInLineContainingToken = columnForStartOfFirstTokenInLineContainingToken;
function collectLeadingTriviaTextToStartOfLine(firstTokenInLine, leadingTextInReverse) {
var leadingTrivia = firstTokenInLine.leadingTrivia();
for (var i = leadingTrivia.count() - 1; i >= 0; i--) {
var trivia = leadingTrivia.syntaxTriviaAt(i);
if (trivia.kind() === 5 /* NewLineTrivia */) {
break;
}
if (trivia.kind() === 6 /* MultiLineCommentTrivia */) {
var lineSegments = TypeScript.Syntax.splitMultiLineCommentTriviaIntoMultipleLines(trivia);
leadingTextInReverse.push(TypeScript.ArrayUtilities.last(lineSegments));
if (lineSegments.length > 0) {
break;
}
}
leadingTextInReverse.push(trivia.fullText());
}
}
function columnForLeadingTextInReverse(leadingTextInReverse, options) {
var column = 0;
for (var i = leadingTextInReverse.length - 1; i >= 0; i--) {
var text = leadingTextInReverse[i];
column = columnForPositionInStringWorker(text, text.length, column, options);
}
return column;
}
function columnForPositionInString(input, position, options) {
return columnForPositionInStringWorker(input, position, 0, options);
}
Indentation.columnForPositionInString = columnForPositionInString;
function columnForPositionInStringWorker(input, position, startColumn, options) {
var column = startColumn;
var spacesPerTab = options.spacesPerTab;
for (var j = 0; j < position; j++) {
var ch = input.charCodeAt(j);
if (ch === 9 /* tab */) {
column += spacesPerTab - column % spacesPerTab;
} else {
column++;
}
}
return column;
}
function indentationString(column, options) {
var numberOfTabs = 0;
var numberOfSpaces = TypeScript.MathPrototype.max(0, column);
if (options.useTabs) {
numberOfTabs = Math.floor(column / options.spacesPerTab);
numberOfSpaces -= numberOfTabs * options.spacesPerTab;
}
return TypeScript.StringUtilities.repeat('\t', numberOfTabs) + TypeScript.StringUtilities.repeat(' ', numberOfSpaces);
}
Indentation.indentationString = indentationString;
function indentationTrivia(column, options) {
return TypeScript.Syntax.whitespace(this.indentationString(column, options));
}
Indentation.indentationTrivia = indentationTrivia;
function firstNonWhitespacePosition(value) {
for (var i = 0; i < value.length; i++) {
var ch = value.charCodeAt(i);
if (!TypeScript.CharacterInfo.isWhitespace(ch)) {
return i;
}
}
return value.length;
}
Indentation.firstNonWhitespacePosition = firstNonWhitespacePosition;
})(TypeScript.Indentation || (TypeScript.Indentation = {}));
var Indentation = TypeScript.Indentation;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (LanguageVersion) {
LanguageVersion[LanguageVersion["EcmaScript3"] = 0] = "EcmaScript3";
LanguageVersion[LanguageVersion["EcmaScript5"] = 1] = "EcmaScript5";
})(TypeScript.LanguageVersion || (TypeScript.LanguageVersion = {}));
var LanguageVersion = TypeScript.LanguageVersion;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var ParseOptions = (function () {
function ParseOptions(languageVersion, allowAutomaticSemicolonInsertion) {
this._languageVersion = languageVersion;
this._allowAutomaticSemicolonInsertion = allowAutomaticSemicolonInsertion;
}
ParseOptions.prototype.toJSON = function (key) {
return { allowAutomaticSemicolonInsertion: this._allowAutomaticSemicolonInsertion };
};
ParseOptions.prototype.languageVersion = function () {
return this._languageVersion;
};
ParseOptions.prototype.allowAutomaticSemicolonInsertion = function () {
return this._allowAutomaticSemicolonInsertion;
};
return ParseOptions;
})();
TypeScript.ParseOptions = ParseOptions;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var PositionedElement = (function () {
function PositionedElement(parent, element, fullStart) {
this._parent = parent;
this._element = element;
this._fullStart = fullStart;
}
PositionedElement.create = function (parent, element, fullStart) {
if (element === null) {
return null;
}
if (element.isNode()) {
return new PositionedNode(parent, element, fullStart);
} else if (element.isToken()) {
return new PositionedToken(parent, element, fullStart);
} else if (element.isList()) {
return new PositionedList(parent, element, fullStart);
} else if (element.isSeparatedList()) {
return new PositionedSeparatedList(parent, element, fullStart);
} else {
throw TypeScript.Errors.invalidOperation();
}
};
PositionedElement.prototype.parent = function () {
return this._parent;
};
PositionedElement.prototype.parentElement = function () {
return this._parent && this._parent._element;
};
PositionedElement.prototype.element = function () {
return this._element;
};
PositionedElement.prototype.kind = function () {
return this.element().kind();
};
PositionedElement.prototype.childIndex = function (child) {
return TypeScript.Syntax.childIndex(this.element(), child);
};
PositionedElement.prototype.childCount = function () {
return this.element().childCount();
};
PositionedElement.prototype.childAt = function (index) {
var offset = TypeScript.Syntax.childOffsetAt(this.element(), index);
return PositionedElement.create(this, this.element().childAt(index), this.fullStart() + offset);
};
PositionedElement.prototype.childStart = function (child) {
var offset = TypeScript.Syntax.childOffset(this.element(), child);
return this.fullStart() + offset + child.leadingTriviaWidth();
};
PositionedElement.prototype.childEnd = function (child) {
var offset = TypeScript.Syntax.childOffset(this.element(), child);
return this.fullStart() + offset + child.leadingTriviaWidth() + child.width();
};
PositionedElement.prototype.childStartAt = function (index) {
var offset = TypeScript.Syntax.childOffsetAt(this.element(), index);
var child = this.element().childAt(index);
return this.fullStart() + offset + child.leadingTriviaWidth();
};
PositionedElement.prototype.childEndAt = function (index) {
var offset = TypeScript.Syntax.childOffsetAt(this.element(), index);
var child = this.element().childAt(index);
return this.fullStart() + offset + child.leadingTriviaWidth() + child.width();
};
PositionedElement.prototype.getPositionedChild = function (child) {
var offset = TypeScript.Syntax.childOffset(this.element(), child);
return PositionedElement.create(this, child, this.fullStart() + offset);
};
PositionedElement.prototype.fullStart = function () {
return this._fullStart;
};
PositionedElement.prototype.fullEnd = function () {
return this.fullStart() + this.element().fullWidth();
};
PositionedElement.prototype.fullWidth = function () {
return this.element().fullWidth();
};
PositionedElement.prototype.start = function () {
return this.fullStart() + this.element().leadingTriviaWidth();
};
PositionedElement.prototype.end = function () {
return this.fullStart() + this.element().leadingTriviaWidth() + this.element().width();
};
PositionedElement.prototype.root = function () {
var current = this;
while (current.parent() !== null) {
current = current.parent();
}
return current;
};
PositionedElement.prototype.containingNode = function () {
var current = this.parent();
while (current !== null && !current.element().isNode()) {
current = current.parent();
}
return current;
};
return PositionedElement;
})();
TypeScript.PositionedElement = PositionedElement;
var PositionedNodeOrToken = (function (_super) {
__extends(PositionedNodeOrToken, _super);
function PositionedNodeOrToken(parent, nodeOrToken, fullStart) {
_super.call(this, parent, nodeOrToken, fullStart);
}
PositionedNodeOrToken.prototype.nodeOrToken = function () {
return this.element();
};
return PositionedNodeOrToken;
})(PositionedElement);
TypeScript.PositionedNodeOrToken = PositionedNodeOrToken;
var PositionedNode = (function (_super) {
__extends(PositionedNode, _super);
function PositionedNode(parent, node, fullStart) {
_super.call(this, parent, node, fullStart);
}
PositionedNode.prototype.node = function () {
return this.element();
};
return PositionedNode;
})(PositionedNodeOrToken);
TypeScript.PositionedNode = PositionedNode;
var PositionedToken = (function (_super) {
__extends(PositionedToken, _super);
function PositionedToken(parent, token, fullStart) {
_super.call(this, parent, token, fullStart);
}
PositionedToken.prototype.token = function () {
return this.element();
};
PositionedToken.prototype.previousToken = function (includeSkippedTokens) {
if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; }
var triviaList = this.token().leadingTrivia();
if (includeSkippedTokens && triviaList && triviaList.hasSkippedToken()) {
var currentTriviaEndPosition = this.start();
for (var i = triviaList.count() - 1; i >= 0; i--) {
var trivia = triviaList.syntaxTriviaAt(i);
if (trivia.isSkippedToken()) {
return new PositionedSkippedToken(this, trivia.skippedToken(), currentTriviaEndPosition - trivia.fullWidth());
}
currentTriviaEndPosition -= trivia.fullWidth();
}
}
var start = this.fullStart();
if (start === 0) {
return null;
}
return this.root().node().findToken(start - 1, includeSkippedTokens);
};
PositionedToken.prototype.nextToken = function (includeSkippedTokens) {
if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; }
if (this.token().tokenKind === 10 /* EndOfFileToken */) {
return null;
}
var triviaList = this.token().trailingTrivia();
if (includeSkippedTokens && triviaList && triviaList.hasSkippedToken()) {
var fullStart = this.end();
for (var i = 0, n = triviaList.count(); i < n; i++) {
var trivia = triviaList.syntaxTriviaAt(i);
if (trivia.isSkippedToken()) {
return new PositionedSkippedToken(this, trivia.skippedToken(), fullStart);
}
fullStart += trivia.fullWidth();
}
}
return this.root().node().findToken(this.fullEnd(), includeSkippedTokens);
};
return PositionedToken;
})(PositionedNodeOrToken);
TypeScript.PositionedToken = PositionedToken;
var PositionedList = (function (_super) {
__extends(PositionedList, _super);
function PositionedList(parent, list, fullStart) {
_super.call(this, parent, list, fullStart);
}
PositionedList.prototype.list = function () {
return this.element();
};
return PositionedList;
})(PositionedElement);
TypeScript.PositionedList = PositionedList;
var PositionedSeparatedList = (function (_super) {
__extends(PositionedSeparatedList, _super);
function PositionedSeparatedList(parent, list, fullStart) {
_super.call(this, parent, list, fullStart);
}
PositionedSeparatedList.prototype.list = function () {
return this.element();
};
return PositionedSeparatedList;
})(PositionedElement);
TypeScript.PositionedSeparatedList = PositionedSeparatedList;
var PositionedSkippedToken = (function (_super) {
__extends(PositionedSkippedToken, _super);
function PositionedSkippedToken(parentToken, token, fullStart) {
_super.call(this, parentToken.parent(), token, fullStart);
this._parentToken = parentToken;
}
PositionedSkippedToken.prototype.parentToken = function () {
return this._parentToken;
};
PositionedSkippedToken.prototype.previousToken = function (includeSkippedTokens) {
if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; }
var start = this.fullStart();
if (includeSkippedTokens) {
var previousToken;
if (start >= this.parentToken().end()) {
previousToken = TypeScript.Syntax.findSkippedTokenInTrailingTriviaList(this.parentToken(), start - 1);
if (previousToken) {
return previousToken;
}
return this.parentToken();
} else {
previousToken = TypeScript.Syntax.findSkippedTokenInLeadingTriviaList(this.parentToken(), start - 1);
if (previousToken) {
return previousToken;
}
}
}
var start = this.parentToken().fullStart();
if (start === 0) {
return null;
}
return this.root().node().findToken(start - 1, includeSkippedTokens);
};
PositionedSkippedToken.prototype.nextToken = function (includeSkippedTokens) {
if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; }
if (this.token().tokenKind === 10 /* EndOfFileToken */) {
return null;
}
if (includeSkippedTokens) {
var end = this.end();
var nextToken;
if (end <= this.parentToken().start()) {
nextToken = TypeScript.Syntax.findSkippedTokenInLeadingTriviaList(this.parentToken(), end);
if (nextToken) {
return nextToken;
}
return this.parentToken();
} else {
nextToken = TypeScript.Syntax.findSkippedTokenInTrailingTriviaList(this.parentToken(), end);
if (nextToken) {
return nextToken;
}
}
}
return this.root().node().findToken(this.parentToken().fullEnd(), includeSkippedTokens);
};
return PositionedSkippedToken;
})(PositionedToken);
TypeScript.PositionedSkippedToken = PositionedSkippedToken;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (SyntaxKind) {
SyntaxKind[SyntaxKind["None"] = 0] = "None";
SyntaxKind[SyntaxKind["List"] = 1] = "List";
SyntaxKind[SyntaxKind["SeparatedList"] = 2] = "SeparatedList";
SyntaxKind[SyntaxKind["TriviaList"] = 3] = "TriviaList";
SyntaxKind[SyntaxKind["WhitespaceTrivia"] = 4] = "WhitespaceTrivia";
SyntaxKind[SyntaxKind["NewLineTrivia"] = 5] = "NewLineTrivia";
SyntaxKind[SyntaxKind["MultiLineCommentTrivia"] = 6] = "MultiLineCommentTrivia";
SyntaxKind[SyntaxKind["SingleLineCommentTrivia"] = 7] = "SingleLineCommentTrivia";
SyntaxKind[SyntaxKind["SkippedTokenTrivia"] = 8] = "SkippedTokenTrivia";
SyntaxKind[SyntaxKind["ErrorToken"] = 9] = "ErrorToken";
SyntaxKind[SyntaxKind["EndOfFileToken"] = 10] = "EndOfFileToken";
SyntaxKind[SyntaxKind["IdentifierName"] = 11] = "IdentifierName";
SyntaxKind[SyntaxKind["RegularExpressionLiteral"] = 12] = "RegularExpressionLiteral";
SyntaxKind[SyntaxKind["NumericLiteral"] = 13] = "NumericLiteral";
SyntaxKind[SyntaxKind["StringLiteral"] = 14] = "StringLiteral";
SyntaxKind[SyntaxKind["BreakKeyword"] = 15] = "BreakKeyword";
SyntaxKind[SyntaxKind["CaseKeyword"] = 16] = "CaseKeyword";
SyntaxKind[SyntaxKind["CatchKeyword"] = 17] = "CatchKeyword";
SyntaxKind[SyntaxKind["ContinueKeyword"] = 18] = "ContinueKeyword";
SyntaxKind[SyntaxKind["DebuggerKeyword"] = 19] = "DebuggerKeyword";
SyntaxKind[SyntaxKind["DefaultKeyword"] = 20] = "DefaultKeyword";
SyntaxKind[SyntaxKind["DeleteKeyword"] = 21] = "DeleteKeyword";
SyntaxKind[SyntaxKind["DoKeyword"] = 22] = "DoKeyword";
SyntaxKind[SyntaxKind["ElseKeyword"] = 23] = "ElseKeyword";
SyntaxKind[SyntaxKind["FalseKeyword"] = 24] = "FalseKeyword";
SyntaxKind[SyntaxKind["FinallyKeyword"] = 25] = "FinallyKeyword";
SyntaxKind[SyntaxKind["ForKeyword"] = 26] = "ForKeyword";
SyntaxKind[SyntaxKind["FunctionKeyword"] = 27] = "FunctionKeyword";
SyntaxKind[SyntaxKind["IfKeyword"] = 28] = "IfKeyword";
SyntaxKind[SyntaxKind["InKeyword"] = 29] = "InKeyword";
SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 30] = "InstanceOfKeyword";
SyntaxKind[SyntaxKind["NewKeyword"] = 31] = "NewKeyword";
SyntaxKind[SyntaxKind["NullKeyword"] = 32] = "NullKeyword";
SyntaxKind[SyntaxKind["ReturnKeyword"] = 33] = "ReturnKeyword";
SyntaxKind[SyntaxKind["SwitchKeyword"] = 34] = "SwitchKeyword";
SyntaxKind[SyntaxKind["ThisKeyword"] = 35] = "ThisKeyword";
SyntaxKind[SyntaxKind["ThrowKeyword"] = 36] = "ThrowKeyword";
SyntaxKind[SyntaxKind["TrueKeyword"] = 37] = "TrueKeyword";
SyntaxKind[SyntaxKind["TryKeyword"] = 38] = "TryKeyword";
SyntaxKind[SyntaxKind["TypeOfKeyword"] = 39] = "TypeOfKeyword";
SyntaxKind[SyntaxKind["VarKeyword"] = 40] = "VarKeyword";
SyntaxKind[SyntaxKind["VoidKeyword"] = 41] = "VoidKeyword";
SyntaxKind[SyntaxKind["WhileKeyword"] = 42] = "WhileKeyword";
SyntaxKind[SyntaxKind["WithKeyword"] = 43] = "WithKeyword";
SyntaxKind[SyntaxKind["ClassKeyword"] = 44] = "ClassKeyword";
SyntaxKind[SyntaxKind["ConstKeyword"] = 45] = "ConstKeyword";
SyntaxKind[SyntaxKind["EnumKeyword"] = 46] = "EnumKeyword";
SyntaxKind[SyntaxKind["ExportKeyword"] = 47] = "ExportKeyword";
SyntaxKind[SyntaxKind["ExtendsKeyword"] = 48] = "ExtendsKeyword";
SyntaxKind[SyntaxKind["ImportKeyword"] = 49] = "ImportKeyword";
SyntaxKind[SyntaxKind["SuperKeyword"] = 50] = "SuperKeyword";
SyntaxKind[SyntaxKind["ImplementsKeyword"] = 51] = "ImplementsKeyword";
SyntaxKind[SyntaxKind["InterfaceKeyword"] = 52] = "InterfaceKeyword";
SyntaxKind[SyntaxKind["LetKeyword"] = 53] = "LetKeyword";
SyntaxKind[SyntaxKind["PackageKeyword"] = 54] = "PackageKeyword";
SyntaxKind[SyntaxKind["PrivateKeyword"] = 55] = "PrivateKeyword";
SyntaxKind[SyntaxKind["ProtectedKeyword"] = 56] = "ProtectedKeyword";
SyntaxKind[SyntaxKind["PublicKeyword"] = 57] = "PublicKeyword";
SyntaxKind[SyntaxKind["StaticKeyword"] = 58] = "StaticKeyword";
SyntaxKind[SyntaxKind["YieldKeyword"] = 59] = "YieldKeyword";
SyntaxKind[SyntaxKind["AnyKeyword"] = 60] = "AnyKeyword";
SyntaxKind[SyntaxKind["BooleanKeyword"] = 61] = "BooleanKeyword";
SyntaxKind[SyntaxKind["ConstructorKeyword"] = 62] = "ConstructorKeyword";
SyntaxKind[SyntaxKind["DeclareKeyword"] = 63] = "DeclareKeyword";
SyntaxKind[SyntaxKind["GetKeyword"] = 64] = "GetKeyword";
SyntaxKind[SyntaxKind["ModuleKeyword"] = 65] = "ModuleKeyword";
SyntaxKind[SyntaxKind["RequireKeyword"] = 66] = "RequireKeyword";
SyntaxKind[SyntaxKind["NumberKeyword"] = 67] = "NumberKeyword";
SyntaxKind[SyntaxKind["SetKeyword"] = 68] = "SetKeyword";
SyntaxKind[SyntaxKind["StringKeyword"] = 69] = "StringKeyword";
SyntaxKind[SyntaxKind["OpenBraceToken"] = 70] = "OpenBraceToken";
SyntaxKind[SyntaxKind["CloseBraceToken"] = 71] = "CloseBraceToken";
SyntaxKind[SyntaxKind["OpenParenToken"] = 72] = "OpenParenToken";
SyntaxKind[SyntaxKind["CloseParenToken"] = 73] = "CloseParenToken";
SyntaxKind[SyntaxKind["OpenBracketToken"] = 74] = "OpenBracketToken";
SyntaxKind[SyntaxKind["CloseBracketToken"] = 75] = "CloseBracketToken";
SyntaxKind[SyntaxKind["DotToken"] = 76] = "DotToken";
SyntaxKind[SyntaxKind["DotDotDotToken"] = 77] = "DotDotDotToken";
SyntaxKind[SyntaxKind["SemicolonToken"] = 78] = "SemicolonToken";
SyntaxKind[SyntaxKind["CommaToken"] = 79] = "CommaToken";
SyntaxKind[SyntaxKind["LessThanToken"] = 80] = "LessThanToken";
SyntaxKind[SyntaxKind["GreaterThanToken"] = 81] = "GreaterThanToken";
SyntaxKind[SyntaxKind["LessThanEqualsToken"] = 82] = "LessThanEqualsToken";
SyntaxKind[SyntaxKind["GreaterThanEqualsToken"] = 83] = "GreaterThanEqualsToken";
SyntaxKind[SyntaxKind["EqualsEqualsToken"] = 84] = "EqualsEqualsToken";
SyntaxKind[SyntaxKind["EqualsGreaterThanToken"] = 85] = "EqualsGreaterThanToken";
SyntaxKind[SyntaxKind["ExclamationEqualsToken"] = 86] = "ExclamationEqualsToken";
SyntaxKind[SyntaxKind["EqualsEqualsEqualsToken"] = 87] = "EqualsEqualsEqualsToken";
SyntaxKind[SyntaxKind["ExclamationEqualsEqualsToken"] = 88] = "ExclamationEqualsEqualsToken";
SyntaxKind[SyntaxKind["PlusToken"] = 89] = "PlusToken";
SyntaxKind[SyntaxKind["MinusToken"] = 90] = "MinusToken";
SyntaxKind[SyntaxKind["AsteriskToken"] = 91] = "AsteriskToken";
SyntaxKind[SyntaxKind["PercentToken"] = 92] = "PercentToken";
SyntaxKind[SyntaxKind["PlusPlusToken"] = 93] = "PlusPlusToken";
SyntaxKind[SyntaxKind["MinusMinusToken"] = 94] = "MinusMinusToken";
SyntaxKind[SyntaxKind["LessThanLessThanToken"] = 95] = "LessThanLessThanToken";
SyntaxKind[SyntaxKind["GreaterThanGreaterThanToken"] = 96] = "GreaterThanGreaterThanToken";
SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanToken"] = 97] = "GreaterThanGreaterThanGreaterThanToken";
SyntaxKind[SyntaxKind["AmpersandToken"] = 98] = "AmpersandToken";
SyntaxKind[SyntaxKind["BarToken"] = 99] = "BarToken";
SyntaxKind[SyntaxKind["CaretToken"] = 100] = "CaretToken";
SyntaxKind[SyntaxKind["ExclamationToken"] = 101] = "ExclamationToken";
SyntaxKind[SyntaxKind["TildeToken"] = 102] = "TildeToken";
SyntaxKind[SyntaxKind["AmpersandAmpersandToken"] = 103] = "AmpersandAmpersandToken";
SyntaxKind[SyntaxKind["BarBarToken"] = 104] = "BarBarToken";
SyntaxKind[SyntaxKind["QuestionToken"] = 105] = "QuestionToken";
SyntaxKind[SyntaxKind["ColonToken"] = 106] = "ColonToken";
SyntaxKind[SyntaxKind["EqualsToken"] = 107] = "EqualsToken";
SyntaxKind[SyntaxKind["PlusEqualsToken"] = 108] = "PlusEqualsToken";
SyntaxKind[SyntaxKind["MinusEqualsToken"] = 109] = "MinusEqualsToken";
SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 110] = "AsteriskEqualsToken";
SyntaxKind[SyntaxKind["PercentEqualsToken"] = 111] = "PercentEqualsToken";
SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 112] = "LessThanLessThanEqualsToken";
SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 113] = "GreaterThanGreaterThanEqualsToken";
SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 114] = "GreaterThanGreaterThanGreaterThanEqualsToken";
SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 115] = "AmpersandEqualsToken";
SyntaxKind[SyntaxKind["BarEqualsToken"] = 116] = "BarEqualsToken";
SyntaxKind[SyntaxKind["CaretEqualsToken"] = 117] = "CaretEqualsToken";
SyntaxKind[SyntaxKind["SlashToken"] = 118] = "SlashToken";
SyntaxKind[SyntaxKind["SlashEqualsToken"] = 119] = "SlashEqualsToken";
SyntaxKind[SyntaxKind["SourceUnit"] = 120] = "SourceUnit";
SyntaxKind[SyntaxKind["QualifiedName"] = 121] = "QualifiedName";
SyntaxKind[SyntaxKind["ObjectType"] = 122] = "ObjectType";
SyntaxKind[SyntaxKind["FunctionType"] = 123] = "FunctionType";
SyntaxKind[SyntaxKind["ArrayType"] = 124] = "ArrayType";
SyntaxKind[SyntaxKind["ConstructorType"] = 125] = "ConstructorType";
SyntaxKind[SyntaxKind["GenericType"] = 126] = "GenericType";
SyntaxKind[SyntaxKind["TypeQuery"] = 127] = "TypeQuery";
SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 128] = "InterfaceDeclaration";
SyntaxKind[SyntaxKind["FunctionDeclaration"] = 129] = "FunctionDeclaration";
SyntaxKind[SyntaxKind["ModuleDeclaration"] = 130] = "ModuleDeclaration";
SyntaxKind[SyntaxKind["ClassDeclaration"] = 131] = "ClassDeclaration";
SyntaxKind[SyntaxKind["EnumDeclaration"] = 132] = "EnumDeclaration";
SyntaxKind[SyntaxKind["ImportDeclaration"] = 133] = "ImportDeclaration";
SyntaxKind[SyntaxKind["ExportAssignment"] = 134] = "ExportAssignment";
SyntaxKind[SyntaxKind["MemberFunctionDeclaration"] = 135] = "MemberFunctionDeclaration";
SyntaxKind[SyntaxKind["MemberVariableDeclaration"] = 136] = "MemberVariableDeclaration";
SyntaxKind[SyntaxKind["ConstructorDeclaration"] = 137] = "ConstructorDeclaration";
SyntaxKind[SyntaxKind["IndexMemberDeclaration"] = 138] = "IndexMemberDeclaration";
SyntaxKind[SyntaxKind["GetAccessor"] = 139] = "GetAccessor";
SyntaxKind[SyntaxKind["SetAccessor"] = 140] = "SetAccessor";
SyntaxKind[SyntaxKind["PropertySignature"] = 141] = "PropertySignature";
SyntaxKind[SyntaxKind["CallSignature"] = 142] = "CallSignature";
SyntaxKind[SyntaxKind["ConstructSignature"] = 143] = "ConstructSignature";
SyntaxKind[SyntaxKind["IndexSignature"] = 144] = "IndexSignature";
SyntaxKind[SyntaxKind["MethodSignature"] = 145] = "MethodSignature";
SyntaxKind[SyntaxKind["Block"] = 146] = "Block";
SyntaxKind[SyntaxKind["IfStatement"] = 147] = "IfStatement";
SyntaxKind[SyntaxKind["VariableStatement"] = 148] = "VariableStatement";
SyntaxKind[SyntaxKind["ExpressionStatement"] = 149] = "ExpressionStatement";
SyntaxKind[SyntaxKind["ReturnStatement"] = 150] = "ReturnStatement";
SyntaxKind[SyntaxKind["SwitchStatement"] = 151] = "SwitchStatement";
SyntaxKind[SyntaxKind["BreakStatement"] = 152] = "BreakStatement";
SyntaxKind[SyntaxKind["ContinueStatement"] = 153] = "ContinueStatement";
SyntaxKind[SyntaxKind["ForStatement"] = 154] = "ForStatement";
SyntaxKind[SyntaxKind["ForInStatement"] = 155] = "ForInStatement";
SyntaxKind[SyntaxKind["EmptyStatement"] = 156] = "EmptyStatement";
SyntaxKind[SyntaxKind["ThrowStatement"] = 157] = "ThrowStatement";
SyntaxKind[SyntaxKind["WhileStatement"] = 158] = "WhileStatement";
SyntaxKind[SyntaxKind["TryStatement"] = 159] = "TryStatement";
SyntaxKind[SyntaxKind["LabeledStatement"] = 160] = "LabeledStatement";
SyntaxKind[SyntaxKind["DoStatement"] = 161] = "DoStatement";
SyntaxKind[SyntaxKind["DebuggerStatement"] = 162] = "DebuggerStatement";
SyntaxKind[SyntaxKind["WithStatement"] = 163] = "WithStatement";
SyntaxKind[SyntaxKind["PlusExpression"] = 164] = "PlusExpression";
SyntaxKind[SyntaxKind["NegateExpression"] = 165] = "NegateExpression";
SyntaxKind[SyntaxKind["BitwiseNotExpression"] = 166] = "BitwiseNotExpression";
SyntaxKind[SyntaxKind["LogicalNotExpression"] = 167] = "LogicalNotExpression";
SyntaxKind[SyntaxKind["PreIncrementExpression"] = 168] = "PreIncrementExpression";
SyntaxKind[SyntaxKind["PreDecrementExpression"] = 169] = "PreDecrementExpression";
SyntaxKind[SyntaxKind["DeleteExpression"] = 170] = "DeleteExpression";
SyntaxKind[SyntaxKind["TypeOfExpression"] = 171] = "TypeOfExpression";
SyntaxKind[SyntaxKind["VoidExpression"] = 172] = "VoidExpression";
SyntaxKind[SyntaxKind["CommaExpression"] = 173] = "CommaExpression";
SyntaxKind[SyntaxKind["AssignmentExpression"] = 174] = "AssignmentExpression";
SyntaxKind[SyntaxKind["AddAssignmentExpression"] = 175] = "AddAssignmentExpression";
SyntaxKind[SyntaxKind["SubtractAssignmentExpression"] = 176] = "SubtractAssignmentExpression";
SyntaxKind[SyntaxKind["MultiplyAssignmentExpression"] = 177] = "MultiplyAssignmentExpression";
SyntaxKind[SyntaxKind["DivideAssignmentExpression"] = 178] = "DivideAssignmentExpression";
SyntaxKind[SyntaxKind["ModuloAssignmentExpression"] = 179] = "ModuloAssignmentExpression";
SyntaxKind[SyntaxKind["AndAssignmentExpression"] = 180] = "AndAssignmentExpression";
SyntaxKind[SyntaxKind["ExclusiveOrAssignmentExpression"] = 181] = "ExclusiveOrAssignmentExpression";
SyntaxKind[SyntaxKind["OrAssignmentExpression"] = 182] = "OrAssignmentExpression";
SyntaxKind[SyntaxKind["LeftShiftAssignmentExpression"] = 183] = "LeftShiftAssignmentExpression";
SyntaxKind[SyntaxKind["SignedRightShiftAssignmentExpression"] = 184] = "SignedRightShiftAssignmentExpression";
SyntaxKind[SyntaxKind["UnsignedRightShiftAssignmentExpression"] = 185] = "UnsignedRightShiftAssignmentExpression";
SyntaxKind[SyntaxKind["ConditionalExpression"] = 186] = "ConditionalExpression";
SyntaxKind[SyntaxKind["LogicalOrExpression"] = 187] = "LogicalOrExpression";
SyntaxKind[SyntaxKind["LogicalAndExpression"] = 188] = "LogicalAndExpression";
SyntaxKind[SyntaxKind["BitwiseOrExpression"] = 189] = "BitwiseOrExpression";
SyntaxKind[SyntaxKind["BitwiseExclusiveOrExpression"] = 190] = "BitwiseExclusiveOrExpression";
SyntaxKind[SyntaxKind["BitwiseAndExpression"] = 191] = "BitwiseAndExpression";
SyntaxKind[SyntaxKind["EqualsWithTypeConversionExpression"] = 192] = "EqualsWithTypeConversionExpression";
SyntaxKind[SyntaxKind["NotEqualsWithTypeConversionExpression"] = 193] = "NotEqualsWithTypeConversionExpression";
SyntaxKind[SyntaxKind["EqualsExpression"] = 194] = "EqualsExpression";
SyntaxKind[SyntaxKind["NotEqualsExpression"] = 195] = "NotEqualsExpression";
SyntaxKind[SyntaxKind["LessThanExpression"] = 196] = "LessThanExpression";
SyntaxKind[SyntaxKind["GreaterThanExpression"] = 197] = "GreaterThanExpression";
SyntaxKind[SyntaxKind["LessThanOrEqualExpression"] = 198] = "LessThanOrEqualExpression";
SyntaxKind[SyntaxKind["GreaterThanOrEqualExpression"] = 199] = "GreaterThanOrEqualExpression";
SyntaxKind[SyntaxKind["InstanceOfExpression"] = 200] = "InstanceOfExpression";
SyntaxKind[SyntaxKind["InExpression"] = 201] = "InExpression";
SyntaxKind[SyntaxKind["LeftShiftExpression"] = 202] = "LeftShiftExpression";
SyntaxKind[SyntaxKind["SignedRightShiftExpression"] = 203] = "SignedRightShiftExpression";
SyntaxKind[SyntaxKind["UnsignedRightShiftExpression"] = 204] = "UnsignedRightShiftExpression";
SyntaxKind[SyntaxKind["MultiplyExpression"] = 205] = "MultiplyExpression";
SyntaxKind[SyntaxKind["DivideExpression"] = 206] = "DivideExpression";
SyntaxKind[SyntaxKind["ModuloExpression"] = 207] = "ModuloExpression";
SyntaxKind[SyntaxKind["AddExpression"] = 208] = "AddExpression";
SyntaxKind[SyntaxKind["SubtractExpression"] = 209] = "SubtractExpression";
SyntaxKind[SyntaxKind["PostIncrementExpression"] = 210] = "PostIncrementExpression";
SyntaxKind[SyntaxKind["PostDecrementExpression"] = 211] = "PostDecrementExpression";
SyntaxKind[SyntaxKind["MemberAccessExpression"] = 212] = "MemberAccessExpression";
SyntaxKind[SyntaxKind["InvocationExpression"] = 213] = "InvocationExpression";
SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 214] = "ArrayLiteralExpression";
SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 215] = "ObjectLiteralExpression";
SyntaxKind[SyntaxKind["ObjectCreationExpression"] = 216] = "ObjectCreationExpression";
SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 217] = "ParenthesizedExpression";
SyntaxKind[SyntaxKind["ParenthesizedArrowFunctionExpression"] = 218] = "ParenthesizedArrowFunctionExpression";
SyntaxKind[SyntaxKind["SimpleArrowFunctionExpression"] = 219] = "SimpleArrowFunctionExpression";
SyntaxKind[SyntaxKind["CastExpression"] = 220] = "CastExpression";
SyntaxKind[SyntaxKind["ElementAccessExpression"] = 221] = "ElementAccessExpression";
SyntaxKind[SyntaxKind["FunctionExpression"] = 222] = "FunctionExpression";
SyntaxKind[SyntaxKind["OmittedExpression"] = 223] = "OmittedExpression";
SyntaxKind[SyntaxKind["VariableDeclaration"] = 224] = "VariableDeclaration";
SyntaxKind[SyntaxKind["VariableDeclarator"] = 225] = "VariableDeclarator";
SyntaxKind[SyntaxKind["ArgumentList"] = 226] = "ArgumentList";
SyntaxKind[SyntaxKind["ParameterList"] = 227] = "ParameterList";
SyntaxKind[SyntaxKind["TypeArgumentList"] = 228] = "TypeArgumentList";
SyntaxKind[SyntaxKind["TypeParameterList"] = 229] = "TypeParameterList";
SyntaxKind[SyntaxKind["ExtendsHeritageClause"] = 230] = "ExtendsHeritageClause";
SyntaxKind[SyntaxKind["ImplementsHeritageClause"] = 231] = "ImplementsHeritageClause";
SyntaxKind[SyntaxKind["EqualsValueClause"] = 232] = "EqualsValueClause";
SyntaxKind[SyntaxKind["CaseSwitchClause"] = 233] = "CaseSwitchClause";
SyntaxKind[SyntaxKind["DefaultSwitchClause"] = 234] = "DefaultSwitchClause";
SyntaxKind[SyntaxKind["ElseClause"] = 235] = "ElseClause";
SyntaxKind[SyntaxKind["CatchClause"] = 236] = "CatchClause";
SyntaxKind[SyntaxKind["FinallyClause"] = 237] = "FinallyClause";
SyntaxKind[SyntaxKind["TypeParameter"] = 238] = "TypeParameter";
SyntaxKind[SyntaxKind["Constraint"] = 239] = "Constraint";
SyntaxKind[SyntaxKind["SimplePropertyAssignment"] = 240] = "SimplePropertyAssignment";
SyntaxKind[SyntaxKind["FunctionPropertyAssignment"] = 241] = "FunctionPropertyAssignment";
SyntaxKind[SyntaxKind["Parameter"] = 242] = "Parameter";
SyntaxKind[SyntaxKind["EnumElement"] = 243] = "EnumElement";
SyntaxKind[SyntaxKind["TypeAnnotation"] = 244] = "TypeAnnotation";
SyntaxKind[SyntaxKind["ExternalModuleReference"] = 245] = "ExternalModuleReference";
SyntaxKind[SyntaxKind["ModuleNameModuleReference"] = 246] = "ModuleNameModuleReference";
SyntaxKind[SyntaxKind["Last"] = SyntaxKind.ModuleNameModuleReference] = "Last";
SyntaxKind[SyntaxKind["FirstStandardKeyword"] = SyntaxKind.BreakKeyword] = "FirstStandardKeyword";
SyntaxKind[SyntaxKind["LastStandardKeyword"] = SyntaxKind.WithKeyword] = "LastStandardKeyword";
SyntaxKind[SyntaxKind["FirstFutureReservedKeyword"] = SyntaxKind.ClassKeyword] = "FirstFutureReservedKeyword";
SyntaxKind[SyntaxKind["LastFutureReservedKeyword"] = SyntaxKind.SuperKeyword] = "LastFutureReservedKeyword";
SyntaxKind[SyntaxKind["FirstFutureReservedStrictKeyword"] = SyntaxKind.ImplementsKeyword] = "FirstFutureReservedStrictKeyword";
SyntaxKind[SyntaxKind["LastFutureReservedStrictKeyword"] = SyntaxKind.YieldKeyword] = "LastFutureReservedStrictKeyword";
SyntaxKind[SyntaxKind["FirstTypeScriptKeyword"] = SyntaxKind.AnyKeyword] = "FirstTypeScriptKeyword";
SyntaxKind[SyntaxKind["LastTypeScriptKeyword"] = SyntaxKind.StringKeyword] = "LastTypeScriptKeyword";
SyntaxKind[SyntaxKind["FirstKeyword"] = SyntaxKind.FirstStandardKeyword] = "FirstKeyword";
SyntaxKind[SyntaxKind["LastKeyword"] = SyntaxKind.LastTypeScriptKeyword] = "LastKeyword";
SyntaxKind[SyntaxKind["FirstToken"] = SyntaxKind.ErrorToken] = "FirstToken";
SyntaxKind[SyntaxKind["LastToken"] = SyntaxKind.SlashEqualsToken] = "LastToken";
SyntaxKind[SyntaxKind["FirstPunctuation"] = SyntaxKind.OpenBraceToken] = "FirstPunctuation";
SyntaxKind[SyntaxKind["LastPunctuation"] = SyntaxKind.SlashEqualsToken] = "LastPunctuation";
SyntaxKind[SyntaxKind["FirstFixedWidth"] = SyntaxKind.FirstKeyword] = "FirstFixedWidth";
SyntaxKind[SyntaxKind["LastFixedWidth"] = SyntaxKind.LastPunctuation] = "LastFixedWidth";
SyntaxKind[SyntaxKind["FirstTrivia"] = SyntaxKind.WhitespaceTrivia] = "FirstTrivia";
SyntaxKind[SyntaxKind["LastTrivia"] = SyntaxKind.SkippedTokenTrivia] = "LastTrivia";
})(TypeScript.SyntaxKind || (TypeScript.SyntaxKind = {}));
var SyntaxKind = TypeScript.SyntaxKind;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (SyntaxFacts) {
var textToKeywordKind = {
"any": 60 /* AnyKeyword */,
"boolean": 61 /* BooleanKeyword */,
"break": 15 /* BreakKeyword */,
"case": 16 /* CaseKeyword */,
"catch": 17 /* CatchKeyword */,
"class": 44 /* ClassKeyword */,
"continue": 18 /* ContinueKeyword */,
"const": 45 /* ConstKeyword */,
"constructor": 62 /* ConstructorKeyword */,
"debugger": 19 /* DebuggerKeyword */,
"declare": 63 /* DeclareKeyword */,
"default": 20 /* DefaultKeyword */,
"delete": 21 /* DeleteKeyword */,
"do": 22 /* DoKeyword */,
"else": 23 /* ElseKeyword */,
"enum": 46 /* EnumKeyword */,
"export": 47 /* ExportKeyword */,
"extends": 48 /* ExtendsKeyword */,
"false": 24 /* FalseKeyword */,
"finally": 25 /* FinallyKeyword */,
"for": 26 /* ForKeyword */,
"function": 27 /* FunctionKeyword */,
"get": 64 /* GetKeyword */,
"if": 28 /* IfKeyword */,
"implements": 51 /* ImplementsKeyword */,
"import": 49 /* ImportKeyword */,
"in": 29 /* InKeyword */,
"instanceof": 30 /* InstanceOfKeyword */,
"interface": 52 /* InterfaceKeyword */,
"let": 53 /* LetKeyword */,
"module": 65 /* ModuleKeyword */,
"new": 31 /* NewKeyword */,
"null": 32 /* NullKeyword */,
"number": 67 /* NumberKeyword */,
"package": 54 /* PackageKeyword */,
"private": 55 /* PrivateKeyword */,
"protected": 56 /* ProtectedKeyword */,
"public": 57 /* PublicKeyword */,
"require": 66 /* RequireKeyword */,
"return": 33 /* ReturnKeyword */,
"set": 68 /* SetKeyword */,
"static": 58 /* StaticKeyword */,
"string": 69 /* StringKeyword */,
"super": 50 /* SuperKeyword */,
"switch": 34 /* SwitchKeyword */,
"this": 35 /* ThisKeyword */,
"throw": 36 /* ThrowKeyword */,
"true": 37 /* TrueKeyword */,
"try": 38 /* TryKeyword */,
"typeof": 39 /* TypeOfKeyword */,
"var": 40 /* VarKeyword */,
"void": 41 /* VoidKeyword */,
"while": 42 /* WhileKeyword */,
"with": 43 /* WithKeyword */,
"yield": 59 /* YieldKeyword */,
"{": 70 /* OpenBraceToken */,
"}": 71 /* CloseBraceToken */,
"(": 72 /* OpenParenToken */,
")": 73 /* CloseParenToken */,
"[": 74 /* OpenBracketToken */,
"]": 75 /* CloseBracketToken */,
".": 76 /* DotToken */,
"...": 77 /* DotDotDotToken */,
";": 78 /* SemicolonToken */,
",": 79 /* CommaToken */,
"<": 80 /* LessThanToken */,
">": 81 /* GreaterThanToken */,
"<=": 82 /* LessThanEqualsToken */,
">=": 83 /* GreaterThanEqualsToken */,
"==": 84 /* EqualsEqualsToken */,
"=>": 85 /* EqualsGreaterThanToken */,
"!=": 86 /* ExclamationEqualsToken */,
"===": 87 /* EqualsEqualsEqualsToken */,
"!==": 88 /* ExclamationEqualsEqualsToken */,
"+": 89 /* PlusToken */,
"-": 90 /* MinusToken */,
"*": 91 /* AsteriskToken */,
"%": 92 /* PercentToken */,
"++": 93 /* PlusPlusToken */,
"--": 94 /* MinusMinusToken */,
"<<": 95 /* LessThanLessThanToken */,
">>": 96 /* GreaterThanGreaterThanToken */,
">>>": 97 /* GreaterThanGreaterThanGreaterThanToken */,
"&": 98 /* AmpersandToken */,
"|": 99 /* BarToken */,
"^": 100 /* CaretToken */,
"!": 101 /* ExclamationToken */,
"~": 102 /* TildeToken */,
"&&": 103 /* AmpersandAmpersandToken */,
"||": 104 /* BarBarToken */,
"?": 105 /* QuestionToken */,
":": 106 /* ColonToken */,
"=": 107 /* EqualsToken */,
"+=": 108 /* PlusEqualsToken */,
"-=": 109 /* MinusEqualsToken */,
"*=": 110 /* AsteriskEqualsToken */,
"%=": 111 /* PercentEqualsToken */,
"<<=": 112 /* LessThanLessThanEqualsToken */,
">>=": 113 /* GreaterThanGreaterThanEqualsToken */,
">>>=": 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */,
"&=": 115 /* AmpersandEqualsToken */,
"|=": 116 /* BarEqualsToken */,
"^=": 117 /* CaretEqualsToken */,
"/": 118 /* SlashToken */,
"/=": 119 /* SlashEqualsToken */
};
var kindToText = new Array();
for (var name in textToKeywordKind) {
if (textToKeywordKind.hasOwnProperty(name)) {
kindToText[textToKeywordKind[name]] = name;
}
}
kindToText[62 /* ConstructorKeyword */] = "constructor";
function getTokenKind(text) {
if (textToKeywordKind.hasOwnProperty(text)) {
return textToKeywordKind[text];
}
return 0 /* None */;
}
SyntaxFacts.getTokenKind = getTokenKind;
function getText(kind) {
var result = kindToText[kind];
return result !== undefined ? result : null;
}
SyntaxFacts.getText = getText;
function isTokenKind(kind) {
return kind >= 9 /* FirstToken */ && kind <= 119 /* LastToken */;
}
SyntaxFacts.isTokenKind = isTokenKind;
function isAnyKeyword(kind) {
return kind >= 15 /* FirstKeyword */ && kind <= 69 /* LastKeyword */;
}
SyntaxFacts.isAnyKeyword = isAnyKeyword;
function isStandardKeyword(kind) {
return kind >= 15 /* FirstStandardKeyword */ && kind <= 43 /* LastStandardKeyword */;
}
SyntaxFacts.isStandardKeyword = isStandardKeyword;
function isFutureReservedKeyword(kind) {
return kind >= 44 /* FirstFutureReservedKeyword */ && kind <= 50 /* LastFutureReservedKeyword */;
}
SyntaxFacts.isFutureReservedKeyword = isFutureReservedKeyword;
function isFutureReservedStrictKeyword(kind) {
return kind >= 51 /* FirstFutureReservedStrictKeyword */ && kind <= 59 /* LastFutureReservedStrictKeyword */;
}
SyntaxFacts.isFutureReservedStrictKeyword = isFutureReservedStrictKeyword;
function isAnyPunctuation(kind) {
return kind >= 70 /* FirstPunctuation */ && kind <= 119 /* LastPunctuation */;
}
SyntaxFacts.isAnyPunctuation = isAnyPunctuation;
function isPrefixUnaryExpressionOperatorToken(tokenKind) {
return getPrefixUnaryExpressionFromOperatorToken(tokenKind) !== 0 /* None */;
}
SyntaxFacts.isPrefixUnaryExpressionOperatorToken = isPrefixUnaryExpressionOperatorToken;
function isBinaryExpressionOperatorToken(tokenKind) {
return getBinaryExpressionFromOperatorToken(tokenKind) !== 0 /* None */;
}
SyntaxFacts.isBinaryExpressionOperatorToken = isBinaryExpressionOperatorToken;
function getPrefixUnaryExpressionFromOperatorToken(tokenKind) {
switch (tokenKind) {
case 89 /* PlusToken */:
return 164 /* PlusExpression */;
case 90 /* MinusToken */:
return 165 /* NegateExpression */;
case 102 /* TildeToken */:
return 166 /* BitwiseNotExpression */;
case 101 /* ExclamationToken */:
return 167 /* LogicalNotExpression */;
case 93 /* PlusPlusToken */:
return 168 /* PreIncrementExpression */;
case 94 /* MinusMinusToken */:
return 169 /* PreDecrementExpression */;
default:
return 0 /* None */;
}
}
SyntaxFacts.getPrefixUnaryExpressionFromOperatorToken = getPrefixUnaryExpressionFromOperatorToken;
function getPostfixUnaryExpressionFromOperatorToken(tokenKind) {
switch (tokenKind) {
case 93 /* PlusPlusToken */:
return 210 /* PostIncrementExpression */;
case 94 /* MinusMinusToken */:
return 211 /* PostDecrementExpression */;
default:
return 0 /* None */;
}
}
SyntaxFacts.getPostfixUnaryExpressionFromOperatorToken = getPostfixUnaryExpressionFromOperatorToken;
function getBinaryExpressionFromOperatorToken(tokenKind) {
switch (tokenKind) {
case 91 /* AsteriskToken */:
return 205 /* MultiplyExpression */;
case 118 /* SlashToken */:
return 206 /* DivideExpression */;
case 92 /* PercentToken */:
return 207 /* ModuloExpression */;
case 89 /* PlusToken */:
return 208 /* AddExpression */;
case 90 /* MinusToken */:
return 209 /* SubtractExpression */;
case 95 /* LessThanLessThanToken */:
return 202 /* LeftShiftExpression */;
case 96 /* GreaterThanGreaterThanToken */:
return 203 /* SignedRightShiftExpression */;
case 97 /* GreaterThanGreaterThanGreaterThanToken */:
return 204 /* UnsignedRightShiftExpression */;
case 80 /* LessThanToken */:
return 196 /* LessThanExpression */;
case 81 /* GreaterThanToken */:
return 197 /* GreaterThanExpression */;
case 82 /* LessThanEqualsToken */:
return 198 /* LessThanOrEqualExpression */;
case 83 /* GreaterThanEqualsToken */:
return 199 /* GreaterThanOrEqualExpression */;
case 30 /* InstanceOfKeyword */:
return 200 /* InstanceOfExpression */;
case 29 /* InKeyword */:
return 201 /* InExpression */;
case 84 /* EqualsEqualsToken */:
return 192 /* EqualsWithTypeConversionExpression */;
case 86 /* ExclamationEqualsToken */:
return 193 /* NotEqualsWithTypeConversionExpression */;
case 87 /* EqualsEqualsEqualsToken */:
return 194 /* EqualsExpression */;
case 88 /* ExclamationEqualsEqualsToken */:
return 195 /* NotEqualsExpression */;
case 98 /* AmpersandToken */:
return 191 /* BitwiseAndExpression */;
case 100 /* CaretToken */:
return 190 /* BitwiseExclusiveOrExpression */;
case 99 /* BarToken */:
return 189 /* BitwiseOrExpression */;
case 103 /* AmpersandAmpersandToken */:
return 188 /* LogicalAndExpression */;
case 104 /* BarBarToken */:
return 187 /* LogicalOrExpression */;
case 116 /* BarEqualsToken */:
return 182 /* OrAssignmentExpression */;
case 115 /* AmpersandEqualsToken */:
return 180 /* AndAssignmentExpression */;
case 117 /* CaretEqualsToken */:
return 181 /* ExclusiveOrAssignmentExpression */;
case 112 /* LessThanLessThanEqualsToken */:
return 183 /* LeftShiftAssignmentExpression */;
case 113 /* GreaterThanGreaterThanEqualsToken */:
return 184 /* SignedRightShiftAssignmentExpression */;
case 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
return 185 /* UnsignedRightShiftAssignmentExpression */;
case 108 /* PlusEqualsToken */:
return 175 /* AddAssignmentExpression */;
case 109 /* MinusEqualsToken */:
return 176 /* SubtractAssignmentExpression */;
case 110 /* AsteriskEqualsToken */:
return 177 /* MultiplyAssignmentExpression */;
case 119 /* SlashEqualsToken */:
return 178 /* DivideAssignmentExpression */;
case 111 /* PercentEqualsToken */:
return 179 /* ModuloAssignmentExpression */;
case 107 /* EqualsToken */:
return 174 /* AssignmentExpression */;
case 79 /* CommaToken */:
return 173 /* CommaExpression */;
default:
return 0 /* None */;
}
}
SyntaxFacts.getBinaryExpressionFromOperatorToken = getBinaryExpressionFromOperatorToken;
function getOperatorTokenFromBinaryExpression(tokenKind) {
switch (tokenKind) {
case 205 /* MultiplyExpression */:
return 91 /* AsteriskToken */;
case 206 /* DivideExpression */:
return 118 /* SlashToken */;
case 207 /* ModuloExpression */:
return 92 /* PercentToken */;
case 208 /* AddExpression */:
return 89 /* PlusToken */;
case 209 /* SubtractExpression */:
return 90 /* MinusToken */;
case 202 /* LeftShiftExpression */:
return 95 /* LessThanLessThanToken */;
case 203 /* SignedRightShiftExpression */:
return 96 /* GreaterThanGreaterThanToken */;
case 204 /* UnsignedRightShiftExpression */:
return 97 /* GreaterThanGreaterThanGreaterThanToken */;
case 196 /* LessThanExpression */:
return 80 /* LessThanToken */;
case 197 /* GreaterThanExpression */:
return 81 /* GreaterThanToken */;
case 198 /* LessThanOrEqualExpression */:
return 82 /* LessThanEqualsToken */;
case 199 /* GreaterThanOrEqualExpression */:
return 83 /* GreaterThanEqualsToken */;
case 200 /* InstanceOfExpression */:
return 30 /* InstanceOfKeyword */;
case 201 /* InExpression */:
return 29 /* InKeyword */;
case 192 /* EqualsWithTypeConversionExpression */:
return 84 /* EqualsEqualsToken */;
case 193 /* NotEqualsWithTypeConversionExpression */:
return 86 /* ExclamationEqualsToken */;
case 194 /* EqualsExpression */:
return 87 /* EqualsEqualsEqualsToken */;
case 195 /* NotEqualsExpression */:
return 88 /* ExclamationEqualsEqualsToken */;
case 191 /* BitwiseAndExpression */:
return 98 /* AmpersandToken */;
case 190 /* BitwiseExclusiveOrExpression */:
return 100 /* CaretToken */;
case 189 /* BitwiseOrExpression */:
return 99 /* BarToken */;
case 188 /* LogicalAndExpression */:
return 103 /* AmpersandAmpersandToken */;
case 187 /* LogicalOrExpression */:
return 104 /* BarBarToken */;
case 182 /* OrAssignmentExpression */:
return 116 /* BarEqualsToken */;
case 180 /* AndAssignmentExpression */:
return 115 /* AmpersandEqualsToken */;
case 181 /* ExclusiveOrAssignmentExpression */:
return 117 /* CaretEqualsToken */;
case 183 /* LeftShiftAssignmentExpression */:
return 112 /* LessThanLessThanEqualsToken */;
case 184 /* SignedRightShiftAssignmentExpression */:
return 113 /* GreaterThanGreaterThanEqualsToken */;
case 185 /* UnsignedRightShiftAssignmentExpression */:
return 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */;
case 175 /* AddAssignmentExpression */:
return 108 /* PlusEqualsToken */;
case 176 /* SubtractAssignmentExpression */:
return 109 /* MinusEqualsToken */;
case 177 /* MultiplyAssignmentExpression */:
return 110 /* AsteriskEqualsToken */;
case 178 /* DivideAssignmentExpression */:
return 119 /* SlashEqualsToken */;
case 179 /* ModuloAssignmentExpression */:
return 111 /* PercentEqualsToken */;
case 174 /* AssignmentExpression */:
return 107 /* EqualsToken */;
case 173 /* CommaExpression */:
return 79 /* CommaToken */;
default:
return 0 /* None */;
}
}
SyntaxFacts.getOperatorTokenFromBinaryExpression = getOperatorTokenFromBinaryExpression;
function isAnyDivideToken(kind) {
switch (kind) {
case 118 /* SlashToken */:
case 119 /* SlashEqualsToken */:
return true;
default:
return false;
}
}
SyntaxFacts.isAnyDivideToken = isAnyDivideToken;
function isAnyDivideOrRegularExpressionToken(kind) {
switch (kind) {
case 118 /* SlashToken */:
case 119 /* SlashEqualsToken */:
case 12 /* RegularExpressionLiteral */:
return true;
default:
return false;
}
}
SyntaxFacts.isAnyDivideOrRegularExpressionToken = isAnyDivideOrRegularExpressionToken;
})(TypeScript.SyntaxFacts || (TypeScript.SyntaxFacts = {}));
var SyntaxFacts = TypeScript.SyntaxFacts;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var isKeywordStartCharacter = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, false);
var isIdentifierStartCharacter = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, false);
var isIdentifierPartCharacter = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, false);
var isNumericLiteralStart = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, false);
for (var character = 0; character < 127 /* maxAsciiCharacter */; character++) {
if (character >= 97 /* a */ && character <= 122 /* z */) {
isIdentifierStartCharacter[character] = true;
isIdentifierPartCharacter[character] = true;
} else if ((character >= 65 /* A */ && character <= 90 /* Z */) || character === 95 /* _ */ || character === 36 /* $ */) {
isIdentifierStartCharacter[character] = true;
isIdentifierPartCharacter[character] = true;
} else if (character >= 48 /* _0 */ && character <= 57 /* _9 */) {
isIdentifierPartCharacter[character] = true;
isNumericLiteralStart[character] = true;
}
}
isNumericLiteralStart[46 /* dot */] = true;
for (var keywordKind = 15 /* FirstKeyword */; keywordKind <= 69 /* LastKeyword */; keywordKind++) {
var keyword = TypeScript.SyntaxFacts.getText(keywordKind);
isKeywordStartCharacter[keyword.charCodeAt(0)] = true;
}
var Scanner = (function () {
function Scanner(fileName, text, languageVersion, window) {
if (typeof window === "undefined") { window = TypeScript.ArrayUtilities.createArray(2048, 0); }
this.slidingWindow = new TypeScript.SlidingWindow(this, window, 0, text.length());
this.fileName = fileName;
this.text = text;
this._languageVersion = languageVersion;
}
Scanner.prototype.languageVersion = function () {
return this._languageVersion;
};
Scanner.prototype.fetchMoreItems = function (argument, sourceIndex, window, destinationIndex, spaceAvailable) {
var charactersRemaining = this.text.length() - sourceIndex;
var amountToRead = TypeScript.MathPrototype.min(charactersRemaining, spaceAvailable);
this.text.copyTo(sourceIndex, window, destinationIndex, amountToRead);
return amountToRead;
};
Scanner.prototype.currentCharCode = function () {
return this.slidingWindow.currentItem(null);
};
Scanner.prototype.absoluteIndex = function () {
return this.slidingWindow.absoluteIndex();
};
Scanner.prototype.setAbsoluteIndex = function (index) {
this.slidingWindow.setAbsoluteIndex(index);
};
Scanner.prototype.scan = function (diagnostics, allowRegularExpression) {
var diagnosticsLength = diagnostics.length;
var fullStart = this.slidingWindow.absoluteIndex();
var leadingTriviaInfo = this.scanTriviaInfo(diagnostics, false);
var start = this.slidingWindow.absoluteIndex();
var kindAndFlags = this.scanSyntaxToken(diagnostics, allowRegularExpression);
var end = this.slidingWindow.absoluteIndex();
var trailingTriviaInfo = this.scanTriviaInfo(diagnostics, true);
var fullEnd = this.slidingWindow.absoluteIndex();
var isVariableWidthKeyword = (kindAndFlags & -2147483648 /* IsVariableWidthKeyword */) !== 0;
var kind = kindAndFlags & ~-2147483648 /* IsVariableWidthKeyword */;
var token = this.createToken(fullStart, leadingTriviaInfo, start, kind, end, fullEnd, trailingTriviaInfo, isVariableWidthKeyword);
return diagnosticsLength !== diagnostics.length ? TypeScript.Syntax.realizeToken(token) : token;
};
Scanner.prototype.createToken = function (fullStart, leadingTriviaInfo, start, kind, end, fullEnd, trailingTriviaInfo, isVariableWidthKeyword) {
if (!isVariableWidthKeyword && kind >= 15 /* FirstFixedWidth */) {
if (leadingTriviaInfo === 0) {
if (trailingTriviaInfo === 0) {
return new TypeScript.Syntax.FixedWidthTokenWithNoTrivia(kind);
} else {
var fullText = this.text.substr(fullStart, fullEnd - fullStart, false);
return new TypeScript.Syntax.FixedWidthTokenWithTrailingTrivia(fullText, kind, trailingTriviaInfo);
}
} else if (trailingTriviaInfo === 0) {
var fullText = this.text.substr(fullStart, fullEnd - fullStart, false);
return new TypeScript.Syntax.FixedWidthTokenWithLeadingTrivia(fullText, kind, leadingTriviaInfo);
} else {
var fullText = this.text.substr(fullStart, fullEnd - fullStart, false);
return new TypeScript.Syntax.FixedWidthTokenWithLeadingAndTrailingTrivia(fullText, kind, leadingTriviaInfo, trailingTriviaInfo);
}
} else {
var width = end - start;
var fullText = this.text.substr(fullStart, fullEnd - fullStart, false);
if (leadingTriviaInfo === 0) {
if (trailingTriviaInfo === 0) {
return new TypeScript.Syntax.VariableWidthTokenWithNoTrivia(fullText, kind);
} else {
return new TypeScript.Syntax.VariableWidthTokenWithTrailingTrivia(fullText, kind, trailingTriviaInfo);
}
} else if (trailingTriviaInfo === 0) {
return new TypeScript.Syntax.VariableWidthTokenWithLeadingTrivia(fullText, kind, leadingTriviaInfo);
} else {
return new TypeScript.Syntax.VariableWidthTokenWithLeadingAndTrailingTrivia(fullText, kind, leadingTriviaInfo, trailingTriviaInfo);
}
}
};
Scanner.scanTrivia = function (text, start, length, isTrailing) {
var scanner = new Scanner(null, text.subText(new TypeScript.TextSpan(start, length)), 1 /* EcmaScript5 */, Scanner.triviaWindow);
return scanner.scanTrivia(text, start, isTrailing);
};
Scanner.prototype.scanTrivia = function (underlyingText, underlyingTextStart, isTrailing) {
var trivia = new Array();
while (true) {
if (!this.slidingWindow.isAtEndOfSource()) {
var ch = this.currentCharCode();
switch (ch) {
case 32 /* space */:
case 160 /* nonBreakingSpace */:
case 8192 /* enQuad */:
case 8193 /* emQuad */:
case 8194 /* enSpace */:
case 8195 /* emSpace */:
case 8196 /* threePerEmSpace */:
case 8197 /* fourPerEmSpace */:
case 8198 /* sixPerEmSpace */:
case 8199 /* figureSpace */:
case 8200 /* punctuationSpace */:
case 8201 /* thinSpace */:
case 8202 /* hairSpace */:
case 8203 /* zeroWidthSpace */:
case 8239 /* narrowNoBreakSpace */:
case 12288 /* ideographicSpace */:
case 9 /* tab */:
case 11 /* verticalTab */:
case 12 /* formFeed */:
case 65279 /* byteOrderMark */:
trivia.push(this.scanWhitespaceTrivia(underlyingText, underlyingTextStart));
continue;
case 47 /* slash */:
var ch2 = this.slidingWindow.peekItemN(1);
if (ch2 === 47 /* slash */) {
trivia.push(this.scanSingleLineCommentTrivia(underlyingText, underlyingTextStart));
continue;
}
if (ch2 === 42 /* asterisk */) {
trivia.push(this.scanMultiLineCommentTrivia(underlyingText, underlyingTextStart));
continue;
}
throw TypeScript.Errors.invalidOperation();
case 13 /* carriageReturn */:
case 10 /* lineFeed */:
case 8233 /* paragraphSeparator */:
case 8232 /* lineSeparator */:
trivia.push(this.scanLineTerminatorSequenceTrivia(ch));
if (!isTrailing) {
continue;
}
break;
default:
throw TypeScript.Errors.invalidOperation();
}
}
return TypeScript.Syntax.triviaList(trivia);
}
};
Scanner.prototype.scanTriviaInfo = function (diagnostics, isTrailing) {
var width = 0;
var hasCommentOrNewLine = 0;
while (true) {
var ch = this.currentCharCode();
switch (ch) {
case 32 /* space */:
case 160 /* nonBreakingSpace */:
case 8192 /* enQuad */:
case 8193 /* emQuad */:
case 8194 /* enSpace */:
case 8195 /* emSpace */:
case 8196 /* threePerEmSpace */:
case 8197 /* fourPerEmSpace */:
case 8198 /* sixPerEmSpace */:
case 8199 /* figureSpace */:
case 8200 /* punctuationSpace */:
case 8201 /* thinSpace */:
case 8202 /* hairSpace */:
case 8203 /* zeroWidthSpace */:
case 8239 /* narrowNoBreakSpace */:
case 12288 /* ideographicSpace */:
case 9 /* tab */:
case 11 /* verticalTab */:
case 12 /* formFeed */:
case 65279 /* byteOrderMark */:
this.slidingWindow.moveToNextItem();
width++;
continue;
case 47 /* slash */:
var ch2 = this.slidingWindow.peekItemN(1);
if (ch2 === 47 /* slash */) {
hasCommentOrNewLine |= 2 /* TriviaCommentMask */;
width += this.scanSingleLineCommentTriviaLength();
continue;
}
if (ch2 === 42 /* asterisk */) {
hasCommentOrNewLine |= 2 /* TriviaCommentMask */;
width += this.scanMultiLineCommentTriviaLength(diagnostics);
continue;
}
break;
case 13 /* carriageReturn */:
case 10 /* lineFeed */:
case 8233 /* paragraphSeparator */:
case 8232 /* lineSeparator */:
hasCommentOrNewLine |= 1 /* TriviaNewLineMask */;
width += this.scanLineTerminatorSequenceLength(ch);
if (!isTrailing) {
continue;
}
break;
}
return (width << 2 /* TriviaFullWidthShift */) | hasCommentOrNewLine;
}
};
Scanner.prototype.isNewLineCharacter = function (ch) {
switch (ch) {
case 13 /* carriageReturn */:
case 10 /* lineFeed */:
case 8233 /* paragraphSeparator */:
case 8232 /* lineSeparator */:
return true;
default:
return false;
}
};
Scanner.prototype.scanWhitespaceTrivia = function (underlyingText, underlyingTextStart) {
var absoluteStartIndex = this.absoluteIndex();
var width = 0;
while (true) {
var ch = this.currentCharCode();
switch (ch) {
case 32 /* space */:
case 160 /* nonBreakingSpace */:
case 8192 /* enQuad */:
case 8193 /* emQuad */:
case 8194 /* enSpace */:
case 8195 /* emSpace */:
case 8196 /* threePerEmSpace */:
case 8197 /* fourPerEmSpace */:
case 8198 /* sixPerEmSpace */:
case 8199 /* figureSpace */:
case 8200 /* punctuationSpace */:
case 8201 /* thinSpace */:
case 8202 /* hairSpace */:
case 8203 /* zeroWidthSpace */:
case 8239 /* narrowNoBreakSpace */:
case 12288 /* ideographicSpace */:
case 9 /* tab */:
case 11 /* verticalTab */:
case 12 /* formFeed */:
case 65279 /* byteOrderMark */:
this.slidingWindow.moveToNextItem();
width++;
continue;
}
break;
}
return TypeScript.Syntax.deferredTrivia(4 /* WhitespaceTrivia */, underlyingText, underlyingTextStart + absoluteStartIndex, width);
};
Scanner.prototype.scanSingleLineCommentTrivia = function (underlyingText, underlyingTextStart) {
var absoluteStartIndex = this.slidingWindow.absoluteIndex();
var width = this.scanSingleLineCommentTriviaLength();
return TypeScript.Syntax.deferredTrivia(7 /* SingleLineCommentTrivia */, underlyingText, underlyingTextStart + absoluteStartIndex, width);
};
Scanner.prototype.scanSingleLineCommentTriviaLength = function () {
this.slidingWindow.moveToNextItem();
this.slidingWindow.moveToNextItem();
var width = 2;
while (true) {
if (this.slidingWindow.isAtEndOfSource() || this.isNewLineCharacter(this.currentCharCode())) {
return width;
}
this.slidingWindow.moveToNextItem();
width++;
}
};
Scanner.prototype.scanMultiLineCommentTrivia = function (underlyingText, underlyingTextStart) {
var absoluteStartIndex = this.absoluteIndex();
var width = this.scanMultiLineCommentTriviaLength(null);
return TypeScript.Syntax.deferredTrivia(6 /* MultiLineCommentTrivia */, underlyingText, underlyingTextStart + absoluteStartIndex, width);
};
Scanner.prototype.scanMultiLineCommentTriviaLength = function (diagnostics) {
this.slidingWindow.moveToNextItem();
this.slidingWindow.moveToNextItem();
var width = 2;
while (true) {
if (this.slidingWindow.isAtEndOfSource()) {
if (diagnostics !== null) {
diagnostics.push(new TypeScript.Diagnostic(this.fileName, this.text.lineMap(), this.slidingWindow.absoluteIndex(), 0, TypeScript.DiagnosticCode.AsteriskSlash_expected, null));
}
return width;
}
var ch = this.currentCharCode();
if (ch === 42 /* asterisk */ && this.slidingWindow.peekItemN(1) === 47 /* slash */) {
this.slidingWindow.moveToNextItem();
this.slidingWindow.moveToNextItem();
width += 2;
return width;
}
this.slidingWindow.moveToNextItem();
width++;
}
};
Scanner.prototype.scanLineTerminatorSequenceTrivia = function (ch) {
var absoluteStartIndex = this.slidingWindow.getAndPinAbsoluteIndex();
var width = this.scanLineTerminatorSequenceLength(ch);
var text = this.substring(absoluteStartIndex, absoluteStartIndex + width, false);
this.slidingWindow.releaseAndUnpinAbsoluteIndex(absoluteStartIndex);
return TypeScript.Syntax.trivia(5 /* NewLineTrivia */, text);
};
Scanner.prototype.scanLineTerminatorSequenceLength = function (ch) {
this.slidingWindow.moveToNextItem();
if (ch === 13 /* carriageReturn */ && this.currentCharCode() === 10 /* lineFeed */) {
this.slidingWindow.moveToNextItem();
return 2;
} else {
return 1;
}
};
Scanner.prototype.scanSyntaxToken = function (diagnostics, allowRegularExpression) {
if (this.slidingWindow.isAtEndOfSource()) {
return 10 /* EndOfFileToken */;
}
var character = this.currentCharCode();
switch (character) {
case 34 /* doubleQuote */:
case 39 /* singleQuote */:
return this.scanStringLiteral(diagnostics);
case 47 /* slash */:
return this.scanSlashToken(allowRegularExpression);
case 46 /* dot */:
return this.scanDotToken(diagnostics);
case 45 /* minus */:
return this.scanMinusToken();
case 33 /* exclamation */:
return this.scanExclamationToken();
case 61 /* equals */:
return this.scanEqualsToken();
case 124 /* bar */:
return this.scanBarToken();
case 42 /* asterisk */:
return this.scanAsteriskToken();
case 43 /* plus */:
return this.scanPlusToken();
case 37 /* percent */:
return this.scanPercentToken();
case 38 /* ampersand */:
return this.scanAmpersandToken();
case 94 /* caret */:
return this.scanCaretToken();
case 60 /* lessThan */:
return this.scanLessThanToken();
case 62 /* greaterThan */:
return this.advanceAndSetTokenKind(81 /* GreaterThanToken */);
case 44 /* comma */:
return this.advanceAndSetTokenKind(79 /* CommaToken */);
case 58 /* colon */:
return this.advanceAndSetTokenKind(106 /* ColonToken */);
case 59 /* semicolon */:
return this.advanceAndSetTokenKind(78 /* SemicolonToken */);
case 126 /* tilde */:
return this.advanceAndSetTokenKind(102 /* TildeToken */);
case 40 /* openParen */:
return this.advanceAndSetTokenKind(72 /* OpenParenToken */);
case 41 /* closeParen */:
return this.advanceAndSetTokenKind(73 /* CloseParenToken */);
case 123 /* openBrace */:
return this.advanceAndSetTokenKind(70 /* OpenBraceToken */);
case 125 /* closeBrace */:
return this.advanceAndSetTokenKind(71 /* CloseBraceToken */);
case 91 /* openBracket */:
return this.advanceAndSetTokenKind(74 /* OpenBracketToken */);
case 93 /* closeBracket */:
return this.advanceAndSetTokenKind(75 /* CloseBracketToken */);
case 63 /* question */:
return this.advanceAndSetTokenKind(105 /* QuestionToken */);
}
if (isNumericLiteralStart[character]) {
return this.scanNumericLiteral(diagnostics);
}
if (isIdentifierStartCharacter[character]) {
var result = this.tryFastScanIdentifierOrKeyword(character);
if (result !== 0 /* None */) {
return result;
}
}
if (this.isIdentifierStart(this.peekCharOrUnicodeEscape())) {
return this.slowScanIdentifierOrKeyword(diagnostics);
}
return this.scanDefaultCharacter(character, diagnostics);
};
Scanner.prototype.isIdentifierStart = function (interpretedChar) {
if (isIdentifierStartCharacter[interpretedChar]) {
return true;
}
return interpretedChar > 127 /* maxAsciiCharacter */ && TypeScript.Unicode.isIdentifierStart(interpretedChar, this._languageVersion);
};
Scanner.prototype.isIdentifierPart = function (interpretedChar) {
if (isIdentifierPartCharacter[interpretedChar]) {
return true;
}
return interpretedChar > 127 /* maxAsciiCharacter */ && TypeScript.Unicode.isIdentifierPart(interpretedChar, this._languageVersion);
};
Scanner.prototype.tryFastScanIdentifierOrKeyword = function (firstCharacter) {
var slidingWindow = this.slidingWindow;
var window = slidingWindow.window;
var startIndex = slidingWindow.currentRelativeItemIndex;
var endIndex = slidingWindow.windowCount;
var currentIndex = startIndex;
var character = 0;
while (currentIndex < endIndex) {
character = window[currentIndex];
if (!isIdentifierPartCharacter[character]) {
break;
}
currentIndex++;
}
if (currentIndex === endIndex) {
return 0 /* None */;
} else if (character === 92 /* backslash */ || character > 127 /* maxAsciiCharacter */) {
return 0 /* None */;
} else {
var kind;
var identifierLength = currentIndex - startIndex;
if (isKeywordStartCharacter[firstCharacter]) {
kind = TypeScript.ScannerUtilities.identifierKind(window, startIndex, identifierLength);
} else {
kind = 11 /* IdentifierName */;
}
slidingWindow.setAbsoluteIndex(slidingWindow.absoluteIndex() + identifierLength);
return kind;
}
};
Scanner.prototype.slowScanIdentifierOrKeyword = function (diagnostics) {
var startIndex = this.slidingWindow.absoluteIndex();
var sawUnicodeEscape = false;
do {
var unicodeEscape = this.scanCharOrUnicodeEscape(diagnostics);
sawUnicodeEscape = sawUnicodeEscape || unicodeEscape;
} while(this.isIdentifierPart(this.peekCharOrUnicodeEscape()));
var length = this.slidingWindow.absoluteIndex() - startIndex;
var text = this.text.substr(startIndex, length, false);
var valueText = TypeScript.Syntax.massageEscapes(text);
var keywordKind = TypeScript.SyntaxFacts.getTokenKind(valueText);
if (keywordKind >= 15 /* FirstKeyword */ && keywordKind <= 69 /* LastKeyword */) {
if (sawUnicodeEscape) {
return keywordKind | -2147483648 /* IsVariableWidthKeyword */;
} else {
return keywordKind;
}
}
return 11 /* IdentifierName */;
};
Scanner.prototype.scanNumericLiteral = function (diagnostics) {
if (this.isHexNumericLiteral()) {
this.scanHexNumericLiteral();
} else if (this.isOctalNumericLiteral()) {
this.scanOctalNumericLiteral(diagnostics);
} else {
this.scanDecimalNumericLiteral();
}
return 13 /* NumericLiteral */;
};
Scanner.prototype.isOctalNumericLiteral = function () {
return this.currentCharCode() === 48 /* _0 */ && TypeScript.CharacterInfo.isOctalDigit(this.slidingWindow.peekItemN(1));
};
Scanner.prototype.scanOctalNumericLiteral = function (diagnostics) {
var position = this.absoluteIndex();
while (TypeScript.CharacterInfo.isOctalDigit(this.currentCharCode())) {
this.slidingWindow.moveToNextItem();
}
if (this.languageVersion() >= 1 /* EcmaScript5 */) {
diagnostics.push(new TypeScript.Diagnostic(this.fileName, this.text.lineMap(), position, this.absoluteIndex() - position, TypeScript.DiagnosticCode.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher, null));
}
};
Scanner.prototype.scanDecimalDigits = function () {
while (TypeScript.CharacterInfo.isDecimalDigit(this.currentCharCode())) {
this.slidingWindow.moveToNextItem();
}
};
Scanner.prototype.scanDecimalNumericLiteral = function () {
this.scanDecimalDigits();
if (this.currentCharCode() === 46 /* dot */) {
this.slidingWindow.moveToNextItem();
}
this.scanDecimalDigits();
var ch = this.currentCharCode();
if (ch === 101 /* e */ || ch === 69 /* E */) {
var nextChar1 = this.slidingWindow.peekItemN(1);
if (TypeScript.CharacterInfo.isDecimalDigit(nextChar1)) {
this.slidingWindow.moveToNextItem();
this.scanDecimalDigits();
} else if (nextChar1 === 45 /* minus */ || nextChar1 === 43 /* plus */) {
var nextChar2 = this.slidingWindow.peekItemN(2);
if (TypeScript.CharacterInfo.isDecimalDigit(nextChar2)) {
this.slidingWindow.moveToNextItem();
this.slidingWindow.moveToNextItem();
this.scanDecimalDigits();
}
}
}
};
Scanner.prototype.scanHexNumericLiteral = function () {
this.slidingWindow.moveToNextItem();
this.slidingWindow.moveToNextItem();
while (TypeScript.CharacterInfo.isHexDigit(this.currentCharCode())) {
this.slidingWindow.moveToNextItem();
}
};
Scanner.prototype.isHexNumericLiteral = function () {
if (this.currentCharCode() === 48 /* _0 */) {
var ch = this.slidingWindow.peekItemN(1);
if (ch === 120 /* x */ || ch === 88 /* X */) {
ch = this.slidingWindow.peekItemN(2);
return TypeScript.CharacterInfo.isHexDigit(ch);
}
}
return false;
};
Scanner.prototype.advanceAndSetTokenKind = function (kind) {
this.slidingWindow.moveToNextItem();
return kind;
};
Scanner.prototype.scanLessThanToken = function () {
this.slidingWindow.moveToNextItem();
if (this.currentCharCode() === 61 /* equals */) {
this.slidingWindow.moveToNextItem();
return 82 /* LessThanEqualsToken */;
} else if (this.currentCharCode() === 60 /* lessThan */) {
this.slidingWindow.moveToNextItem();
if (this.currentCharCode() === 61 /* equals */) {
this.slidingWindow.moveToNextItem();
return 112 /* LessThanLessThanEqualsToken */;
} else {
return 95 /* LessThanLessThanToken */;
}
} else {
return 80 /* LessThanToken */;
}
};
Scanner.prototype.scanBarToken = function () {
this.slidingWindow.moveToNextItem();
if (this.currentCharCode() === 61 /* equals */) {
this.slidingWindow.moveToNextItem();
return 116 /* BarEqualsToken */;
} else if (this.currentCharCode() === 124 /* bar */) {
this.slidingWindow.moveToNextItem();
return 104 /* BarBarToken */;
} else {
return 99 /* BarToken */;
}
};
Scanner.prototype.scanCaretToken = function () {
this.slidingWindow.moveToNextItem();
if (this.currentCharCode() === 61 /* equals */) {
this.slidingWindow.moveToNextItem();
return 117 /* CaretEqualsToken */;
} else {
return 100 /* CaretToken */;
}
};
Scanner.prototype.scanAmpersandToken = function () {
this.slidingWindow.moveToNextItem();
var character = this.currentCharCode();
if (character === 61 /* equals */) {
this.slidingWindow.moveToNextItem();
return 115 /* AmpersandEqualsToken */;
} else if (this.currentCharCode() === 38 /* ampersand */) {
this.slidingWindow.moveToNextItem();
return 103 /* AmpersandAmpersandToken */;
} else {
return 98 /* AmpersandToken */;
}
};
Scanner.prototype.scanPercentToken = function () {
this.slidingWindow.moveToNextItem();
if (this.currentCharCode() === 61 /* equals */) {
this.slidingWindow.moveToNextItem();
return 111 /* PercentEqualsToken */;
} else {
return 92 /* PercentToken */;
}
};
Scanner.prototype.scanMinusToken = function () {
this.slidingWindow.moveToNextItem();
var character = this.currentCharCode();
if (character === 61 /* equals */) {
this.slidingWindow.moveToNextItem();
return 109 /* MinusEqualsToken */;
} else if (character === 45 /* minus */) {
this.slidingWindow.moveToNextItem();
return 94 /* MinusMinusToken */;
} else {
return 90 /* MinusToken */;
}
};
Scanner.prototype.scanPlusToken = function () {
this.slidingWindow.moveToNextItem();
var character = this.currentCharCode();
if (character === 61 /* equals */) {
this.slidingWindow.moveToNextItem();
return 108 /* PlusEqualsToken */;
} else if (character === 43 /* plus */) {
this.slidingWindow.moveToNextItem();
return 93 /* PlusPlusToken */;
} else {
return 89 /* PlusToken */;
}
};
Scanner.prototype.scanAsteriskToken = function () {
this.slidingWindow.moveToNextItem();
if (this.currentCharCode() === 61 /* equals */) {
this.slidingWindow.moveToNextItem();
return 110 /* AsteriskEqualsToken */;
} else {
return 91 /* AsteriskToken */;
}
};
Scanner.prototype.scanEqualsToken = function () {
this.slidingWindow.moveToNextItem();
var character = this.currentCharCode();
if (character === 61 /* equals */) {
this.slidingWindow.moveToNextItem();
if (this.currentCharCode() === 61 /* equals */) {
this.slidingWindow.moveToNextItem();
return 87 /* EqualsEqualsEqualsToken */;
} else {
return 84 /* EqualsEqualsToken */;
}
} else if (character === 62 /* greaterThan */) {
this.slidingWindow.moveToNextItem();
return 85 /* EqualsGreaterThanToken */;
} else {
return 107 /* EqualsToken */;
}
};
Scanner.prototype.isDotPrefixedNumericLiteral = function () {
if (this.currentCharCode() === 46 /* dot */) {
var ch = this.slidingWindow.peekItemN(1);
return TypeScript.CharacterInfo.isDecimalDigit(ch);
}
return false;
};
Scanner.prototype.scanDotToken = function (diagnostics) {
if (this.isDotPrefixedNumericLiteral()) {
return this.scanNumericLiteral(diagnostics);
}
this.slidingWindow.moveToNextItem();
if (this.currentCharCode() === 46 /* dot */ && this.slidingWindow.peekItemN(1) === 46 /* dot */) {
this.slidingWindow.moveToNextItem();
this.slidingWindow.moveToNextItem();
return 77 /* DotDotDotToken */;
} else {
return 76 /* DotToken */;
}
};
Scanner.prototype.scanSlashToken = function (allowRegularExpression) {
if (allowRegularExpression) {
var result = this.tryScanRegularExpressionToken();
if (result !== 0 /* None */) {
return result;
}
}
this.slidingWindow.moveToNextItem();
if (this.currentCharCode() === 61 /* equals */) {
this.slidingWindow.moveToNextItem();
return 119 /* SlashEqualsToken */;
} else {
return 118 /* SlashToken */;
}
};
Scanner.prototype.tryScanRegularExpressionToken = function () {
var startIndex = this.slidingWindow.getAndPinAbsoluteIndex();
this.slidingWindow.moveToNextItem();
var inEscape = false;
var inCharacterClass = false;
while (true) {
var ch = this.currentCharCode();
if (this.isNewLineCharacter(ch) || this.slidingWindow.isAtEndOfSource()) {
this.slidingWindow.rewindToPinnedIndex(startIndex);
this.slidingWindow.releaseAndUnpinAbsoluteIndex(startIndex);
return 0 /* None */;
}
this.slidingWindow.moveToNextItem();
if (inEscape) {
inEscape = false;
continue;
}
switch (ch) {
case 92 /* backslash */:
inEscape = true;
continue;
case 91 /* openBracket */:
inCharacterClass = true;
continue;
case 93 /* closeBracket */:
inCharacterClass = false;
continue;
case 47 /* slash */:
if (inCharacterClass) {
continue;
}
break;
default:
continue;
}
break;
}
while (isIdentifierPartCharacter[this.currentCharCode()]) {
this.slidingWindow.moveToNextItem();
}
this.slidingWindow.releaseAndUnpinAbsoluteIndex(startIndex);
return 12 /* RegularExpressionLiteral */;
};
Scanner.prototype.scanExclamationToken = function () {
this.slidingWindow.moveToNextItem();
if (this.currentCharCode() === 61 /* equals */) {
this.slidingWindow.moveToNextItem();
if (this.currentCharCode() === 61 /* equals */) {
this.slidingWindow.moveToNextItem();
return 88 /* ExclamationEqualsEqualsToken */;
} else {
return 86 /* ExclamationEqualsToken */;
}
} else {
return 101 /* ExclamationToken */;
}
};
Scanner.prototype.scanDefaultCharacter = function (character, diagnostics) {
var position = this.slidingWindow.absoluteIndex();
this.slidingWindow.moveToNextItem();
var text = String.fromCharCode(character);
var messageText = this.getErrorMessageText(text);
diagnostics.push(new TypeScript.Diagnostic(this.fileName, this.text.lineMap(), position, 1, TypeScript.DiagnosticCode.Unexpected_character_0, [messageText]));
return 9 /* ErrorToken */;
};
Scanner.prototype.getErrorMessageText = function (text) {
if (text === "\\") {
return '"\\"';
}
return JSON.stringify(text);
};
Scanner.prototype.skipEscapeSequence = function (diagnostics) {
var rewindPoint = this.slidingWindow.getAndPinAbsoluteIndex();
this.slidingWindow.moveToNextItem();
var ch = this.currentCharCode();
this.slidingWindow.moveToNextItem();
switch (ch) {
case 120 /* x */:
case 117 /* u */:
this.slidingWindow.rewindToPinnedIndex(rewindPoint);
var value = this.scanUnicodeOrHexEscape(diagnostics);
break;
case 13 /* carriageReturn */:
if (this.currentCharCode() === 10 /* lineFeed */) {
this.slidingWindow.moveToNextItem();
}
break;
default:
break;
}
this.slidingWindow.releaseAndUnpinAbsoluteIndex(rewindPoint);
};
Scanner.prototype.scanStringLiteral = function (diagnostics) {
var quoteCharacter = this.currentCharCode();
this.slidingWindow.moveToNextItem();
while (true) {
var ch = this.currentCharCode();
if (ch === 92 /* backslash */) {
this.skipEscapeSequence(diagnostics);
} else if (ch === quoteCharacter) {
this.slidingWindow.moveToNextItem();
break;
} else if (this.isNewLineCharacter(ch) || this.slidingWindow.isAtEndOfSource()) {
diagnostics.push(new TypeScript.Diagnostic(this.fileName, this.text.lineMap(), TypeScript.MathPrototype.min(this.slidingWindow.absoluteIndex(), this.text.length()), 1, TypeScript.DiagnosticCode.Missing_close_quote_character, null));
break;
} else {
this.slidingWindow.moveToNextItem();
}
}
return 14 /* StringLiteral */;
};
Scanner.prototype.isUnicodeEscape = function (character) {
if (character === 92 /* backslash */) {
var ch2 = this.slidingWindow.peekItemN(1);
if (ch2 === 117 /* u */) {
return true;
}
}
return false;
};
Scanner.prototype.peekCharOrUnicodeEscape = function () {
var character = this.currentCharCode();
if (this.isUnicodeEscape(character)) {
return this.peekUnicodeOrHexEscape();
} else {
return character;
}
};
Scanner.prototype.peekUnicodeOrHexEscape = function () {
var startIndex = this.slidingWindow.getAndPinAbsoluteIndex();
var ch = this.scanUnicodeOrHexEscape(null);
this.slidingWindow.rewindToPinnedIndex(startIndex);
this.slidingWindow.releaseAndUnpinAbsoluteIndex(startIndex);
return ch;
};
Scanner.prototype.scanCharOrUnicodeEscape = function (errors) {
var ch = this.currentCharCode();
if (ch === 92 /* backslash */) {
var ch2 = this.slidingWindow.peekItemN(1);
if (ch2 === 117 /* u */) {
this.scanUnicodeOrHexEscape(errors);
return true;
}
}
this.slidingWindow.moveToNextItem();
return false;
};
Scanner.prototype.scanUnicodeOrHexEscape = function (errors) {
var start = this.slidingWindow.absoluteIndex();
var character = this.currentCharCode();
this.slidingWindow.moveToNextItem();
character = this.currentCharCode();
var intChar = 0;
this.slidingWindow.moveToNextItem();
var count = character === 117 /* u */ ? 4 : 2;
for (var i = 0; i < count; i++) {
var ch2 = this.currentCharCode();
if (!TypeScript.CharacterInfo.isHexDigit(ch2)) {
if (errors !== null) {
var end = this.slidingWindow.absoluteIndex();
var info = this.createIllegalEscapeDiagnostic(start, end);
errors.push(info);
}
break;
}
intChar = (intChar << 4) + TypeScript.CharacterInfo.hexValue(ch2);
this.slidingWindow.moveToNextItem();
}
return intChar;
};
Scanner.prototype.substring = function (start, end, intern) {
var length = end - start;
var offset = start - this.slidingWindow.windowAbsoluteStartIndex;
if (intern) {
return TypeScript.Collections.DefaultStringTable.addCharArray(this.slidingWindow.window, offset, length);
} else {
return TypeScript.StringUtilities.fromCharCodeArray(this.slidingWindow.window.slice(offset, offset + length));
}
};
Scanner.prototype.createIllegalEscapeDiagnostic = function (start, end) {
return new TypeScript.Diagnostic(this.fileName, this.text.lineMap(), start, end - start, TypeScript.DiagnosticCode.Unrecognized_escape_sequence, null);
};
Scanner.isValidIdentifier = function (text, languageVersion) {
var scanner = new Scanner(null, text, languageVersion, Scanner.triviaWindow);
var errors = new Array();
var token = scanner.scan(errors, false);
return errors.length === 0 && TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token) && token.width() === text.length();
};
Scanner.triviaWindow = TypeScript.ArrayUtilities.createArray(2048, 0);
return Scanner;
})();
TypeScript.Scanner = Scanner;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var ScannerUtilities = (function () {
function ScannerUtilities() {
}
ScannerUtilities.identifierKind = function (array, startIndex, length) {
switch (length) {
case 2:
switch (array[startIndex]) {
case 100 /* d */:
return (array[startIndex + 1] === 111 /* o */) ? 22 /* DoKeyword */ : 11 /* IdentifierName */;
case 105 /* i */:
switch (array[startIndex + 1]) {
case 102 /* f */:
return 28 /* IfKeyword */;
case 110 /* n */:
return 29 /* InKeyword */;
default:
return 11 /* IdentifierName */;
}
default:
return 11 /* IdentifierName */;
}
case 3:
switch (array[startIndex]) {
case 102 /* f */:
return (array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 114 /* r */) ? 26 /* ForKeyword */ : 11 /* IdentifierName */;
case 110 /* n */:
return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 119 /* w */) ? 31 /* NewKeyword */ : 11 /* IdentifierName */;
case 116 /* t */:
return (array[startIndex + 1] === 114 /* r */ && array[startIndex + 2] === 121 /* y */) ? 38 /* TryKeyword */ : 11 /* IdentifierName */;
case 118 /* v */:
return (array[startIndex + 1] === 97 /* a */ && array[startIndex + 2] === 114 /* r */) ? 40 /* VarKeyword */ : 11 /* IdentifierName */;
case 108 /* l */:
return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 116 /* t */) ? 53 /* LetKeyword */ : 11 /* IdentifierName */;
case 97 /* a */:
return (array[startIndex + 1] === 110 /* n */ && array[startIndex + 2] === 121 /* y */) ? 60 /* AnyKeyword */ : 11 /* IdentifierName */;
case 103 /* g */:
return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 116 /* t */) ? 64 /* GetKeyword */ : 11 /* IdentifierName */;
case 115 /* s */:
return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 116 /* t */) ? 68 /* SetKeyword */ : 11 /* IdentifierName */;
default:
return 11 /* IdentifierName */;
}
case 4:
switch (array[startIndex]) {
case 99 /* c */:
return (array[startIndex + 1] === 97 /* a */ && array[startIndex + 2] === 115 /* s */ && array[startIndex + 3] === 101 /* e */) ? 16 /* CaseKeyword */ : 11 /* IdentifierName */;
case 101 /* e */:
switch (array[startIndex + 1]) {
case 108 /* l */:
return (array[startIndex + 2] === 115 /* s */ && array[startIndex + 3] === 101 /* e */) ? 23 /* ElseKeyword */ : 11 /* IdentifierName */;
case 110 /* n */:
return (array[startIndex + 2] === 117 /* u */ && array[startIndex + 3] === 109 /* m */) ? 46 /* EnumKeyword */ : 11 /* IdentifierName */;
default:
return 11 /* IdentifierName */;
}
case 110 /* n */:
return (array[startIndex + 1] === 117 /* u */ && array[startIndex + 2] === 108 /* l */ && array[startIndex + 3] === 108 /* l */) ? 32 /* NullKeyword */ : 11 /* IdentifierName */;
case 116 /* t */:
switch (array[startIndex + 1]) {
case 104 /* h */:
return (array[startIndex + 2] === 105 /* i */ && array[startIndex + 3] === 115 /* s */) ? 35 /* ThisKeyword */ : 11 /* IdentifierName */;
case 114 /* r */:
return (array[startIndex + 2] === 117 /* u */ && array[startIndex + 3] === 101 /* e */) ? 37 /* TrueKeyword */ : 11 /* IdentifierName */;
default:
return 11 /* IdentifierName */;
}
case 118 /* v */:
return (array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 105 /* i */ && array[startIndex + 3] === 100 /* d */) ? 41 /* VoidKeyword */ : 11 /* IdentifierName */;
case 119 /* w */:
return (array[startIndex + 1] === 105 /* i */ && array[startIndex + 2] === 116 /* t */ && array[startIndex + 3] === 104 /* h */) ? 43 /* WithKeyword */ : 11 /* IdentifierName */;
default:
return 11 /* IdentifierName */;
}
case 5:
switch (array[startIndex]) {
case 98 /* b */:
return (array[startIndex + 1] === 114 /* r */ && array[startIndex + 2] === 101 /* e */ && array[startIndex + 3] === 97 /* a */ && array[startIndex + 4] === 107 /* k */) ? 15 /* BreakKeyword */ : 11 /* IdentifierName */;
case 99 /* c */:
switch (array[startIndex + 1]) {
case 97 /* a */:
return (array[startIndex + 2] === 116 /* t */ && array[startIndex + 3] === 99 /* c */ && array[startIndex + 4] === 104 /* h */) ? 17 /* CatchKeyword */ : 11 /* IdentifierName */;
case 108 /* l */:
return (array[startIndex + 2] === 97 /* a */ && array[startIndex + 3] === 115 /* s */ && array[startIndex + 4] === 115 /* s */) ? 44 /* ClassKeyword */ : 11 /* IdentifierName */;
case 111 /* o */:
return (array[startIndex + 2] === 110 /* n */ && array[startIndex + 3] === 115 /* s */ && array[startIndex + 4] === 116 /* t */) ? 45 /* ConstKeyword */ : 11 /* IdentifierName */;
default:
return 11 /* IdentifierName */;
}
case 102 /* f */:
return (array[startIndex + 1] === 97 /* a */ && array[startIndex + 2] === 108 /* l */ && array[startIndex + 3] === 115 /* s */ && array[startIndex + 4] === 101 /* e */) ? 24 /* FalseKeyword */ : 11 /* IdentifierName */;
case 116 /* t */:
return (array[startIndex + 1] === 104 /* h */ && array[startIndex + 2] === 114 /* r */ && array[startIndex + 3] === 111 /* o */ && array[startIndex + 4] === 119 /* w */) ? 36 /* ThrowKeyword */ : 11 /* IdentifierName */;
case 119 /* w */:
return (array[startIndex + 1] === 104 /* h */ && array[startIndex + 2] === 105 /* i */ && array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 101 /* e */) ? 42 /* WhileKeyword */ : 11 /* IdentifierName */;
case 115 /* s */:
return (array[startIndex + 1] === 117 /* u */ && array[startIndex + 2] === 112 /* p */ && array[startIndex + 3] === 101 /* e */ && array[startIndex + 4] === 114 /* r */) ? 50 /* SuperKeyword */ : 11 /* IdentifierName */;
case 121 /* y */:
return (array[startIndex + 1] === 105 /* i */ && array[startIndex + 2] === 101 /* e */ && array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 100 /* d */) ? 59 /* YieldKeyword */ : 11 /* IdentifierName */;
default:
return 11 /* IdentifierName */;
}
case 6:
switch (array[startIndex]) {
case 100 /* d */:
return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 108 /* l */ && array[startIndex + 3] === 101 /* e */ && array[startIndex + 4] === 116 /* t */ && array[startIndex + 5] === 101 /* e */) ? 21 /* DeleteKeyword */ : 11 /* IdentifierName */;
case 114 /* r */:
return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 116 /* t */ && array[startIndex + 3] === 117 /* u */ && array[startIndex + 4] === 114 /* r */ && array[startIndex + 5] === 110 /* n */) ? 33 /* ReturnKeyword */ : 11 /* IdentifierName */;
case 115 /* s */:
switch (array[startIndex + 1]) {
case 119 /* w */:
return (array[startIndex + 2] === 105 /* i */ && array[startIndex + 3] === 116 /* t */ && array[startIndex + 4] === 99 /* c */ && array[startIndex + 5] === 104 /* h */) ? 34 /* SwitchKeyword */ : 11 /* IdentifierName */;
case 116 /* t */:
switch (array[startIndex + 2]) {
case 97 /* a */:
return (array[startIndex + 3] === 116 /* t */ && array[startIndex + 4] === 105 /* i */ && array[startIndex + 5] === 99 /* c */) ? 58 /* StaticKeyword */ : 11 /* IdentifierName */;
case 114 /* r */:
return (array[startIndex + 3] === 105 /* i */ && array[startIndex + 4] === 110 /* n */ && array[startIndex + 5] === 103 /* g */) ? 69 /* StringKeyword */ : 11 /* IdentifierName */;
default:
return 11 /* IdentifierName */;
}
default:
return 11 /* IdentifierName */;
}
case 116 /* t */:
return (array[startIndex + 1] === 121 /* y */ && array[startIndex + 2] === 112 /* p */ && array[startIndex + 3] === 101 /* e */ && array[startIndex + 4] === 111 /* o */ && array[startIndex + 5] === 102 /* f */) ? 39 /* TypeOfKeyword */ : 11 /* IdentifierName */;
case 101 /* e */:
return (array[startIndex + 1] === 120 /* x */ && array[startIndex + 2] === 112 /* p */ && array[startIndex + 3] === 111 /* o */ && array[startIndex + 4] === 114 /* r */ && array[startIndex + 5] === 116 /* t */) ? 47 /* ExportKeyword */ : 11 /* IdentifierName */;
case 105 /* i */:
return (array[startIndex + 1] === 109 /* m */ && array[startIndex + 2] === 112 /* p */ && array[startIndex + 3] === 111 /* o */ && array[startIndex + 4] === 114 /* r */ && array[startIndex + 5] === 116 /* t */) ? 49 /* ImportKeyword */ : 11 /* IdentifierName */;
case 112 /* p */:
return (array[startIndex + 1] === 117 /* u */ && array[startIndex + 2] === 98 /* b */ && array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 105 /* i */ && array[startIndex + 5] === 99 /* c */) ? 57 /* PublicKeyword */ : 11 /* IdentifierName */;
case 109 /* m */:
return (array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 100 /* d */ && array[startIndex + 3] === 117 /* u */ && array[startIndex + 4] === 108 /* l */ && array[startIndex + 5] === 101 /* e */) ? 65 /* ModuleKeyword */ : 11 /* IdentifierName */;
case 110 /* n */:
return (array[startIndex + 1] === 117 /* u */ && array[startIndex + 2] === 109 /* m */ && array[startIndex + 3] === 98 /* b */ && array[startIndex + 4] === 101 /* e */ && array[startIndex + 5] === 114 /* r */) ? 67 /* NumberKeyword */ : 11 /* IdentifierName */;
default:
return 11 /* IdentifierName */;
}
case 7:
switch (array[startIndex]) {
case 100 /* d */:
switch (array[startIndex + 1]) {
case 101 /* e */:
switch (array[startIndex + 2]) {
case 102 /* f */:
return (array[startIndex + 3] === 97 /* a */ && array[startIndex + 4] === 117 /* u */ && array[startIndex + 5] === 108 /* l */ && array[startIndex + 6] === 116 /* t */) ? 20 /* DefaultKeyword */ : 11 /* IdentifierName */;
case 99 /* c */:
return (array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 97 /* a */ && array[startIndex + 5] === 114 /* r */ && array[startIndex + 6] === 101 /* e */) ? 63 /* DeclareKeyword */ : 11 /* IdentifierName */;
default:
return 11 /* IdentifierName */;
}
default:
return 11 /* IdentifierName */;
}
case 102 /* f */:
return (array[startIndex + 1] === 105 /* i */ && array[startIndex + 2] === 110 /* n */ && array[startIndex + 3] === 97 /* a */ && array[startIndex + 4] === 108 /* l */ && array[startIndex + 5] === 108 /* l */ && array[startIndex + 6] === 121 /* y */) ? 25 /* FinallyKeyword */ : 11 /* IdentifierName */;
case 101 /* e */:
return (array[startIndex + 1] === 120 /* x */ && array[startIndex + 2] === 116 /* t */ && array[startIndex + 3] === 101 /* e */ && array[startIndex + 4] === 110 /* n */ && array[startIndex + 5] === 100 /* d */ && array[startIndex + 6] === 115 /* s */) ? 48 /* ExtendsKeyword */ : 11 /* IdentifierName */;
case 112 /* p */:
switch (array[startIndex + 1]) {
case 97 /* a */:
return (array[startIndex + 2] === 99 /* c */ && array[startIndex + 3] === 107 /* k */ && array[startIndex + 4] === 97 /* a */ && array[startIndex + 5] === 103 /* g */ && array[startIndex + 6] === 101 /* e */) ? 54 /* PackageKeyword */ : 11 /* IdentifierName */;
case 114 /* r */:
return (array[startIndex + 2] === 105 /* i */ && array[startIndex + 3] === 118 /* v */ && array[startIndex + 4] === 97 /* a */ && array[startIndex + 5] === 116 /* t */ && array[startIndex + 6] === 101 /* e */) ? 55 /* PrivateKeyword */ : 11 /* IdentifierName */;
default:
return 11 /* IdentifierName */;
}
case 98 /* b */:
return (array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 111 /* o */ && array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 101 /* e */ && array[startIndex + 5] === 97 /* a */ && array[startIndex + 6] === 110 /* n */) ? 61 /* BooleanKeyword */ : 11 /* IdentifierName */;
case 114 /* r */:
return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 113 /* q */ && array[startIndex + 3] === 117 /* u */ && array[startIndex + 4] === 105 /* i */ && array[startIndex + 5] === 114 /* r */ && array[startIndex + 6] === 101 /* e */) ? 66 /* RequireKeyword */ : 11 /* IdentifierName */;
default:
return 11 /* IdentifierName */;
}
case 8:
switch (array[startIndex]) {
case 99 /* c */:
return (array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 110 /* n */ && array[startIndex + 3] === 116 /* t */ && array[startIndex + 4] === 105 /* i */ && array[startIndex + 5] === 110 /* n */ && array[startIndex + 6] === 117 /* u */ && array[startIndex + 7] === 101 /* e */) ? 18 /* ContinueKeyword */ : 11 /* IdentifierName */;
case 100 /* d */:
return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 98 /* b */ && array[startIndex + 3] === 117 /* u */ && array[startIndex + 4] === 103 /* g */ && array[startIndex + 5] === 103 /* g */ && array[startIndex + 6] === 101 /* e */ && array[startIndex + 7] === 114 /* r */) ? 19 /* DebuggerKeyword */ : 11 /* IdentifierName */;
case 102 /* f */:
return (array[startIndex + 1] === 117 /* u */ && array[startIndex + 2] === 110 /* n */ && array[startIndex + 3] === 99 /* c */ && array[startIndex + 4] === 116 /* t */ && array[startIndex + 5] === 105 /* i */ && array[startIndex + 6] === 111 /* o */ && array[startIndex + 7] === 110 /* n */) ? 27 /* FunctionKeyword */ : 11 /* IdentifierName */;
default:
return 11 /* IdentifierName */;
}
case 9:
switch (array[startIndex]) {
case 105 /* i */:
return (array[startIndex + 1] === 110 /* n */ && array[startIndex + 2] === 116 /* t */ && array[startIndex + 3] === 101 /* e */ && array[startIndex + 4] === 114 /* r */ && array[startIndex + 5] === 102 /* f */ && array[startIndex + 6] === 97 /* a */ && array[startIndex + 7] === 99 /* c */ && array[startIndex + 8] === 101 /* e */) ? 52 /* InterfaceKeyword */ : 11 /* IdentifierName */;
case 112 /* p */:
return (array[startIndex + 1] === 114 /* r */ && array[startIndex + 2] === 111 /* o */ && array[startIndex + 3] === 116 /* t */ && array[startIndex + 4] === 101 /* e */ && array[startIndex + 5] === 99 /* c */ && array[startIndex + 6] === 116 /* t */ && array[startIndex + 7] === 101 /* e */ && array[startIndex + 8] === 100 /* d */) ? 56 /* ProtectedKeyword */ : 11 /* IdentifierName */;
default:
return 11 /* IdentifierName */;
}
case 10:
switch (array[startIndex]) {
case 105 /* i */:
switch (array[startIndex + 1]) {
case 110 /* n */:
return (array[startIndex + 2] === 115 /* s */ && array[startIndex + 3] === 116 /* t */ && array[startIndex + 4] === 97 /* a */ && array[startIndex + 5] === 110 /* n */ && array[startIndex + 6] === 99 /* c */ && array[startIndex + 7] === 101 /* e */ && array[startIndex + 8] === 111 /* o */ && array[startIndex + 9] === 102 /* f */) ? 30 /* InstanceOfKeyword */ : 11 /* IdentifierName */;
case 109 /* m */:
return (array[startIndex + 2] === 112 /* p */ && array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 101 /* e */ && array[startIndex + 5] === 109 /* m */ && array[startIndex + 6] === 101 /* e */ && array[startIndex + 7] === 110 /* n */ && array[startIndex + 8] === 116 /* t */ && array[startIndex + 9] === 115 /* s */) ? 51 /* ImplementsKeyword */ : 11 /* IdentifierName */;
default:
return 11 /* IdentifierName */;
}
default:
return 11 /* IdentifierName */;
}
case 11:
return (array[startIndex] === 99 /* c */ && array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 110 /* n */ && array[startIndex + 3] === 115 /* s */ && array[startIndex + 4] === 116 /* t */ && array[startIndex + 5] === 114 /* r */ && array[startIndex + 6] === 117 /* u */ && array[startIndex + 7] === 99 /* c */ && array[startIndex + 8] === 116 /* t */ && array[startIndex + 9] === 111 /* o */ && array[startIndex + 10] === 114 /* r */) ? 62 /* ConstructorKeyword */ : 11 /* IdentifierName */;
default:
return 11 /* IdentifierName */;
}
};
return ScannerUtilities;
})();
TypeScript.ScannerUtilities = ScannerUtilities;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (Syntax) {
var EmptySeparatedSyntaxList = (function () {
function EmptySeparatedSyntaxList() {
}
EmptySeparatedSyntaxList.prototype.kind = function () {
return 2 /* SeparatedList */;
};
EmptySeparatedSyntaxList.prototype.isNode = function () {
return false;
};
EmptySeparatedSyntaxList.prototype.isToken = function () {
return false;
};
EmptySeparatedSyntaxList.prototype.isList = function () {
return false;
};
EmptySeparatedSyntaxList.prototype.isSeparatedList = function () {
return true;
};
EmptySeparatedSyntaxList.prototype.toJSON = function (key) {
return [];
};
EmptySeparatedSyntaxList.prototype.childCount = function () {
return 0;
};
EmptySeparatedSyntaxList.prototype.nonSeparatorCount = function () {
return 0;
};
EmptySeparatedSyntaxList.prototype.separatorCount = function () {
return 0;
};
EmptySeparatedSyntaxList.prototype.toArray = function () {
return [];
};
EmptySeparatedSyntaxList.prototype.toNonSeparatorArray = function () {
return [];
};
EmptySeparatedSyntaxList.prototype.childAt = function (index) {
throw TypeScript.Errors.argumentOutOfRange("index");
};
EmptySeparatedSyntaxList.prototype.nonSeparatorAt = function (index) {
throw TypeScript.Errors.argumentOutOfRange("index");
};
EmptySeparatedSyntaxList.prototype.separatorAt = function (index) {
throw TypeScript.Errors.argumentOutOfRange("index");
};
EmptySeparatedSyntaxList.prototype.collectTextElements = function (elements) {
};
EmptySeparatedSyntaxList.prototype.firstToken = function () {
return null;
};
EmptySeparatedSyntaxList.prototype.lastToken = function () {
return null;
};
EmptySeparatedSyntaxList.prototype.fullWidth = function () {
return 0;
};
EmptySeparatedSyntaxList.prototype.fullText = function () {
return "";
};
EmptySeparatedSyntaxList.prototype.width = function () {
return 0;
};
EmptySeparatedSyntaxList.prototype.isTypeScriptSpecific = function () {
return false;
};
EmptySeparatedSyntaxList.prototype.isIncrementallyUnusable = function () {
return false;
};
EmptySeparatedSyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) {
throw TypeScript.Errors.invalidOperation();
};
EmptySeparatedSyntaxList.prototype.insertChildrenInto = function (array, index) {
};
EmptySeparatedSyntaxList.prototype.leadingTrivia = function () {
return TypeScript.Syntax.emptyTriviaList;
};
EmptySeparatedSyntaxList.prototype.trailingTrivia = function () {
return TypeScript.Syntax.emptyTriviaList;
};
EmptySeparatedSyntaxList.prototype.leadingTriviaWidth = function () {
return 0;
};
EmptySeparatedSyntaxList.prototype.trailingTriviaWidth = function () {
return 0;
};
return EmptySeparatedSyntaxList;
})();
Syntax.emptySeparatedList = new EmptySeparatedSyntaxList();
var SingletonSeparatedSyntaxList = (function () {
function SingletonSeparatedSyntaxList(item) {
this.item = item;
}
SingletonSeparatedSyntaxList.prototype.toJSON = function (key) {
return [this.item];
};
SingletonSeparatedSyntaxList.prototype.kind = function () {
return 2 /* SeparatedList */;
};
SingletonSeparatedSyntaxList.prototype.isNode = function () {
return false;
};
SingletonSeparatedSyntaxList.prototype.isToken = function () {
return false;
};
SingletonSeparatedSyntaxList.prototype.isList = function () {
return false;
};
SingletonSeparatedSyntaxList.prototype.isSeparatedList = function () {
return true;
};
SingletonSeparatedSyntaxList.prototype.childCount = function () {
return 1;
};
SingletonSeparatedSyntaxList.prototype.nonSeparatorCount = function () {
return 1;
};
SingletonSeparatedSyntaxList.prototype.separatorCount = function () {
return 0;
};
SingletonSeparatedSyntaxList.prototype.toArray = function () {
return [this.item];
};
SingletonSeparatedSyntaxList.prototype.toNonSeparatorArray = function () {
return [this.item];
};
SingletonSeparatedSyntaxList.prototype.childAt = function (index) {
if (index !== 0) {
throw TypeScript.Errors.argumentOutOfRange("index");
}
return this.item;
};
SingletonSeparatedSyntaxList.prototype.nonSeparatorAt = function (index) {
if (index !== 0) {
throw TypeScript.Errors.argumentOutOfRange("index");
}
return this.item;
};
SingletonSeparatedSyntaxList.prototype.separatorAt = function (index) {
throw TypeScript.Errors.argumentOutOfRange("index");
};
SingletonSeparatedSyntaxList.prototype.collectTextElements = function (elements) {
this.item.collectTextElements(elements);
};
SingletonSeparatedSyntaxList.prototype.firstToken = function () {
return this.item.firstToken();
};
SingletonSeparatedSyntaxList.prototype.lastToken = function () {
return this.item.lastToken();
};
SingletonSeparatedSyntaxList.prototype.fullWidth = function () {
return this.item.fullWidth();
};
SingletonSeparatedSyntaxList.prototype.width = function () {
return this.item.width();
};
SingletonSeparatedSyntaxList.prototype.fullText = function () {
return this.item.fullText();
};
SingletonSeparatedSyntaxList.prototype.leadingTrivia = function () {
return this.item.leadingTrivia();
};
SingletonSeparatedSyntaxList.prototype.trailingTrivia = function () {
return this.item.trailingTrivia();
};
SingletonSeparatedSyntaxList.prototype.leadingTriviaWidth = function () {
return this.item.leadingTriviaWidth();
};
SingletonSeparatedSyntaxList.prototype.trailingTriviaWidth = function () {
return this.item.trailingTriviaWidth();
};
SingletonSeparatedSyntaxList.prototype.isTypeScriptSpecific = function () {
return this.item.isTypeScriptSpecific();
};
SingletonSeparatedSyntaxList.prototype.isIncrementallyUnusable = function () {
return this.item.isIncrementallyUnusable();
};
SingletonSeparatedSyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) {
return this.item.findTokenInternal(new TypeScript.PositionedSeparatedList(parent, this, fullStart), position, fullStart);
};
SingletonSeparatedSyntaxList.prototype.insertChildrenInto = function (array, index) {
array.splice(index, 0, this.item);
};
return SingletonSeparatedSyntaxList;
})();
var NormalSeparatedSyntaxList = (function () {
function NormalSeparatedSyntaxList(elements) {
this._data = 0;
this.elements = elements;
}
NormalSeparatedSyntaxList.prototype.kind = function () {
return 2 /* SeparatedList */;
};
NormalSeparatedSyntaxList.prototype.isToken = function () {
return false;
};
NormalSeparatedSyntaxList.prototype.isNode = function () {
return false;
};
NormalSeparatedSyntaxList.prototype.isList = function () {
return false;
};
NormalSeparatedSyntaxList.prototype.isSeparatedList = function () {
return true;
};
NormalSeparatedSyntaxList.prototype.toJSON = function (key) {
return this.elements;
};
NormalSeparatedSyntaxList.prototype.childCount = function () {
return this.elements.length;
};
NormalSeparatedSyntaxList.prototype.nonSeparatorCount = function () {
return TypeScript.IntegerUtilities.integerDivide(this.elements.length + 1, 2);
};
NormalSeparatedSyntaxList.prototype.separatorCount = function () {
return TypeScript.IntegerUtilities.integerDivide(this.elements.length, 2);
};
NormalSeparatedSyntaxList.prototype.toArray = function () {
return this.elements.slice(0);
};
NormalSeparatedSyntaxList.prototype.toNonSeparatorArray = function () {
var result = [];
for (var i = 0, n = this.nonSeparatorCount(); i < n; i++) {
result.push(this.nonSeparatorAt(i));
}
return result;
};
NormalSeparatedSyntaxList.prototype.childAt = function (index) {
if (index < 0 || index >= this.elements.length) {
throw TypeScript.Errors.argumentOutOfRange("index");
}
return this.elements[index];
};
NormalSeparatedSyntaxList.prototype.nonSeparatorAt = function (index) {
var value = index * 2;
if (value < 0 || value >= this.elements.length) {
throw TypeScript.Errors.argumentOutOfRange("index");
}
return this.elements[value];
};
NormalSeparatedSyntaxList.prototype.separatorAt = function (index) {
var value = index * 2 + 1;
if (value < 0 || value >= this.elements.length) {
throw TypeScript.Errors.argumentOutOfRange("index");
}
return this.elements[value];
};
NormalSeparatedSyntaxList.prototype.firstToken = function () {
var token;
for (var i = 0, n = this.elements.length; i < n; i++) {
if (i % 2 === 0) {
var nodeOrToken = this.elements[i];
token = nodeOrToken.firstToken();
if (token !== null) {
return token;
}
} else {
token = this.elements[i];
if (token.width() > 0) {
return token;
}
}
}
return null;
};
NormalSeparatedSyntaxList.prototype.lastToken = function () {
var token;
for (var i = this.elements.length - 1; i >= 0; i--) {
if (i % 2 === 0) {
var nodeOrToken = this.elements[i];
token = nodeOrToken.lastToken();
if (token !== null) {
return token;
}
} else {
token = this.elements[i];
if (token.width() > 0) {
return token;
}
}
}
return null;
};
NormalSeparatedSyntaxList.prototype.fullText = function () {
var elements = [];
this.collectTextElements(elements);
return elements.join("");
};
NormalSeparatedSyntaxList.prototype.isTypeScriptSpecific = function () {
for (var i = 0, n = this.nonSeparatorCount(); i < n; i++) {
if (this.nonSeparatorAt(i).isTypeScriptSpecific()) {
return true;
}
}
return false;
};
NormalSeparatedSyntaxList.prototype.isIncrementallyUnusable = function () {
return (this.data() & 2 /* NodeIncrementallyUnusableMask */) !== 0;
};
NormalSeparatedSyntaxList.prototype.fullWidth = function () {
return this.data() >>> 3 /* NodeFullWidthShift */;
};
NormalSeparatedSyntaxList.prototype.width = function () {
var fullWidth = this.fullWidth();
return fullWidth - this.leadingTriviaWidth() - this.trailingTriviaWidth();
};
NormalSeparatedSyntaxList.prototype.leadingTrivia = function () {
return this.firstToken().leadingTrivia();
};
NormalSeparatedSyntaxList.prototype.trailingTrivia = function () {
return this.lastToken().trailingTrivia();
};
NormalSeparatedSyntaxList.prototype.leadingTriviaWidth = function () {
return this.firstToken().leadingTriviaWidth();
};
NormalSeparatedSyntaxList.prototype.trailingTriviaWidth = function () {
return this.lastToken().trailingTriviaWidth();
};
NormalSeparatedSyntaxList.prototype.computeData = function () {
var fullWidth = 0;
var isIncrementallyUnusable = false;
for (var i = 0, n = this.elements.length; i < n; i++) {
var element = this.elements[i];
var childWidth = element.fullWidth();
fullWidth += childWidth;
isIncrementallyUnusable = isIncrementallyUnusable || element.isIncrementallyUnusable();
}
return (fullWidth << 3 /* NodeFullWidthShift */) | (isIncrementallyUnusable ? 2 /* NodeIncrementallyUnusableMask */ : 0) | 1 /* NodeDataComputed */;
};
NormalSeparatedSyntaxList.prototype.data = function () {
if ((this._data & 1 /* NodeDataComputed */) === 0) {
this._data = this.computeData();
}
return this._data;
};
NormalSeparatedSyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) {
parent = new TypeScript.PositionedSeparatedList(parent, this, fullStart);
for (var i = 0, n = this.elements.length; i < n; i++) {
var element = this.elements[i];
var childWidth = element.fullWidth();
if (position < childWidth) {
return element.findTokenInternal(parent, position, fullStart);
}
position -= childWidth;
fullStart += childWidth;
}
throw TypeScript.Errors.invalidOperation();
};
NormalSeparatedSyntaxList.prototype.collectTextElements = function (elements) {
for (var i = 0, n = this.elements.length; i < n; i++) {
var element = this.elements[i];
element.collectTextElements(elements);
}
};
NormalSeparatedSyntaxList.prototype.insertChildrenInto = function (array, index) {
if (index === 0) {
array.unshift.apply(array, this.elements);
} else {
array.splice.apply(array, [index, 0].concat(this.elements));
}
};
return NormalSeparatedSyntaxList;
})();
function separatedList(nodes) {
return separatedListAndValidate(nodes, false);
}
Syntax.separatedList = separatedList;
function separatedListAndValidate(nodes, validate) {
if (nodes === undefined || nodes === null || nodes.length === 0) {
return Syntax.emptySeparatedList;
}
if (validate) {
for (var i = 0; i < nodes.length; i++) {
var item = nodes[i];
if (i % 2 === 1) {
}
}
}
if (nodes.length === 1) {
return new SingletonSeparatedSyntaxList(nodes[0]);
}
return new NormalSeparatedSyntaxList(nodes);
}
})(TypeScript.Syntax || (TypeScript.Syntax = {}));
var Syntax = TypeScript.Syntax;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var SlidingWindow = (function () {
function SlidingWindow(source, window, defaultValue, sourceLength) {
if (typeof sourceLength === "undefined") { sourceLength = -1; }
this.source = source;
this.window = window;
this.defaultValue = defaultValue;
this.sourceLength = sourceLength;
this.windowCount = 0;
this.windowAbsoluteStartIndex = 0;
this.currentRelativeItemIndex = 0;
this._pinCount = 0;
this.firstPinnedAbsoluteIndex = -1;
}
SlidingWindow.prototype.windowAbsoluteEndIndex = function () {
return this.windowAbsoluteStartIndex + this.windowCount;
};
SlidingWindow.prototype.addMoreItemsToWindow = function (argument) {
if (this.sourceLength >= 0 && this.absoluteIndex() >= this.sourceLength) {
return false;
}
if (this.windowCount >= this.window.length) {
this.tryShiftOrGrowWindow();
}
var spaceAvailable = this.window.length - this.windowCount;
var amountFetched = this.source.fetchMoreItems(argument, this.windowAbsoluteEndIndex(), this.window, this.windowCount, spaceAvailable);
this.windowCount += amountFetched;
return amountFetched > 0;
};
SlidingWindow.prototype.tryShiftOrGrowWindow = function () {
var currentIndexIsPastWindowHalfwayPoint = this.currentRelativeItemIndex > (this.window.length >>> 1);
var isAllowedToShift = this.firstPinnedAbsoluteIndex === -1 || this.firstPinnedAbsoluteIndex > this.windowAbsoluteStartIndex;
if (currentIndexIsPastWindowHalfwayPoint && isAllowedToShift) {
var shiftStartIndex = this.firstPinnedAbsoluteIndex === -1 ? this.currentRelativeItemIndex : this.firstPinnedAbsoluteIndex - this.windowAbsoluteStartIndex;
var shiftCount = this.windowCount - shiftStartIndex;
if (shiftCount > 0) {
TypeScript.ArrayUtilities.copy(this.window, shiftStartIndex, this.window, 0, shiftCount);
}
this.windowAbsoluteStartIndex += shiftStartIndex;
this.windowCount -= shiftStartIndex;
this.currentRelativeItemIndex -= shiftStartIndex;
} else {
TypeScript.ArrayUtilities.grow(this.window, this.window.length * 2, this.defaultValue);
}
};
SlidingWindow.prototype.absoluteIndex = function () {
return this.windowAbsoluteStartIndex + this.currentRelativeItemIndex;
};
SlidingWindow.prototype.isAtEndOfSource = function () {
return this.absoluteIndex() >= this.sourceLength;
};
SlidingWindow.prototype.getAndPinAbsoluteIndex = function () {
var absoluteIndex = this.absoluteIndex();
var pinCount = this._pinCount++;
if (pinCount === 0) {
this.firstPinnedAbsoluteIndex = absoluteIndex;
}
return absoluteIndex;
};
SlidingWindow.prototype.releaseAndUnpinAbsoluteIndex = function (absoluteIndex) {
this._pinCount--;
if (this._pinCount === 0) {
this.firstPinnedAbsoluteIndex = -1;
}
};
SlidingWindow.prototype.rewindToPinnedIndex = function (absoluteIndex) {
var relativeIndex = absoluteIndex - this.windowAbsoluteStartIndex;
this.currentRelativeItemIndex = relativeIndex;
};
SlidingWindow.prototype.currentItem = function (argument) {
if (this.currentRelativeItemIndex >= this.windowCount) {
if (!this.addMoreItemsToWindow(argument)) {
return this.defaultValue;
}
}
return this.window[this.currentRelativeItemIndex];
};
SlidingWindow.prototype.peekItemN = function (n) {
while (this.currentRelativeItemIndex + n >= this.windowCount) {
if (!this.addMoreItemsToWindow(null)) {
return this.defaultValue;
}
}
return this.window[this.currentRelativeItemIndex + n];
};
SlidingWindow.prototype.moveToNextItem = function () {
this.currentRelativeItemIndex++;
};
SlidingWindow.prototype.disgardAllItemsFromCurrentIndexOnwards = function () {
this.windowCount = this.currentRelativeItemIndex;
};
SlidingWindow.prototype.setAbsoluteIndex = function (absoluteIndex) {
if (this.absoluteIndex() === absoluteIndex) {
return;
}
if (this._pinCount > 0) {
}
if (absoluteIndex >= this.windowAbsoluteStartIndex && absoluteIndex < this.windowAbsoluteEndIndex()) {
this.currentRelativeItemIndex = (absoluteIndex - this.windowAbsoluteStartIndex);
} else {
this.windowAbsoluteStartIndex = absoluteIndex;
this.windowCount = 0;
this.currentRelativeItemIndex = 0;
}
};
SlidingWindow.prototype.pinCount = function () {
return this._pinCount;
};
return SlidingWindow;
})();
TypeScript.SlidingWindow = SlidingWindow;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (Syntax) {
function emptySourceUnit() {
return TypeScript.Syntax.normalModeFactory.sourceUnit(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(10 /* EndOfFileToken */, { text: "" }));
}
Syntax.emptySourceUnit = emptySourceUnit;
function getStandaloneExpression(positionedToken) {
var token = positionedToken.token();
if (positionedToken !== null && positionedToken.kind() === 11 /* IdentifierName */) {
var parentPositionedNode = positionedToken.containingNode();
var parentNode = parentPositionedNode.node();
if (parentNode.kind() === 121 /* QualifiedName */ && parentNode.right === token) {
return parentPositionedNode;
} else if (parentNode.kind() === 212 /* MemberAccessExpression */ && parentNode.name === token) {
return parentPositionedNode;
}
}
return positionedToken;
}
Syntax.getStandaloneExpression = getStandaloneExpression;
function isInModuleOrTypeContext(positionedToken) {
if (positionedToken !== null) {
var positionedNodeOrToken = TypeScript.Syntax.getStandaloneExpression(positionedToken);
var parent = positionedNodeOrToken.containingNode();
if (parent !== null) {
switch (parent.kind()) {
case 246 /* ModuleNameModuleReference */:
return true;
case 121 /* QualifiedName */:
return true;
default:
return isInTypeOnlyContext(positionedToken);
}
}
}
return false;
}
Syntax.isInModuleOrTypeContext = isInModuleOrTypeContext;
function isInTypeOnlyContext(positionedToken) {
var positionedNodeOrToken = TypeScript.Syntax.getStandaloneExpression(positionedToken);
var positionedParent = positionedNodeOrToken.containingNode();
var parent = positionedParent.node();
var nodeOrToken = positionedNodeOrToken.nodeOrToken();
if (parent !== null) {
switch (parent.kind()) {
case 124 /* ArrayType */:
return parent.type === nodeOrToken;
case 220 /* CastExpression */:
return parent.type === nodeOrToken;
case 244 /* TypeAnnotation */:
case 230 /* ExtendsHeritageClause */:
case 231 /* ImplementsHeritageClause */:
case 228 /* TypeArgumentList */:
return true;
}
}
return false;
}
Syntax.isInTypeOnlyContext = isInTypeOnlyContext;
function childOffset(parent, child) {
var offset = 0;
for (var i = 0, n = parent.childCount(); i < n; i++) {
var current = parent.childAt(i);
if (current === child) {
return offset;
}
if (current !== null) {
offset += current.fullWidth();
}
}
throw TypeScript.Errors.invalidOperation();
}
Syntax.childOffset = childOffset;
function childOffsetAt(parent, index) {
var offset = 0;
for (var i = 0; i < index; i++) {
var current = parent.childAt(i);
if (current !== null) {
offset += current.fullWidth();
}
}
return offset;
}
Syntax.childOffsetAt = childOffsetAt;
function childIndex(parent, child) {
for (var i = 0, n = parent.childCount(); i < n; i++) {
var current = parent.childAt(i);
if (current === child) {
return i;
}
}
throw TypeScript.Errors.invalidOperation();
}
Syntax.childIndex = childIndex;
function nodeStructuralEquals(node1, node2) {
if (node1 === null) {
return node2 === null;
}
return node1.structuralEquals(node2);
}
Syntax.nodeStructuralEquals = nodeStructuralEquals;
function nodeOrTokenStructuralEquals(node1, node2) {
if (node1 === node2) {
return true;
}
if (node1 === null || node2 === null) {
return false;
}
if (node1.isToken()) {
return node2.isToken() ? tokenStructuralEquals(node1, node2) : false;
}
return node2.isNode() ? nodeStructuralEquals(node1, node2) : false;
}
Syntax.nodeOrTokenStructuralEquals = nodeOrTokenStructuralEquals;
function tokenStructuralEquals(token1, token2) {
if (token1 === token2) {
return true;
}
if (token1 === null || token2 === null) {
return false;
}
return token1.kind() === token2.kind() && token1.width() === token2.width() && token1.fullWidth() === token2.fullWidth() && token1.text() === token2.text() && TypeScript.Syntax.triviaListStructuralEquals(token1.leadingTrivia(), token2.leadingTrivia()) && TypeScript.Syntax.triviaListStructuralEquals(token1.trailingTrivia(), token2.trailingTrivia());
}
Syntax.tokenStructuralEquals = tokenStructuralEquals;
function triviaListStructuralEquals(triviaList1, triviaList2) {
if (triviaList1.count() !== triviaList2.count()) {
return false;
}
for (var i = 0, n = triviaList1.count(); i < n; i++) {
if (!TypeScript.Syntax.triviaStructuralEquals(triviaList1.syntaxTriviaAt(i), triviaList2.syntaxTriviaAt(i))) {
return false;
}
}
return true;
}
Syntax.triviaListStructuralEquals = triviaListStructuralEquals;
function triviaStructuralEquals(trivia1, trivia2) {
return trivia1.kind() === trivia2.kind() && trivia1.fullWidth() === trivia2.fullWidth() && trivia1.fullText() === trivia2.fullText();
}
Syntax.triviaStructuralEquals = triviaStructuralEquals;
function listStructuralEquals(list1, list2) {
if (list1.childCount() !== list2.childCount()) {
return false;
}
for (var i = 0, n = list1.childCount(); i < n; i++) {
var child1 = list1.childAt(i);
var child2 = list2.childAt(i);
if (!TypeScript.Syntax.nodeOrTokenStructuralEquals(child1, child2)) {
return false;
}
}
return true;
}
Syntax.listStructuralEquals = listStructuralEquals;
function separatedListStructuralEquals(list1, list2) {
if (list1.childCount() !== list2.childCount()) {
return false;
}
for (var i = 0, n = list1.childCount(); i < n; i++) {
var element1 = list1.childAt(i);
var element2 = list2.childAt(i);
if (!TypeScript.Syntax.nodeOrTokenStructuralEquals(element1, element2)) {
return false;
}
}
return true;
}
Syntax.separatedListStructuralEquals = separatedListStructuralEquals;
function elementStructuralEquals(element1, element2) {
if (element1 === element2) {
return true;
}
if (element1 === null || element2 === null) {
return false;
}
if (element2.kind() !== element2.kind()) {
return false;
}
if (element1.isToken()) {
return tokenStructuralEquals(element1, element2);
} else if (element1.isNode()) {
return nodeStructuralEquals(element1, element2);
} else if (element1.isList()) {
return listStructuralEquals(element1, element2);
} else if (element1.isSeparatedList()) {
return separatedListStructuralEquals(element1, element2);
}
throw TypeScript.Errors.invalidOperation();
}
Syntax.elementStructuralEquals = elementStructuralEquals;
function identifierName(text, info) {
if (typeof info === "undefined") { info = null; }
return TypeScript.Syntax.identifier(text);
}
Syntax.identifierName = identifierName;
function trueExpression() {
return TypeScript.Syntax.token(37 /* TrueKeyword */);
}
Syntax.trueExpression = trueExpression;
function falseExpression() {
return TypeScript.Syntax.token(24 /* FalseKeyword */);
}
Syntax.falseExpression = falseExpression;
function numericLiteralExpression(text) {
return TypeScript.Syntax.token(13 /* NumericLiteral */, { text: text });
}
Syntax.numericLiteralExpression = numericLiteralExpression;
function stringLiteralExpression(text) {
return TypeScript.Syntax.token(14 /* StringLiteral */, { text: text });
}
Syntax.stringLiteralExpression = stringLiteralExpression;
function isSuperInvocationExpression(node) {
return node.kind() === 213 /* InvocationExpression */ && node.expression.kind() === 50 /* SuperKeyword */;
}
Syntax.isSuperInvocationExpression = isSuperInvocationExpression;
function isSuperInvocationExpressionStatement(node) {
return node.kind() === 149 /* ExpressionStatement */ && isSuperInvocationExpression(node.expression);
}
Syntax.isSuperInvocationExpressionStatement = isSuperInvocationExpressionStatement;
function isSuperMemberAccessExpression(node) {
return node.kind() === 212 /* MemberAccessExpression */ && node.expression.kind() === 50 /* SuperKeyword */;
}
Syntax.isSuperMemberAccessExpression = isSuperMemberAccessExpression;
function isSuperMemberAccessInvocationExpression(node) {
return node.kind() === 213 /* InvocationExpression */ && isSuperMemberAccessExpression(node.expression);
}
Syntax.isSuperMemberAccessInvocationExpression = isSuperMemberAccessInvocationExpression;
function assignmentExpression(left, token, right) {
return TypeScript.Syntax.normalModeFactory.binaryExpression(174 /* AssignmentExpression */, left, token, right);
}
Syntax.assignmentExpression = assignmentExpression;
function nodeHasSkippedOrMissingTokens(node) {
for (var i = 0; i < node.childCount(); i++) {
var child = node.childAt(i);
if (child !== null && child.isToken()) {
var token = child;
if (token.hasSkippedToken() || (token.width() === 0 && token.kind() !== 10 /* EndOfFileToken */)) {
return true;
}
}
}
return false;
}
Syntax.nodeHasSkippedOrMissingTokens = nodeHasSkippedOrMissingTokens;
function isUnterminatedStringLiteral(token) {
if (token && token.kind() === 14 /* StringLiteral */) {
var text = token.text();
return text.length < 2 || text.charCodeAt(text.length - 1) !== text.charCodeAt(0);
}
return false;
}
Syntax.isUnterminatedStringLiteral = isUnterminatedStringLiteral;
function isUnterminatedMultilineCommentTrivia(trivia) {
if (trivia && trivia.kind() === 6 /* MultiLineCommentTrivia */) {
var text = trivia.fullText();
return text.length < 4 || text.substring(text.length - 2) !== "*/";
}
return false;
}
Syntax.isUnterminatedMultilineCommentTrivia = isUnterminatedMultilineCommentTrivia;
function isEntirelyInsideCommentTrivia(trivia, fullStart, position) {
if (trivia && trivia.isComment() && position > fullStart) {
var end = fullStart + trivia.fullWidth();
if (position < end) {
return true;
} else if (position === end) {
return trivia.kind() === 7 /* SingleLineCommentTrivia */ || isUnterminatedMultilineCommentTrivia(trivia);
}
}
return false;
}
Syntax.isEntirelyInsideCommentTrivia = isEntirelyInsideCommentTrivia;
function isEntirelyInsideComment(sourceUnit, position) {
var positionedToken = sourceUnit.findToken(position);
var fullStart = positionedToken.fullStart();
var triviaList = null;
var lastTriviaBeforeToken = null;
if (positionedToken.kind() === 10 /* EndOfFileToken */) {
if (positionedToken.token().hasLeadingTrivia()) {
triviaList = positionedToken.token().leadingTrivia();
} else {
positionedToken = positionedToken.previousToken();
if (positionedToken) {
if (positionedToken && positionedToken.token().hasTrailingTrivia()) {
triviaList = positionedToken.token().trailingTrivia();
fullStart = positionedToken.end();
}
}
}
} else {
if (position <= (fullStart + positionedToken.token().leadingTriviaWidth())) {
triviaList = positionedToken.token().leadingTrivia();
} else if (position >= (fullStart + positionedToken.token().width())) {
triviaList = positionedToken.token().trailingTrivia();
fullStart = positionedToken.end();
}
}
if (triviaList) {
for (var i = 0, n = triviaList.count(); i < n; i++) {
var trivia = triviaList.syntaxTriviaAt(i);
if (position <= fullStart) {
break;
} else if (position <= fullStart + trivia.fullWidth() && trivia.isComment()) {
lastTriviaBeforeToken = trivia;
break;
}
fullStart += trivia.fullWidth();
}
}
return lastTriviaBeforeToken && isEntirelyInsideCommentTrivia(lastTriviaBeforeToken, fullStart, position);
}
Syntax.isEntirelyInsideComment = isEntirelyInsideComment;
function isEntirelyInStringOrRegularExpressionLiteral(sourceUnit, position) {
var positionedToken = sourceUnit.findToken(position);
if (positionedToken) {
if (positionedToken.kind() === 10 /* EndOfFileToken */) {
positionedToken = positionedToken.previousToken();
return positionedToken && positionedToken.token().trailingTriviaWidth() === 0 && isUnterminatedStringLiteral(positionedToken.token());
} else if (position > positionedToken.start()) {
return (position < positionedToken.end() && (positionedToken.kind() === 14 /* StringLiteral */ || positionedToken.kind() === 12 /* RegularExpressionLiteral */)) || (position <= positionedToken.end() && isUnterminatedStringLiteral(positionedToken.token()));
}
}
return false;
}
Syntax.isEntirelyInStringOrRegularExpressionLiteral = isEntirelyInStringOrRegularExpressionLiteral;
function findSkippedTokenInTriviaList(positionedToken, position, lookInLeadingTriviaList) {
var triviaList = null;
var fullStart;
if (lookInLeadingTriviaList) {
triviaList = positionedToken.token().leadingTrivia();
fullStart = positionedToken.fullStart();
} else {
triviaList = positionedToken.token().trailingTrivia();
fullStart = positionedToken.end();
}
if (triviaList && triviaList.hasSkippedToken()) {
for (var i = 0, n = triviaList.count(); i < n; i++) {
var trivia = triviaList.syntaxTriviaAt(i);
var triviaWidth = trivia.fullWidth();
if (trivia.isSkippedToken() && position >= fullStart && position <= fullStart + triviaWidth) {
return new TypeScript.PositionedSkippedToken(positionedToken, trivia.skippedToken(), fullStart);
}
fullStart += triviaWidth;
}
}
return null;
}
function findSkippedTokenOnLeftInTriviaList(positionedToken, position, lookInLeadingTriviaList) {
var triviaList = null;
var fullEnd;
if (lookInLeadingTriviaList) {
triviaList = positionedToken.token().leadingTrivia();
fullEnd = positionedToken.fullStart() + triviaList.fullWidth();
} else {
triviaList = positionedToken.token().trailingTrivia();
fullEnd = positionedToken.fullEnd();
}
if (triviaList && triviaList.hasSkippedToken()) {
for (var i = triviaList.count() - 1; i >= 0; i--) {
var trivia = triviaList.syntaxTriviaAt(i);
var triviaWidth = trivia.fullWidth();
if (trivia.isSkippedToken() && position >= fullEnd) {
return new TypeScript.PositionedSkippedToken(positionedToken, trivia.skippedToken(), fullEnd - triviaWidth);
}
fullEnd -= triviaWidth;
}
}
return null;
}
function findSkippedTokenInLeadingTriviaList(positionedToken, position) {
return findSkippedTokenInTriviaList(positionedToken, position, true);
}
Syntax.findSkippedTokenInLeadingTriviaList = findSkippedTokenInLeadingTriviaList;
function findSkippedTokenInTrailingTriviaList(positionedToken, position) {
return findSkippedTokenInTriviaList(positionedToken, position, false);
}
Syntax.findSkippedTokenInTrailingTriviaList = findSkippedTokenInTrailingTriviaList;
function findSkippedTokenInPositionedToken(positionedToken, position) {
var positionInLeadingTriviaList = (position < positionedToken.start());
return findSkippedTokenInTriviaList(positionedToken, position, positionInLeadingTriviaList);
}
Syntax.findSkippedTokenInPositionedToken = findSkippedTokenInPositionedToken;
function findSkippedTokenOnLeft(positionedToken, position) {
var positionInLeadingTriviaList = (position < positionedToken.start());
return findSkippedTokenOnLeftInTriviaList(positionedToken, position, positionInLeadingTriviaList);
}
Syntax.findSkippedTokenOnLeft = findSkippedTokenOnLeft;
function getAncestorOfKind(positionedToken, kind) {
while (positionedToken && positionedToken.parent()) {
if (positionedToken.parent().kind() === kind) {
return positionedToken.parent();
}
positionedToken = positionedToken.parent();
}
return null;
}
Syntax.getAncestorOfKind = getAncestorOfKind;
function hasAncestorOfKind(positionedToken, kind) {
return TypeScript.Syntax.getAncestorOfKind(positionedToken, kind) !== null;
}
Syntax.hasAncestorOfKind = hasAncestorOfKind;
function isIntegerLiteral(expression) {
if (expression) {
switch (expression.kind()) {
case 164 /* PlusExpression */:
case 165 /* NegateExpression */:
expression = expression.operand;
return expression.isToken() && TypeScript.IntegerUtilities.isInteger(expression.text());
case 13 /* NumericLiteral */:
var text = expression.text();
return TypeScript.IntegerUtilities.isInteger(text) || TypeScript.IntegerUtilities.isHexInteger(text);
}
}
return false;
}
Syntax.isIntegerLiteral = isIntegerLiteral;
})(TypeScript.Syntax || (TypeScript.Syntax = {}));
var Syntax = TypeScript.Syntax;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (Syntax) {
var NormalModeFactory = (function () {
function NormalModeFactory() {
}
NormalModeFactory.prototype.sourceUnit = function (moduleElements, endOfFileToken) {
return new TypeScript.SourceUnitSyntax(moduleElements, endOfFileToken, false);
};
NormalModeFactory.prototype.externalModuleReference = function (requireKeyword, openParenToken, stringLiteral, closeParenToken) {
return new TypeScript.ExternalModuleReferenceSyntax(requireKeyword, openParenToken, stringLiteral, closeParenToken, false);
};
NormalModeFactory.prototype.moduleNameModuleReference = function (moduleName) {
return new TypeScript.ModuleNameModuleReferenceSyntax(moduleName, false);
};
NormalModeFactory.prototype.importDeclaration = function (modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken) {
return new TypeScript.ImportDeclarationSyntax(modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken, false);
};
NormalModeFactory.prototype.exportAssignment = function (exportKeyword, equalsToken, identifier, semicolonToken) {
return new TypeScript.ExportAssignmentSyntax(exportKeyword, equalsToken, identifier, semicolonToken, false);
};
NormalModeFactory.prototype.classDeclaration = function (modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken) {
return new TypeScript.ClassDeclarationSyntax(modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken, false);
};
NormalModeFactory.prototype.interfaceDeclaration = function (modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body) {
return new TypeScript.InterfaceDeclarationSyntax(modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body, false);
};
NormalModeFactory.prototype.heritageClause = function (kind, extendsOrImplementsKeyword, typeNames) {
return new TypeScript.HeritageClauseSyntax(kind, extendsOrImplementsKeyword, typeNames, false);
};
NormalModeFactory.prototype.moduleDeclaration = function (modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken) {
return new TypeScript.ModuleDeclarationSyntax(modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken, false);
};
NormalModeFactory.prototype.functionDeclaration = function (modifiers, functionKeyword, identifier, callSignature, block, semicolonToken) {
return new TypeScript.FunctionDeclarationSyntax(modifiers, functionKeyword, identifier, callSignature, block, semicolonToken, false);
};
NormalModeFactory.prototype.variableStatement = function (modifiers, variableDeclaration, semicolonToken) {
return new TypeScript.VariableStatementSyntax(modifiers, variableDeclaration, semicolonToken, false);
};
NormalModeFactory.prototype.variableDeclaration = function (varKeyword, variableDeclarators) {
return new TypeScript.VariableDeclarationSyntax(varKeyword, variableDeclarators, false);
};
NormalModeFactory.prototype.variableDeclarator = function (propertyName, typeAnnotation, equalsValueClause) {
return new TypeScript.VariableDeclaratorSyntax(propertyName, typeAnnotation, equalsValueClause, false);
};
NormalModeFactory.prototype.equalsValueClause = function (equalsToken, value) {
return new TypeScript.EqualsValueClauseSyntax(equalsToken, value, false);
};
NormalModeFactory.prototype.prefixUnaryExpression = function (kind, operatorToken, operand) {
return new TypeScript.PrefixUnaryExpressionSyntax(kind, operatorToken, operand, false);
};
NormalModeFactory.prototype.arrayLiteralExpression = function (openBracketToken, expressions, closeBracketToken) {
return new TypeScript.ArrayLiteralExpressionSyntax(openBracketToken, expressions, closeBracketToken, false);
};
NormalModeFactory.prototype.omittedExpression = function () {
return new TypeScript.OmittedExpressionSyntax(false);
};
NormalModeFactory.prototype.parenthesizedExpression = function (openParenToken, expression, closeParenToken) {
return new TypeScript.ParenthesizedExpressionSyntax(openParenToken, expression, closeParenToken, false);
};
NormalModeFactory.prototype.simpleArrowFunctionExpression = function (identifier, equalsGreaterThanToken, block, expression) {
return new TypeScript.SimpleArrowFunctionExpressionSyntax(identifier, equalsGreaterThanToken, block, expression, false);
};
NormalModeFactory.prototype.parenthesizedArrowFunctionExpression = function (callSignature, equalsGreaterThanToken, block, expression) {
return new TypeScript.ParenthesizedArrowFunctionExpressionSyntax(callSignature, equalsGreaterThanToken, block, expression, false);
};
NormalModeFactory.prototype.qualifiedName = function (left, dotToken, right) {
return new TypeScript.QualifiedNameSyntax(left, dotToken, right, false);
};
NormalModeFactory.prototype.typeArgumentList = function (lessThanToken, typeArguments, greaterThanToken) {
return new TypeScript.TypeArgumentListSyntax(lessThanToken, typeArguments, greaterThanToken, false);
};
NormalModeFactory.prototype.constructorType = function (newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type) {
return new TypeScript.ConstructorTypeSyntax(newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type, false);
};
NormalModeFactory.prototype.functionType = function (typeParameterList, parameterList, equalsGreaterThanToken, type) {
return new TypeScript.FunctionTypeSyntax(typeParameterList, parameterList, equalsGreaterThanToken, type, false);
};
NormalModeFactory.prototype.objectType = function (openBraceToken, typeMembers, closeBraceToken) {
return new TypeScript.ObjectTypeSyntax(openBraceToken, typeMembers, closeBraceToken, false);
};
NormalModeFactory.prototype.arrayType = function (type, openBracketToken, closeBracketToken) {
return new TypeScript.ArrayTypeSyntax(type, openBracketToken, closeBracketToken, false);
};
NormalModeFactory.prototype.genericType = function (name, typeArgumentList) {
return new TypeScript.GenericTypeSyntax(name, typeArgumentList, false);
};
NormalModeFactory.prototype.typeQuery = function (typeOfKeyword, name) {
return new TypeScript.TypeQuerySyntax(typeOfKeyword, name, false);
};
NormalModeFactory.prototype.typeAnnotation = function (colonToken, type) {
return new TypeScript.TypeAnnotationSyntax(colonToken, type, false);
};
NormalModeFactory.prototype.block = function (openBraceToken, statements, closeBraceToken) {
return new TypeScript.BlockSyntax(openBraceToken, statements, closeBraceToken, false);
};
NormalModeFactory.prototype.parameter = function (dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause) {
return new TypeScript.ParameterSyntax(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause, false);
};
NormalModeFactory.prototype.memberAccessExpression = function (expression, dotToken, name) {
return new TypeScript.MemberAccessExpressionSyntax(expression, dotToken, name, false);
};
NormalModeFactory.prototype.postfixUnaryExpression = function (kind, operand, operatorToken) {
return new TypeScript.PostfixUnaryExpressionSyntax(kind, operand, operatorToken, false);
};
NormalModeFactory.prototype.elementAccessExpression = function (expression, openBracketToken, argumentExpression, closeBracketToken) {
return new TypeScript.ElementAccessExpressionSyntax(expression, openBracketToken, argumentExpression, closeBracketToken, false);
};
NormalModeFactory.prototype.invocationExpression = function (expression, argumentList) {
return new TypeScript.InvocationExpressionSyntax(expression, argumentList, false);
};
NormalModeFactory.prototype.argumentList = function (typeArgumentList, openParenToken, _arguments, closeParenToken) {
return new TypeScript.ArgumentListSyntax(typeArgumentList, openParenToken, _arguments, closeParenToken, false);
};
NormalModeFactory.prototype.binaryExpression = function (kind, left, operatorToken, right) {
return new TypeScript.BinaryExpressionSyntax(kind, left, operatorToken, right, false);
};
NormalModeFactory.prototype.conditionalExpression = function (condition, questionToken, whenTrue, colonToken, whenFalse) {
return new TypeScript.ConditionalExpressionSyntax(condition, questionToken, whenTrue, colonToken, whenFalse, false);
};
NormalModeFactory.prototype.constructSignature = function (newKeyword, callSignature) {
return new TypeScript.ConstructSignatureSyntax(newKeyword, callSignature, false);
};
NormalModeFactory.prototype.methodSignature = function (propertyName, questionToken, callSignature) {
return new TypeScript.MethodSignatureSyntax(propertyName, questionToken, callSignature, false);
};
NormalModeFactory.prototype.indexSignature = function (openBracketToken, parameter, closeBracketToken, typeAnnotation) {
return new TypeScript.IndexSignatureSyntax(openBracketToken, parameter, closeBracketToken, typeAnnotation, false);
};
NormalModeFactory.prototype.propertySignature = function (propertyName, questionToken, typeAnnotation) {
return new TypeScript.PropertySignatureSyntax(propertyName, questionToken, typeAnnotation, false);
};
NormalModeFactory.prototype.callSignature = function (typeParameterList, parameterList, typeAnnotation) {
return new TypeScript.CallSignatureSyntax(typeParameterList, parameterList, typeAnnotation, false);
};
NormalModeFactory.prototype.parameterList = function (openParenToken, parameters, closeParenToken) {
return new TypeScript.ParameterListSyntax(openParenToken, parameters, closeParenToken, false);
};
NormalModeFactory.prototype.typeParameterList = function (lessThanToken, typeParameters, greaterThanToken) {
return new TypeScript.TypeParameterListSyntax(lessThanToken, typeParameters, greaterThanToken, false);
};
NormalModeFactory.prototype.typeParameter = function (identifier, constraint) {
return new TypeScript.TypeParameterSyntax(identifier, constraint, false);
};
NormalModeFactory.prototype.constraint = function (extendsKeyword, type) {
return new TypeScript.ConstraintSyntax(extendsKeyword, type, false);
};
NormalModeFactory.prototype.elseClause = function (elseKeyword, statement) {
return new TypeScript.ElseClauseSyntax(elseKeyword, statement, false);
};
NormalModeFactory.prototype.ifStatement = function (ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause) {
return new TypeScript.IfStatementSyntax(ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause, false);
};
NormalModeFactory.prototype.expressionStatement = function (expression, semicolonToken) {
return new TypeScript.ExpressionStatementSyntax(expression, semicolonToken, false);
};
NormalModeFactory.prototype.constructorDeclaration = function (modifiers, constructorKeyword, callSignature, block, semicolonToken) {
return new TypeScript.ConstructorDeclarationSyntax(modifiers, constructorKeyword, callSignature, block, semicolonToken, false);
};
NormalModeFactory.prototype.memberFunctionDeclaration = function (modifiers, propertyName, callSignature, block, semicolonToken) {
return new TypeScript.MemberFunctionDeclarationSyntax(modifiers, propertyName, callSignature, block, semicolonToken, false);
};
NormalModeFactory.prototype.getAccessor = function (modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block) {
return new TypeScript.GetAccessorSyntax(modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block, false);
};
NormalModeFactory.prototype.setAccessor = function (modifiers, setKeyword, propertyName, parameterList, block) {
return new TypeScript.SetAccessorSyntax(modifiers, setKeyword, propertyName, parameterList, block, false);
};
NormalModeFactory.prototype.memberVariableDeclaration = function (modifiers, variableDeclarator, semicolonToken) {
return new TypeScript.MemberVariableDeclarationSyntax(modifiers, variableDeclarator, semicolonToken, false);
};
NormalModeFactory.prototype.indexMemberDeclaration = function (modifiers, indexSignature, semicolonToken) {
return new TypeScript.IndexMemberDeclarationSyntax(modifiers, indexSignature, semicolonToken, false);
};
NormalModeFactory.prototype.throwStatement = function (throwKeyword, expression, semicolonToken) {
return new TypeScript.ThrowStatementSyntax(throwKeyword, expression, semicolonToken, false);
};
NormalModeFactory.prototype.returnStatement = function (returnKeyword, expression, semicolonToken) {
return new TypeScript.ReturnStatementSyntax(returnKeyword, expression, semicolonToken, false);
};
NormalModeFactory.prototype.objectCreationExpression = function (newKeyword, expression, argumentList) {
return new TypeScript.ObjectCreationExpressionSyntax(newKeyword, expression, argumentList, false);
};
NormalModeFactory.prototype.switchStatement = function (switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken) {
return new TypeScript.SwitchStatementSyntax(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken, false);
};
NormalModeFactory.prototype.caseSwitchClause = function (caseKeyword, expression, colonToken, statements) {
return new TypeScript.CaseSwitchClauseSyntax(caseKeyword, expression, colonToken, statements, false);
};
NormalModeFactory.prototype.defaultSwitchClause = function (defaultKeyword, colonToken, statements) {
return new TypeScript.DefaultSwitchClauseSyntax(defaultKeyword, colonToken, statements, false);
};
NormalModeFactory.prototype.breakStatement = function (breakKeyword, identifier, semicolonToken) {
return new TypeScript.BreakStatementSyntax(breakKeyword, identifier, semicolonToken, false);
};
NormalModeFactory.prototype.continueStatement = function (continueKeyword, identifier, semicolonToken) {
return new TypeScript.ContinueStatementSyntax(continueKeyword, identifier, semicolonToken, false);
};
NormalModeFactory.prototype.forStatement = function (forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement) {
return new TypeScript.ForStatementSyntax(forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement, false);
};
NormalModeFactory.prototype.forInStatement = function (forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement) {
return new TypeScript.ForInStatementSyntax(forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement, false);
};
NormalModeFactory.prototype.whileStatement = function (whileKeyword, openParenToken, condition, closeParenToken, statement) {
return new TypeScript.WhileStatementSyntax(whileKeyword, openParenToken, condition, closeParenToken, statement, false);
};
NormalModeFactory.prototype.withStatement = function (withKeyword, openParenToken, condition, closeParenToken, statement) {
return new TypeScript.WithStatementSyntax(withKeyword, openParenToken, condition, closeParenToken, statement, false);
};
NormalModeFactory.prototype.enumDeclaration = function (modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken) {
return new TypeScript.EnumDeclarationSyntax(modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken, false);
};
NormalModeFactory.prototype.enumElement = function (propertyName, equalsValueClause) {
return new TypeScript.EnumElementSyntax(propertyName, equalsValueClause, false);
};
NormalModeFactory.prototype.castExpression = function (lessThanToken, type, greaterThanToken, expression) {
return new TypeScript.CastExpressionSyntax(lessThanToken, type, greaterThanToken, expression, false);
};
NormalModeFactory.prototype.objectLiteralExpression = function (openBraceToken, propertyAssignments, closeBraceToken) {
return new TypeScript.ObjectLiteralExpressionSyntax(openBraceToken, propertyAssignments, closeBraceToken, false);
};
NormalModeFactory.prototype.simplePropertyAssignment = function (propertyName, colonToken, expression) {
return new TypeScript.SimplePropertyAssignmentSyntax(propertyName, colonToken, expression, false);
};
NormalModeFactory.prototype.functionPropertyAssignment = function (propertyName, callSignature, block) {
return new TypeScript.FunctionPropertyAssignmentSyntax(propertyName, callSignature, block, false);
};
NormalModeFactory.prototype.functionExpression = function (functionKeyword, identifier, callSignature, block) {
return new TypeScript.FunctionExpressionSyntax(functionKeyword, identifier, callSignature, block, false);
};
NormalModeFactory.prototype.emptyStatement = function (semicolonToken) {
return new TypeScript.EmptyStatementSyntax(semicolonToken, false);
};
NormalModeFactory.prototype.tryStatement = function (tryKeyword, block, catchClause, finallyClause) {
return new TypeScript.TryStatementSyntax(tryKeyword, block, catchClause, finallyClause, false);
};
NormalModeFactory.prototype.catchClause = function (catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block) {
return new TypeScript.CatchClauseSyntax(catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block, false);
};
NormalModeFactory.prototype.finallyClause = function (finallyKeyword, block) {
return new TypeScript.FinallyClauseSyntax(finallyKeyword, block, false);
};
NormalModeFactory.prototype.labeledStatement = function (identifier, colonToken, statement) {
return new TypeScript.LabeledStatementSyntax(identifier, colonToken, statement, false);
};
NormalModeFactory.prototype.doStatement = function (doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken) {
return new TypeScript.DoStatementSyntax(doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken, false);
};
NormalModeFactory.prototype.typeOfExpression = function (typeOfKeyword, expression) {
return new TypeScript.TypeOfExpressionSyntax(typeOfKeyword, expression, false);
};
NormalModeFactory.prototype.deleteExpression = function (deleteKeyword, expression) {
return new TypeScript.DeleteExpressionSyntax(deleteKeyword, expression, false);
};
NormalModeFactory.prototype.voidExpression = function (voidKeyword, expression) {
return new TypeScript.VoidExpressionSyntax(voidKeyword, expression, false);
};
NormalModeFactory.prototype.debuggerStatement = function (debuggerKeyword, semicolonToken) {
return new TypeScript.DebuggerStatementSyntax(debuggerKeyword, semicolonToken, false);
};
return NormalModeFactory;
})();
Syntax.NormalModeFactory = NormalModeFactory;
var StrictModeFactory = (function () {
function StrictModeFactory() {
}
StrictModeFactory.prototype.sourceUnit = function (moduleElements, endOfFileToken) {
return new TypeScript.SourceUnitSyntax(moduleElements, endOfFileToken, true);
};
StrictModeFactory.prototype.externalModuleReference = function (requireKeyword, openParenToken, stringLiteral, closeParenToken) {
return new TypeScript.ExternalModuleReferenceSyntax(requireKeyword, openParenToken, stringLiteral, closeParenToken, true);
};
StrictModeFactory.prototype.moduleNameModuleReference = function (moduleName) {
return new TypeScript.ModuleNameModuleReferenceSyntax(moduleName, true);
};
StrictModeFactory.prototype.importDeclaration = function (modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken) {
return new TypeScript.ImportDeclarationSyntax(modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken, true);
};
StrictModeFactory.prototype.exportAssignment = function (exportKeyword, equalsToken, identifier, semicolonToken) {
return new TypeScript.ExportAssignmentSyntax(exportKeyword, equalsToken, identifier, semicolonToken, true);
};
StrictModeFactory.prototype.classDeclaration = function (modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken) {
return new TypeScript.ClassDeclarationSyntax(modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken, true);
};
StrictModeFactory.prototype.interfaceDeclaration = function (modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body) {
return new TypeScript.InterfaceDeclarationSyntax(modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body, true);
};
StrictModeFactory.prototype.heritageClause = function (kind, extendsOrImplementsKeyword, typeNames) {
return new TypeScript.HeritageClauseSyntax(kind, extendsOrImplementsKeyword, typeNames, true);
};
StrictModeFactory.prototype.moduleDeclaration = function (modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken) {
return new TypeScript.ModuleDeclarationSyntax(modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken, true);
};
StrictModeFactory.prototype.functionDeclaration = function (modifiers, functionKeyword, identifier, callSignature, block, semicolonToken) {
return new TypeScript.FunctionDeclarationSyntax(modifiers, functionKeyword, identifier, callSignature, block, semicolonToken, true);
};
StrictModeFactory.prototype.variableStatement = function (modifiers, variableDeclaration, semicolonToken) {
return new TypeScript.VariableStatementSyntax(modifiers, variableDeclaration, semicolonToken, true);
};
StrictModeFactory.prototype.variableDeclaration = function (varKeyword, variableDeclarators) {
return new TypeScript.VariableDeclarationSyntax(varKeyword, variableDeclarators, true);
};
StrictModeFactory.prototype.variableDeclarator = function (propertyName, typeAnnotation, equalsValueClause) {
return new TypeScript.VariableDeclaratorSyntax(propertyName, typeAnnotation, equalsValueClause, true);
};
StrictModeFactory.prototype.equalsValueClause = function (equalsToken, value) {
return new TypeScript.EqualsValueClauseSyntax(equalsToken, value, true);
};
StrictModeFactory.prototype.prefixUnaryExpression = function (kind, operatorToken, operand) {
return new TypeScript.PrefixUnaryExpressionSyntax(kind, operatorToken, operand, true);
};
StrictModeFactory.prototype.arrayLiteralExpression = function (openBracketToken, expressions, closeBracketToken) {
return new TypeScript.ArrayLiteralExpressionSyntax(openBracketToken, expressions, closeBracketToken, true);
};
StrictModeFactory.prototype.omittedExpression = function () {
return new TypeScript.OmittedExpressionSyntax(true);
};
StrictModeFactory.prototype.parenthesizedExpression = function (openParenToken, expression, closeParenToken) {
return new TypeScript.ParenthesizedExpressionSyntax(openParenToken, expression, closeParenToken, true);
};
StrictModeFactory.prototype.simpleArrowFunctionExpression = function (identifier, equalsGreaterThanToken, block, expression) {
return new TypeScript.SimpleArrowFunctionExpressionSyntax(identifier, equalsGreaterThanToken, block, expression, true);
};
StrictModeFactory.prototype.parenthesizedArrowFunctionExpression = function (callSignature, equalsGreaterThanToken, block, expression) {
return new TypeScript.ParenthesizedArrowFunctionExpressionSyntax(callSignature, equalsGreaterThanToken, block, expression, true);
};
StrictModeFactory.prototype.qualifiedName = function (left, dotToken, right) {
return new TypeScript.QualifiedNameSyntax(left, dotToken, right, true);
};
StrictModeFactory.prototype.typeArgumentList = function (lessThanToken, typeArguments, greaterThanToken) {
return new TypeScript.TypeArgumentListSyntax(lessThanToken, typeArguments, greaterThanToken, true);
};
StrictModeFactory.prototype.constructorType = function (newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type) {
return new TypeScript.ConstructorTypeSyntax(newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type, true);
};
StrictModeFactory.prototype.functionType = function (typeParameterList, parameterList, equalsGreaterThanToken, type) {
return new TypeScript.FunctionTypeSyntax(typeParameterList, parameterList, equalsGreaterThanToken, type, true);
};
StrictModeFactory.prototype.objectType = function (openBraceToken, typeMembers, closeBraceToken) {
return new TypeScript.ObjectTypeSyntax(openBraceToken, typeMembers, closeBraceToken, true);
};
StrictModeFactory.prototype.arrayType = function (type, openBracketToken, closeBracketToken) {
return new TypeScript.ArrayTypeSyntax(type, openBracketToken, closeBracketToken, true);
};
StrictModeFactory.prototype.genericType = function (name, typeArgumentList) {
return new TypeScript.GenericTypeSyntax(name, typeArgumentList, true);
};
StrictModeFactory.prototype.typeQuery = function (typeOfKeyword, name) {
return new TypeScript.TypeQuerySyntax(typeOfKeyword, name, true);
};
StrictModeFactory.prototype.typeAnnotation = function (colonToken, type) {
return new TypeScript.TypeAnnotationSyntax(colonToken, type, true);
};
StrictModeFactory.prototype.block = function (openBraceToken, statements, closeBraceToken) {
return new TypeScript.BlockSyntax(openBraceToken, statements, closeBraceToken, true);
};
StrictModeFactory.prototype.parameter = function (dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause) {
return new TypeScript.ParameterSyntax(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause, true);
};
StrictModeFactory.prototype.memberAccessExpression = function (expression, dotToken, name) {
return new TypeScript.MemberAccessExpressionSyntax(expression, dotToken, name, true);
};
StrictModeFactory.prototype.postfixUnaryExpression = function (kind, operand, operatorToken) {
return new TypeScript.PostfixUnaryExpressionSyntax(kind, operand, operatorToken, true);
};
StrictModeFactory.prototype.elementAccessExpression = function (expression, openBracketToken, argumentExpression, closeBracketToken) {
return new TypeScript.ElementAccessExpressionSyntax(expression, openBracketToken, argumentExpression, closeBracketToken, true);
};
StrictModeFactory.prototype.invocationExpression = function (expression, argumentList) {
return new TypeScript.InvocationExpressionSyntax(expression, argumentList, true);
};
StrictModeFactory.prototype.argumentList = function (typeArgumentList, openParenToken, _arguments, closeParenToken) {
return new TypeScript.ArgumentListSyntax(typeArgumentList, openParenToken, _arguments, closeParenToken, true);
};
StrictModeFactory.prototype.binaryExpression = function (kind, left, operatorToken, right) {
return new TypeScript.BinaryExpressionSyntax(kind, left, operatorToken, right, true);
};
StrictModeFactory.prototype.conditionalExpression = function (condition, questionToken, whenTrue, colonToken, whenFalse) {
return new TypeScript.ConditionalExpressionSyntax(condition, questionToken, whenTrue, colonToken, whenFalse, true);
};
StrictModeFactory.prototype.constructSignature = function (newKeyword, callSignature) {
return new TypeScript.ConstructSignatureSyntax(newKeyword, callSignature, true);
};
StrictModeFactory.prototype.methodSignature = function (propertyName, questionToken, callSignature) {
return new TypeScript.MethodSignatureSyntax(propertyName, questionToken, callSignature, true);
};
StrictModeFactory.prototype.indexSignature = function (openBracketToken, parameter, closeBracketToken, typeAnnotation) {
return new TypeScript.IndexSignatureSyntax(openBracketToken, parameter, closeBracketToken, typeAnnotation, true);
};
StrictModeFactory.prototype.propertySignature = function (propertyName, questionToken, typeAnnotation) {
return new TypeScript.PropertySignatureSyntax(propertyName, questionToken, typeAnnotation, true);
};
StrictModeFactory.prototype.callSignature = function (typeParameterList, parameterList, typeAnnotation) {
return new TypeScript.CallSignatureSyntax(typeParameterList, parameterList, typeAnnotation, true);
};
StrictModeFactory.prototype.parameterList = function (openParenToken, parameters, closeParenToken) {
return new TypeScript.ParameterListSyntax(openParenToken, parameters, closeParenToken, true);
};
StrictModeFactory.prototype.typeParameterList = function (lessThanToken, typeParameters, greaterThanToken) {
return new TypeScript.TypeParameterListSyntax(lessThanToken, typeParameters, greaterThanToken, true);
};
StrictModeFactory.prototype.typeParameter = function (identifier, constraint) {
return new TypeScript.TypeParameterSyntax(identifier, constraint, true);
};
StrictModeFactory.prototype.constraint = function (extendsKeyword, type) {
return new TypeScript.ConstraintSyntax(extendsKeyword, type, true);
};
StrictModeFactory.prototype.elseClause = function (elseKeyword, statement) {
return new TypeScript.ElseClauseSyntax(elseKeyword, statement, true);
};
StrictModeFactory.prototype.ifStatement = function (ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause) {
return new TypeScript.IfStatementSyntax(ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause, true);
};
StrictModeFactory.prototype.expressionStatement = function (expression, semicolonToken) {
return new TypeScript.ExpressionStatementSyntax(expression, semicolonToken, true);
};
StrictModeFactory.prototype.constructorDeclaration = function (modifiers, constructorKeyword, callSignature, block, semicolonToken) {
return new TypeScript.ConstructorDeclarationSyntax(modifiers, constructorKeyword, callSignature, block, semicolonToken, true);
};
StrictModeFactory.prototype.memberFunctionDeclaration = function (modifiers, propertyName, callSignature, block, semicolonToken) {
return new TypeScript.MemberFunctionDeclarationSyntax(modifiers, propertyName, callSignature, block, semicolonToken, true);
};
StrictModeFactory.prototype.getAccessor = function (modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block) {
return new TypeScript.GetAccessorSyntax(modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block, true);
};
StrictModeFactory.prototype.setAccessor = function (modifiers, setKeyword, propertyName, parameterList, block) {
return new TypeScript.SetAccessorSyntax(modifiers, setKeyword, propertyName, parameterList, block, true);
};
StrictModeFactory.prototype.memberVariableDeclaration = function (modifiers, variableDeclarator, semicolonToken) {
return new TypeScript.MemberVariableDeclarationSyntax(modifiers, variableDeclarator, semicolonToken, true);
};
StrictModeFactory.prototype.indexMemberDeclaration = function (modifiers, indexSignature, semicolonToken) {
return new TypeScript.IndexMemberDeclarationSyntax(modifiers, indexSignature, semicolonToken, true);
};
StrictModeFactory.prototype.throwStatement = function (throwKeyword, expression, semicolonToken) {
return new TypeScript.ThrowStatementSyntax(throwKeyword, expression, semicolonToken, true);
};
StrictModeFactory.prototype.returnStatement = function (returnKeyword, expression, semicolonToken) {
return new TypeScript.ReturnStatementSyntax(returnKeyword, expression, semicolonToken, true);
};
StrictModeFactory.prototype.objectCreationExpression = function (newKeyword, expression, argumentList) {
return new TypeScript.ObjectCreationExpressionSyntax(newKeyword, expression, argumentList, true);
};
StrictModeFactory.prototype.switchStatement = function (switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken) {
return new TypeScript.SwitchStatementSyntax(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken, true);
};
StrictModeFactory.prototype.caseSwitchClause = function (caseKeyword, expression, colonToken, statements) {
return new TypeScript.CaseSwitchClauseSyntax(caseKeyword, expression, colonToken, statements, true);
};
StrictModeFactory.prototype.defaultSwitchClause = function (defaultKeyword, colonToken, statements) {
return new TypeScript.DefaultSwitchClauseSyntax(defaultKeyword, colonToken, statements, true);
};
StrictModeFactory.prototype.breakStatement = function (breakKeyword, identifier, semicolonToken) {
return new TypeScript.BreakStatementSyntax(breakKeyword, identifier, semicolonToken, true);
};
StrictModeFactory.prototype.continueStatement = function (continueKeyword, identifier, semicolonToken) {
return new TypeScript.ContinueStatementSyntax(continueKeyword, identifier, semicolonToken, true);
};
StrictModeFactory.prototype.forStatement = function (forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement) {
return new TypeScript.ForStatementSyntax(forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement, true);
};
StrictModeFactory.prototype.forInStatement = function (forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement) {
return new TypeScript.ForInStatementSyntax(forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement, true);
};
StrictModeFactory.prototype.whileStatement = function (whileKeyword, openParenToken, condition, closeParenToken, statement) {
return new TypeScript.WhileStatementSyntax(whileKeyword, openParenToken, condition, closeParenToken, statement, true);
};
StrictModeFactory.prototype.withStatement = function (withKeyword, openParenToken, condition, closeParenToken, statement) {
return new TypeScript.WithStatementSyntax(withKeyword, openParenToken, condition, closeParenToken, statement, true);
};
StrictModeFactory.prototype.enumDeclaration = function (modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken) {
return new TypeScript.EnumDeclarationSyntax(modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken, true);
};
StrictModeFactory.prototype.enumElement = function (propertyName, equalsValueClause) {
return new TypeScript.EnumElementSyntax(propertyName, equalsValueClause, true);
};
StrictModeFactory.prototype.castExpression = function (lessThanToken, type, greaterThanToken, expression) {
return new TypeScript.CastExpressionSyntax(lessThanToken, type, greaterThanToken, expression, true);
};
StrictModeFactory.prototype.objectLiteralExpression = function (openBraceToken, propertyAssignments, closeBraceToken) {
return new TypeScript.ObjectLiteralExpressionSyntax(openBraceToken, propertyAssignments, closeBraceToken, true);
};
StrictModeFactory.prototype.simplePropertyAssignment = function (propertyName, colonToken, expression) {
return new TypeScript.SimplePropertyAssignmentSyntax(propertyName, colonToken, expression, true);
};
StrictModeFactory.prototype.functionPropertyAssignment = function (propertyName, callSignature, block) {
return new TypeScript.FunctionPropertyAssignmentSyntax(propertyName, callSignature, block, true);
};
StrictModeFactory.prototype.functionExpression = function (functionKeyword, identifier, callSignature, block) {
return new TypeScript.FunctionExpressionSyntax(functionKeyword, identifier, callSignature, block, true);
};
StrictModeFactory.prototype.emptyStatement = function (semicolonToken) {
return new TypeScript.EmptyStatementSyntax(semicolonToken, true);
};
StrictModeFactory.prototype.tryStatement = function (tryKeyword, block, catchClause, finallyClause) {
return new TypeScript.TryStatementSyntax(tryKeyword, block, catchClause, finallyClause, true);
};
StrictModeFactory.prototype.catchClause = function (catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block) {
return new TypeScript.CatchClauseSyntax(catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block, true);
};
StrictModeFactory.prototype.finallyClause = function (finallyKeyword, block) {
return new TypeScript.FinallyClauseSyntax(finallyKeyword, block, true);
};
StrictModeFactory.prototype.labeledStatement = function (identifier, colonToken, statement) {
return new TypeScript.LabeledStatementSyntax(identifier, colonToken, statement, true);
};
StrictModeFactory.prototype.doStatement = function (doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken) {
return new TypeScript.DoStatementSyntax(doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken, true);
};
StrictModeFactory.prototype.typeOfExpression = function (typeOfKeyword, expression) {
return new TypeScript.TypeOfExpressionSyntax(typeOfKeyword, expression, true);
};
StrictModeFactory.prototype.deleteExpression = function (deleteKeyword, expression) {
return new TypeScript.DeleteExpressionSyntax(deleteKeyword, expression, true);
};
StrictModeFactory.prototype.voidExpression = function (voidKeyword, expression) {
return new TypeScript.VoidExpressionSyntax(voidKeyword, expression, true);
};
StrictModeFactory.prototype.debuggerStatement = function (debuggerKeyword, semicolonToken) {
return new TypeScript.DebuggerStatementSyntax(debuggerKeyword, semicolonToken, true);
};
return StrictModeFactory;
})();
Syntax.StrictModeFactory = StrictModeFactory;
Syntax.normalModeFactory = new NormalModeFactory();
Syntax.strictModeFactory = new StrictModeFactory();
})(TypeScript.Syntax || (TypeScript.Syntax = {}));
var Syntax = TypeScript.Syntax;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (SyntaxFacts) {
function isDirectivePrologueElement(node) {
if (node.kind() === 149 /* ExpressionStatement */) {
var expressionStatement = node;
var expression = expressionStatement.expression;
if (expression.kind() === 14 /* StringLiteral */) {
return true;
}
}
return false;
}
SyntaxFacts.isDirectivePrologueElement = isDirectivePrologueElement;
function isUseStrictDirective(node) {
var expressionStatement = node;
var stringLiteral = expressionStatement.expression;
var text = stringLiteral.text();
return text === '"use strict"' || text === "'use strict'";
}
SyntaxFacts.isUseStrictDirective = isUseStrictDirective;
function isIdentifierNameOrAnyKeyword(token) {
var tokenKind = token.tokenKind;
return tokenKind === 11 /* IdentifierName */ || TypeScript.SyntaxFacts.isAnyKeyword(tokenKind);
}
SyntaxFacts.isIdentifierNameOrAnyKeyword = isIdentifierNameOrAnyKeyword;
})(TypeScript.SyntaxFacts || (TypeScript.SyntaxFacts = {}));
var SyntaxFacts = TypeScript.SyntaxFacts;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (Syntax) {
var EmptySyntaxList = (function () {
function EmptySyntaxList() {
}
EmptySyntaxList.prototype.kind = function () {
return 1 /* List */;
};
EmptySyntaxList.prototype.isNode = function () {
return false;
};
EmptySyntaxList.prototype.isToken = function () {
return false;
};
EmptySyntaxList.prototype.isList = function () {
return true;
};
EmptySyntaxList.prototype.isSeparatedList = function () {
return false;
};
EmptySyntaxList.prototype.toJSON = function (key) {
return [];
};
EmptySyntaxList.prototype.childCount = function () {
return 0;
};
EmptySyntaxList.prototype.childAt = function (index) {
throw TypeScript.Errors.argumentOutOfRange("index");
};
EmptySyntaxList.prototype.toArray = function () {
return [];
};
EmptySyntaxList.prototype.collectTextElements = function (elements) {
};
EmptySyntaxList.prototype.firstToken = function () {
return null;
};
EmptySyntaxList.prototype.lastToken = function () {
return null;
};
EmptySyntaxList.prototype.fullWidth = function () {
return 0;
};
EmptySyntaxList.prototype.width = function () {
return 0;
};
EmptySyntaxList.prototype.leadingTrivia = function () {
return TypeScript.Syntax.emptyTriviaList;
};
EmptySyntaxList.prototype.trailingTrivia = function () {
return TypeScript.Syntax.emptyTriviaList;
};
EmptySyntaxList.prototype.leadingTriviaWidth = function () {
return 0;
};
EmptySyntaxList.prototype.trailingTriviaWidth = function () {
return 0;
};
EmptySyntaxList.prototype.fullText = function () {
return "";
};
EmptySyntaxList.prototype.isTypeScriptSpecific = function () {
return false;
};
EmptySyntaxList.prototype.isIncrementallyUnusable = function () {
return false;
};
EmptySyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) {
throw TypeScript.Errors.invalidOperation();
};
EmptySyntaxList.prototype.insertChildrenInto = function (array, index) {
};
return EmptySyntaxList;
})();
Syntax.EmptySyntaxList = EmptySyntaxList;
Syntax.emptyList = new EmptySyntaxList();
var SingletonSyntaxList = (function () {
function SingletonSyntaxList(item) {
this.item = item;
}
SingletonSyntaxList.prototype.kind = function () {
return 1 /* List */;
};
SingletonSyntaxList.prototype.isToken = function () {
return false;
};
SingletonSyntaxList.prototype.isNode = function () {
return false;
};
SingletonSyntaxList.prototype.isList = function () {
return true;
};
SingletonSyntaxList.prototype.isSeparatedList = function () {
return false;
};
SingletonSyntaxList.prototype.toJSON = function (key) {
return [this.item];
};
SingletonSyntaxList.prototype.childCount = function () {
return 1;
};
SingletonSyntaxList.prototype.childAt = function (index) {
if (index !== 0) {
throw TypeScript.Errors.argumentOutOfRange("index");
}
return this.item;
};
SingletonSyntaxList.prototype.toArray = function () {
return [this.item];
};
SingletonSyntaxList.prototype.collectTextElements = function (elements) {
this.item.collectTextElements(elements);
};
SingletonSyntaxList.prototype.firstToken = function () {
return this.item.firstToken();
};
SingletonSyntaxList.prototype.lastToken = function () {
return this.item.lastToken();
};
SingletonSyntaxList.prototype.fullWidth = function () {
return this.item.fullWidth();
};
SingletonSyntaxList.prototype.width = function () {
return this.item.width();
};
SingletonSyntaxList.prototype.leadingTrivia = function () {
return this.item.leadingTrivia();
};
SingletonSyntaxList.prototype.trailingTrivia = function () {
return this.item.trailingTrivia();
};
SingletonSyntaxList.prototype.leadingTriviaWidth = function () {
return this.item.leadingTriviaWidth();
};
SingletonSyntaxList.prototype.trailingTriviaWidth = function () {
return this.item.trailingTriviaWidth();
};
SingletonSyntaxList.prototype.fullText = function () {
return this.item.fullText();
};
SingletonSyntaxList.prototype.isTypeScriptSpecific = function () {
return this.item.isTypeScriptSpecific();
};
SingletonSyntaxList.prototype.isIncrementallyUnusable = function () {
return this.item.isIncrementallyUnusable();
};
SingletonSyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) {
return this.item.findTokenInternal(new TypeScript.PositionedList(parent, this, fullStart), position, fullStart);
};
SingletonSyntaxList.prototype.insertChildrenInto = function (array, index) {
array.splice(index, 0, this.item);
};
return SingletonSyntaxList;
})();
var NormalSyntaxList = (function () {
function NormalSyntaxList(nodeOrTokens) {
this._data = 0;
this.nodeOrTokens = nodeOrTokens;
}
NormalSyntaxList.prototype.kind = function () {
return 1 /* List */;
};
NormalSyntaxList.prototype.isNode = function () {
return false;
};
NormalSyntaxList.prototype.isToken = function () {
return false;
};
NormalSyntaxList.prototype.isList = function () {
return true;
};
NormalSyntaxList.prototype.isSeparatedList = function () {
return false;
};
NormalSyntaxList.prototype.toJSON = function (key) {
return this.nodeOrTokens;
};
NormalSyntaxList.prototype.childCount = function () {
return this.nodeOrTokens.length;
};
NormalSyntaxList.prototype.childAt = function (index) {
if (index < 0 || index >= this.nodeOrTokens.length) {
throw TypeScript.Errors.argumentOutOfRange("index");
}
return this.nodeOrTokens[index];
};
NormalSyntaxList.prototype.toArray = function () {
return this.nodeOrTokens.slice(0);
};
NormalSyntaxList.prototype.collectTextElements = function (elements) {
for (var i = 0, n = this.nodeOrTokens.length; i < n; i++) {
var element = this.nodeOrTokens[i];
element.collectTextElements(elements);
}
};
NormalSyntaxList.prototype.firstToken = function () {
for (var i = 0, n = this.nodeOrTokens.length; i < n; i++) {
var token = this.nodeOrTokens[i].firstToken();
if (token !== null) {
return token;
}
}
return null;
};
NormalSyntaxList.prototype.lastToken = function () {
for (var i = this.nodeOrTokens.length - 1; i >= 0; i--) {
var token = this.nodeOrTokens[i].lastToken();
if (token !== null) {
return token;
}
}
return null;
};
NormalSyntaxList.prototype.fullText = function () {
var elements = new Array();
this.collectTextElements(elements);
return elements.join("");
};
NormalSyntaxList.prototype.isTypeScriptSpecific = function () {
for (var i = 0, n = this.nodeOrTokens.length; i < n; i++) {
if (this.nodeOrTokens[i].isTypeScriptSpecific()) {
return true;
}
}
return false;
};
NormalSyntaxList.prototype.isIncrementallyUnusable = function () {
return (this.data() & 2 /* NodeIncrementallyUnusableMask */) !== 0;
};
NormalSyntaxList.prototype.fullWidth = function () {
return this.data() >>> 3 /* NodeFullWidthShift */;
};
NormalSyntaxList.prototype.width = function () {
var fullWidth = this.fullWidth();
return fullWidth - this.leadingTriviaWidth() - this.trailingTriviaWidth();
};
NormalSyntaxList.prototype.leadingTrivia = function () {
return this.firstToken().leadingTrivia();
};
NormalSyntaxList.prototype.trailingTrivia = function () {
return this.lastToken().trailingTrivia();
};
NormalSyntaxList.prototype.leadingTriviaWidth = function () {
return this.firstToken().leadingTriviaWidth();
};
NormalSyntaxList.prototype.trailingTriviaWidth = function () {
return this.lastToken().trailingTriviaWidth();
};
NormalSyntaxList.prototype.computeData = function () {
var fullWidth = 0;
var isIncrementallyUnusable = false;
for (var i = 0, n = this.nodeOrTokens.length; i < n; i++) {
var node = this.nodeOrTokens[i];
fullWidth += node.fullWidth();
isIncrementallyUnusable = isIncrementallyUnusable || node.isIncrementallyUnusable();
}
return (fullWidth << 3 /* NodeFullWidthShift */) | (isIncrementallyUnusable ? 2 /* NodeIncrementallyUnusableMask */ : 0) | 1 /* NodeDataComputed */;
};
NormalSyntaxList.prototype.data = function () {
if ((this._data & 1 /* NodeDataComputed */) === 0) {
this._data = this.computeData();
}
return this._data;
};
NormalSyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) {
parent = new TypeScript.PositionedList(parent, this, fullStart);
for (var i = 0, n = this.nodeOrTokens.length; i < n; i++) {
var nodeOrToken = this.nodeOrTokens[i];
var childWidth = nodeOrToken.fullWidth();
if (position < childWidth) {
return nodeOrToken.findTokenInternal(parent, position, fullStart);
}
position -= childWidth;
fullStart += childWidth;
}
throw TypeScript.Errors.invalidOperation();
};
NormalSyntaxList.prototype.insertChildrenInto = function (array, index) {
if (index === 0) {
array.unshift.apply(array, this.nodeOrTokens);
} else {
array.splice.apply(array, [index, 0].concat(this.nodeOrTokens));
}
};
return NormalSyntaxList;
})();
function list(nodes) {
if (nodes === undefined || nodes === null || nodes.length === 0) {
return Syntax.emptyList;
}
if (nodes.length === 1) {
var item = nodes[0];
return new SingletonSyntaxList(item);
}
return new NormalSyntaxList(nodes);
}
Syntax.list = list;
})(TypeScript.Syntax || (TypeScript.Syntax = {}));
var Syntax = TypeScript.Syntax;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var SyntaxNode = (function () {
function SyntaxNode(parsedInStrictMode) {
this._data = parsedInStrictMode ? 4 /* NodeParsedInStrictModeMask */ : 0;
}
SyntaxNode.prototype.isNode = function () {
return true;
};
SyntaxNode.prototype.isToken = function () {
return false;
};
SyntaxNode.prototype.isList = function () {
return false;
};
SyntaxNode.prototype.isSeparatedList = function () {
return false;
};
SyntaxNode.prototype.kind = function () {
throw TypeScript.Errors.abstract();
};
SyntaxNode.prototype.childCount = function () {
throw TypeScript.Errors.abstract();
};
SyntaxNode.prototype.childAt = function (slot) {
throw TypeScript.Errors.abstract();
};
SyntaxNode.prototype.firstToken = function () {
for (var i = 0, n = this.childCount(); i < n; i++) {
var element = this.childAt(i);
if (element !== null) {
if (element.fullWidth() > 0 || element.kind() === 10 /* EndOfFileToken */) {
return element.firstToken();
}
}
}
return null;
};
SyntaxNode.prototype.lastToken = function () {
for (var i = this.childCount() - 1; i >= 0; i--) {
var element = this.childAt(i);
if (element !== null) {
if (element.fullWidth() > 0 || element.kind() === 10 /* EndOfFileToken */) {
return element.lastToken();
}
}
}
return null;
};
SyntaxNode.prototype.insertChildrenInto = function (array, index) {
for (var i = this.childCount() - 1; i >= 0; i--) {
var element = this.childAt(i);
if (element !== null) {
if (element.isNode() || element.isToken()) {
array.splice(index, 0, element);
} else if (element.isList()) {
element.insertChildrenInto(array, index);
} else if (element.isSeparatedList()) {
element.insertChildrenInto(array, index);
} else {
throw TypeScript.Errors.invalidOperation();
}
}
}
};
SyntaxNode.prototype.leadingTrivia = function () {
var firstToken = this.firstToken();
return firstToken ? firstToken.leadingTrivia() : TypeScript.Syntax.emptyTriviaList;
};
SyntaxNode.prototype.trailingTrivia = function () {
var lastToken = this.lastToken();
return lastToken ? lastToken.trailingTrivia() : TypeScript.Syntax.emptyTriviaList;
};
SyntaxNode.prototype.toJSON = function (key) {
var result = {
kind: TypeScript.SyntaxKind[this.kind()],
fullWidth: this.fullWidth()
};
if (this.isIncrementallyUnusable()) {
result.isIncrementallyUnusable = true;
}
if (this.parsedInStrictMode()) {
result.parsedInStrictMode = true;
}
var thisAsIndexable = this;
for (var i = 0, n = this.childCount(); i < n; i++) {
var value = this.childAt(i);
if (value) {
for (var name in this) {
if (value === thisAsIndexable[name]) {
result[name] = value;
break;
}
}
}
}
return result;
};
SyntaxNode.prototype.accept = function (visitor) {
throw TypeScript.Errors.abstract();
};
SyntaxNode.prototype.fullText = function () {
var elements = [];
this.collectTextElements(elements);
return elements.join("");
};
SyntaxNode.prototype.collectTextElements = function (elements) {
for (var i = 0, n = this.childCount(); i < n; i++) {
var element = this.childAt(i);
if (element !== null) {
element.collectTextElements(elements);
}
}
};
SyntaxNode.prototype.replaceToken = function (token1, token2) {
if (token1 === token2) {
return this;
}
return this.accept(new TypeScript.SyntaxTokenReplacer(token1, token2));
};
SyntaxNode.prototype.withLeadingTrivia = function (trivia) {
return this.replaceToken(this.firstToken(), this.firstToken().withLeadingTrivia(trivia));
};
SyntaxNode.prototype.withTrailingTrivia = function (trivia) {
return this.replaceToken(this.lastToken(), this.lastToken().withTrailingTrivia(trivia));
};
SyntaxNode.prototype.hasLeadingTrivia = function () {
return this.lastToken().hasLeadingTrivia();
};
SyntaxNode.prototype.hasTrailingTrivia = function () {
return this.lastToken().hasTrailingTrivia();
};
SyntaxNode.prototype.isTypeScriptSpecific = function () {
return false;
};
SyntaxNode.prototype.isIncrementallyUnusable = function () {
return (this.data() & 2 /* NodeIncrementallyUnusableMask */) !== 0;
};
SyntaxNode.prototype.parsedInStrictMode = function () {
return (this.data() & 4 /* NodeParsedInStrictModeMask */) !== 0;
};
SyntaxNode.prototype.fullWidth = function () {
return this.data() >>> 3 /* NodeFullWidthShift */;
};
SyntaxNode.prototype.computeData = function () {
var slotCount = this.childCount();
var fullWidth = 0;
var childWidth = 0;
var isIncrementallyUnusable = ((this._data & 2 /* NodeIncrementallyUnusableMask */) !== 0) || slotCount === 0;
for (var i = 0, n = slotCount; i < n; i++) {
var element = this.childAt(i);
if (element !== null) {
childWidth = element.fullWidth();
fullWidth += childWidth;
if (!isIncrementallyUnusable) {
isIncrementallyUnusable = element.isIncrementallyUnusable();
}
}
}
return (fullWidth << 3 /* NodeFullWidthShift */) | (isIncrementallyUnusable ? 2 /* NodeIncrementallyUnusableMask */ : 0) | 1 /* NodeDataComputed */;
};
SyntaxNode.prototype.data = function () {
if ((this._data & 1 /* NodeDataComputed */) === 0) {
this._data |= this.computeData();
}
return this._data;
};
SyntaxNode.prototype.findToken = function (position, includeSkippedTokens) {
if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; }
var endOfFileToken = this.tryGetEndOfFileAt(position);
if (endOfFileToken !== null) {
return endOfFileToken;
}
if (position < 0 || position >= this.fullWidth()) {
throw TypeScript.Errors.argumentOutOfRange("position");
}
var positionedToken = this.findTokenInternal(null, position, 0);
if (includeSkippedTokens) {
return TypeScript.Syntax.findSkippedTokenInPositionedToken(positionedToken, position) || positionedToken;
}
return positionedToken;
};
SyntaxNode.prototype.tryGetEndOfFileAt = function (position) {
if (this.kind() === 120 /* SourceUnit */ && position === this.fullWidth()) {
var sourceUnit = this;
return new TypeScript.PositionedToken(new TypeScript.PositionedNode(null, sourceUnit, 0), sourceUnit.endOfFileToken, sourceUnit.moduleElements.fullWidth());
}
return null;
};
SyntaxNode.prototype.findTokenInternal = function (parent, position, fullStart) {
parent = new TypeScript.PositionedNode(parent, this, fullStart);
for (var i = 0, n = this.childCount(); i < n; i++) {
var element = this.childAt(i);
if (element !== null) {
var childWidth = element.fullWidth();
if (position < childWidth) {
return element.findTokenInternal(parent, position, fullStart);
}
position -= childWidth;
fullStart += childWidth;
}
}
throw TypeScript.Errors.invalidOperation();
};
SyntaxNode.prototype.findTokenOnLeft = function (position, includeSkippedTokens) {
if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; }
var positionedToken = this.findToken(position, false);
var start = positionedToken.start();
if (includeSkippedTokens) {
positionedToken = TypeScript.Syntax.findSkippedTokenOnLeft(positionedToken, position) || positionedToken;
}
if (position > start) {
return positionedToken;
}
if (positionedToken.fullStart() === 0) {
return null;
}
return positionedToken.previousToken(includeSkippedTokens);
};
SyntaxNode.prototype.findCompleteTokenOnLeft = function (position, includeSkippedTokens) {
if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; }
var positionedToken = this.findToken(position, false);
if (includeSkippedTokens) {
positionedToken = TypeScript.Syntax.findSkippedTokenOnLeft(positionedToken, position) || positionedToken;
}
if (positionedToken.token().width() > 0 && position >= positionedToken.end()) {
return positionedToken;
}
return positionedToken.previousToken(includeSkippedTokens);
};
SyntaxNode.prototype.isModuleElement = function () {
return false;
};
SyntaxNode.prototype.isClassElement = function () {
return false;
};
SyntaxNode.prototype.isTypeMember = function () {
return false;
};
SyntaxNode.prototype.isStatement = function () {
return false;
};
SyntaxNode.prototype.isExpression = function () {
return false;
};
SyntaxNode.prototype.isSwitchClause = function () {
return false;
};
SyntaxNode.prototype.structuralEquals = function (node) {
if (this === node) {
return true;
}
if (node === null) {
return false;
}
if (this.kind() !== node.kind()) {
return false;
}
for (var i = 0, n = this.childCount(); i < n; i++) {
var element1 = this.childAt(i);
var element2 = node.childAt(i);
if (!TypeScript.Syntax.elementStructuralEquals(element1, element2)) {
return false;
}
}
return true;
};
SyntaxNode.prototype.width = function () {
return this.fullWidth() - this.leadingTriviaWidth() - this.trailingTriviaWidth();
};
SyntaxNode.prototype.leadingTriviaWidth = function () {
var firstToken = this.firstToken();
return firstToken === null ? 0 : firstToken.leadingTriviaWidth();
};
SyntaxNode.prototype.trailingTriviaWidth = function () {
var lastToken = this.lastToken();
return lastToken === null ? 0 : lastToken.trailingTriviaWidth();
};
return SyntaxNode;
})();
TypeScript.SyntaxNode = SyntaxNode;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var SourceUnitSyntax = (function (_super) {
__extends(SourceUnitSyntax, _super);
function SourceUnitSyntax(moduleElements, endOfFileToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.moduleElements = moduleElements;
this.endOfFileToken = endOfFileToken;
}
SourceUnitSyntax.prototype.accept = function (visitor) {
return visitor.visitSourceUnit(this);
};
SourceUnitSyntax.prototype.kind = function () {
return 120 /* SourceUnit */;
};
SourceUnitSyntax.prototype.childCount = function () {
return 2;
};
SourceUnitSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.moduleElements;
case 1:
return this.endOfFileToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
SourceUnitSyntax.prototype.update = function (moduleElements, endOfFileToken) {
if (this.moduleElements === moduleElements && this.endOfFileToken === endOfFileToken) {
return this;
}
return new SourceUnitSyntax(moduleElements, endOfFileToken, this.parsedInStrictMode());
};
SourceUnitSyntax.create = function (endOfFileToken) {
return new SourceUnitSyntax(TypeScript.Syntax.emptyList, endOfFileToken, false);
};
SourceUnitSyntax.create1 = function (endOfFileToken) {
return new SourceUnitSyntax(TypeScript.Syntax.emptyList, endOfFileToken, false);
};
SourceUnitSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
SourceUnitSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
SourceUnitSyntax.prototype.withModuleElements = function (moduleElements) {
return this.update(moduleElements, this.endOfFileToken);
};
SourceUnitSyntax.prototype.withModuleElement = function (moduleElement) {
return this.withModuleElements(TypeScript.Syntax.list([moduleElement]));
};
SourceUnitSyntax.prototype.withEndOfFileToken = function (endOfFileToken) {
return this.update(this.moduleElements, endOfFileToken);
};
SourceUnitSyntax.prototype.isTypeScriptSpecific = function () {
if (this.moduleElements.isTypeScriptSpecific()) {
return true;
}
return false;
};
return SourceUnitSyntax;
})(TypeScript.SyntaxNode);
TypeScript.SourceUnitSyntax = SourceUnitSyntax;
var ExternalModuleReferenceSyntax = (function (_super) {
__extends(ExternalModuleReferenceSyntax, _super);
function ExternalModuleReferenceSyntax(requireKeyword, openParenToken, stringLiteral, closeParenToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.requireKeyword = requireKeyword;
this.openParenToken = openParenToken;
this.stringLiteral = stringLiteral;
this.closeParenToken = closeParenToken;
}
ExternalModuleReferenceSyntax.prototype.accept = function (visitor) {
return visitor.visitExternalModuleReference(this);
};
ExternalModuleReferenceSyntax.prototype.kind = function () {
return 245 /* ExternalModuleReference */;
};
ExternalModuleReferenceSyntax.prototype.childCount = function () {
return 4;
};
ExternalModuleReferenceSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.requireKeyword;
case 1:
return this.openParenToken;
case 2:
return this.stringLiteral;
case 3:
return this.closeParenToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ExternalModuleReferenceSyntax.prototype.isModuleReference = function () {
return true;
};
ExternalModuleReferenceSyntax.prototype.update = function (requireKeyword, openParenToken, stringLiteral, closeParenToken) {
if (this.requireKeyword === requireKeyword && this.openParenToken === openParenToken && this.stringLiteral === stringLiteral && this.closeParenToken === closeParenToken) {
return this;
}
return new ExternalModuleReferenceSyntax(requireKeyword, openParenToken, stringLiteral, closeParenToken, this.parsedInStrictMode());
};
ExternalModuleReferenceSyntax.create1 = function (stringLiteral) {
return new ExternalModuleReferenceSyntax(TypeScript.Syntax.token(66 /* RequireKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), stringLiteral, TypeScript.Syntax.token(73 /* CloseParenToken */), false);
};
ExternalModuleReferenceSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ExternalModuleReferenceSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ExternalModuleReferenceSyntax.prototype.withRequireKeyword = function (requireKeyword) {
return this.update(requireKeyword, this.openParenToken, this.stringLiteral, this.closeParenToken);
};
ExternalModuleReferenceSyntax.prototype.withOpenParenToken = function (openParenToken) {
return this.update(this.requireKeyword, openParenToken, this.stringLiteral, this.closeParenToken);
};
ExternalModuleReferenceSyntax.prototype.withStringLiteral = function (stringLiteral) {
return this.update(this.requireKeyword, this.openParenToken, stringLiteral, this.closeParenToken);
};
ExternalModuleReferenceSyntax.prototype.withCloseParenToken = function (closeParenToken) {
return this.update(this.requireKeyword, this.openParenToken, this.stringLiteral, closeParenToken);
};
ExternalModuleReferenceSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return ExternalModuleReferenceSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ExternalModuleReferenceSyntax = ExternalModuleReferenceSyntax;
var ModuleNameModuleReferenceSyntax = (function (_super) {
__extends(ModuleNameModuleReferenceSyntax, _super);
function ModuleNameModuleReferenceSyntax(moduleName, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.moduleName = moduleName;
}
ModuleNameModuleReferenceSyntax.prototype.accept = function (visitor) {
return visitor.visitModuleNameModuleReference(this);
};
ModuleNameModuleReferenceSyntax.prototype.kind = function () {
return 246 /* ModuleNameModuleReference */;
};
ModuleNameModuleReferenceSyntax.prototype.childCount = function () {
return 1;
};
ModuleNameModuleReferenceSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.moduleName;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ModuleNameModuleReferenceSyntax.prototype.isModuleReference = function () {
return true;
};
ModuleNameModuleReferenceSyntax.prototype.update = function (moduleName) {
if (this.moduleName === moduleName) {
return this;
}
return new ModuleNameModuleReferenceSyntax(moduleName, this.parsedInStrictMode());
};
ModuleNameModuleReferenceSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ModuleNameModuleReferenceSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ModuleNameModuleReferenceSyntax.prototype.withModuleName = function (moduleName) {
return this.update(moduleName);
};
ModuleNameModuleReferenceSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return ModuleNameModuleReferenceSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ModuleNameModuleReferenceSyntax = ModuleNameModuleReferenceSyntax;
var ImportDeclarationSyntax = (function (_super) {
__extends(ImportDeclarationSyntax, _super);
function ImportDeclarationSyntax(modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.modifiers = modifiers;
this.importKeyword = importKeyword;
this.identifier = identifier;
this.equalsToken = equalsToken;
this.moduleReference = moduleReference;
this.semicolonToken = semicolonToken;
}
ImportDeclarationSyntax.prototype.accept = function (visitor) {
return visitor.visitImportDeclaration(this);
};
ImportDeclarationSyntax.prototype.kind = function () {
return 133 /* ImportDeclaration */;
};
ImportDeclarationSyntax.prototype.childCount = function () {
return 6;
};
ImportDeclarationSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.modifiers;
case 1:
return this.importKeyword;
case 2:
return this.identifier;
case 3:
return this.equalsToken;
case 4:
return this.moduleReference;
case 5:
return this.semicolonToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ImportDeclarationSyntax.prototype.isModuleElement = function () {
return true;
};
ImportDeclarationSyntax.prototype.update = function (modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken) {
if (this.modifiers === modifiers && this.importKeyword === importKeyword && this.identifier === identifier && this.equalsToken === equalsToken && this.moduleReference === moduleReference && this.semicolonToken === semicolonToken) {
return this;
}
return new ImportDeclarationSyntax(modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken, this.parsedInStrictMode());
};
ImportDeclarationSyntax.create = function (importKeyword, identifier, equalsToken, moduleReference, semicolonToken) {
return new ImportDeclarationSyntax(TypeScript.Syntax.emptyList, importKeyword, identifier, equalsToken, moduleReference, semicolonToken, false);
};
ImportDeclarationSyntax.create1 = function (identifier, moduleReference) {
return new ImportDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(49 /* ImportKeyword */), identifier, TypeScript.Syntax.token(107 /* EqualsToken */), moduleReference, TypeScript.Syntax.token(78 /* SemicolonToken */), false);
};
ImportDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ImportDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ImportDeclarationSyntax.prototype.withModifiers = function (modifiers) {
return this.update(modifiers, this.importKeyword, this.identifier, this.equalsToken, this.moduleReference, this.semicolonToken);
};
ImportDeclarationSyntax.prototype.withModifier = function (modifier) {
return this.withModifiers(TypeScript.Syntax.list([modifier]));
};
ImportDeclarationSyntax.prototype.withImportKeyword = function (importKeyword) {
return this.update(this.modifiers, importKeyword, this.identifier, this.equalsToken, this.moduleReference, this.semicolonToken);
};
ImportDeclarationSyntax.prototype.withIdentifier = function (identifier) {
return this.update(this.modifiers, this.importKeyword, identifier, this.equalsToken, this.moduleReference, this.semicolonToken);
};
ImportDeclarationSyntax.prototype.withEqualsToken = function (equalsToken) {
return this.update(this.modifiers, this.importKeyword, this.identifier, equalsToken, this.moduleReference, this.semicolonToken);
};
ImportDeclarationSyntax.prototype.withModuleReference = function (moduleReference) {
return this.update(this.modifiers, this.importKeyword, this.identifier, this.equalsToken, moduleReference, this.semicolonToken);
};
ImportDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) {
return this.update(this.modifiers, this.importKeyword, this.identifier, this.equalsToken, this.moduleReference, semicolonToken);
};
ImportDeclarationSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return ImportDeclarationSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ImportDeclarationSyntax = ImportDeclarationSyntax;
var ExportAssignmentSyntax = (function (_super) {
__extends(ExportAssignmentSyntax, _super);
function ExportAssignmentSyntax(exportKeyword, equalsToken, identifier, semicolonToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.exportKeyword = exportKeyword;
this.equalsToken = equalsToken;
this.identifier = identifier;
this.semicolonToken = semicolonToken;
}
ExportAssignmentSyntax.prototype.accept = function (visitor) {
return visitor.visitExportAssignment(this);
};
ExportAssignmentSyntax.prototype.kind = function () {
return 134 /* ExportAssignment */;
};
ExportAssignmentSyntax.prototype.childCount = function () {
return 4;
};
ExportAssignmentSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.exportKeyword;
case 1:
return this.equalsToken;
case 2:
return this.identifier;
case 3:
return this.semicolonToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ExportAssignmentSyntax.prototype.isModuleElement = function () {
return true;
};
ExportAssignmentSyntax.prototype.update = function (exportKeyword, equalsToken, identifier, semicolonToken) {
if (this.exportKeyword === exportKeyword && this.equalsToken === equalsToken && this.identifier === identifier && this.semicolonToken === semicolonToken) {
return this;
}
return new ExportAssignmentSyntax(exportKeyword, equalsToken, identifier, semicolonToken, this.parsedInStrictMode());
};
ExportAssignmentSyntax.create1 = function (identifier) {
return new ExportAssignmentSyntax(TypeScript.Syntax.token(47 /* ExportKeyword */), TypeScript.Syntax.token(107 /* EqualsToken */), identifier, TypeScript.Syntax.token(78 /* SemicolonToken */), false);
};
ExportAssignmentSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ExportAssignmentSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ExportAssignmentSyntax.prototype.withExportKeyword = function (exportKeyword) {
return this.update(exportKeyword, this.equalsToken, this.identifier, this.semicolonToken);
};
ExportAssignmentSyntax.prototype.withEqualsToken = function (equalsToken) {
return this.update(this.exportKeyword, equalsToken, this.identifier, this.semicolonToken);
};
ExportAssignmentSyntax.prototype.withIdentifier = function (identifier) {
return this.update(this.exportKeyword, this.equalsToken, identifier, this.semicolonToken);
};
ExportAssignmentSyntax.prototype.withSemicolonToken = function (semicolonToken) {
return this.update(this.exportKeyword, this.equalsToken, this.identifier, semicolonToken);
};
ExportAssignmentSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return ExportAssignmentSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ExportAssignmentSyntax = ExportAssignmentSyntax;
var ClassDeclarationSyntax = (function (_super) {
__extends(ClassDeclarationSyntax, _super);
function ClassDeclarationSyntax(modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.modifiers = modifiers;
this.classKeyword = classKeyword;
this.identifier = identifier;
this.typeParameterList = typeParameterList;
this.heritageClauses = heritageClauses;
this.openBraceToken = openBraceToken;
this.classElements = classElements;
this.closeBraceToken = closeBraceToken;
}
ClassDeclarationSyntax.prototype.accept = function (visitor) {
return visitor.visitClassDeclaration(this);
};
ClassDeclarationSyntax.prototype.kind = function () {
return 131 /* ClassDeclaration */;
};
ClassDeclarationSyntax.prototype.childCount = function () {
return 8;
};
ClassDeclarationSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.modifiers;
case 1:
return this.classKeyword;
case 2:
return this.identifier;
case 3:
return this.typeParameterList;
case 4:
return this.heritageClauses;
case 5:
return this.openBraceToken;
case 6:
return this.classElements;
case 7:
return this.closeBraceToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ClassDeclarationSyntax.prototype.isModuleElement = function () {
return true;
};
ClassDeclarationSyntax.prototype.update = function (modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken) {
if (this.modifiers === modifiers && this.classKeyword === classKeyword && this.identifier === identifier && this.typeParameterList === typeParameterList && this.heritageClauses === heritageClauses && this.openBraceToken === openBraceToken && this.classElements === classElements && this.closeBraceToken === closeBraceToken) {
return this;
}
return new ClassDeclarationSyntax(modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken, this.parsedInStrictMode());
};
ClassDeclarationSyntax.create = function (classKeyword, identifier, openBraceToken, closeBraceToken) {
return new ClassDeclarationSyntax(TypeScript.Syntax.emptyList, classKeyword, identifier, null, TypeScript.Syntax.emptyList, openBraceToken, TypeScript.Syntax.emptyList, closeBraceToken, false);
};
ClassDeclarationSyntax.create1 = function (identifier) {
return new ClassDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(44 /* ClassKeyword */), identifier, null, TypeScript.Syntax.emptyList, TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptyList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false);
};
ClassDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ClassDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ClassDeclarationSyntax.prototype.withModifiers = function (modifiers) {
return this.update(modifiers, this.classKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.openBraceToken, this.classElements, this.closeBraceToken);
};
ClassDeclarationSyntax.prototype.withModifier = function (modifier) {
return this.withModifiers(TypeScript.Syntax.list([modifier]));
};
ClassDeclarationSyntax.prototype.withClassKeyword = function (classKeyword) {
return this.update(this.modifiers, classKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.openBraceToken, this.classElements, this.closeBraceToken);
};
ClassDeclarationSyntax.prototype.withIdentifier = function (identifier) {
return this.update(this.modifiers, this.classKeyword, identifier, this.typeParameterList, this.heritageClauses, this.openBraceToken, this.classElements, this.closeBraceToken);
};
ClassDeclarationSyntax.prototype.withTypeParameterList = function (typeParameterList) {
return this.update(this.modifiers, this.classKeyword, this.identifier, typeParameterList, this.heritageClauses, this.openBraceToken, this.classElements, this.closeBraceToken);
};
ClassDeclarationSyntax.prototype.withHeritageClauses = function (heritageClauses) {
return this.update(this.modifiers, this.classKeyword, this.identifier, this.typeParameterList, heritageClauses, this.openBraceToken, this.classElements, this.closeBraceToken);
};
ClassDeclarationSyntax.prototype.withHeritageClause = function (heritageClause) {
return this.withHeritageClauses(TypeScript.Syntax.list([heritageClause]));
};
ClassDeclarationSyntax.prototype.withOpenBraceToken = function (openBraceToken) {
return this.update(this.modifiers, this.classKeyword, this.identifier, this.typeParameterList, this.heritageClauses, openBraceToken, this.classElements, this.closeBraceToken);
};
ClassDeclarationSyntax.prototype.withClassElements = function (classElements) {
return this.update(this.modifiers, this.classKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.openBraceToken, classElements, this.closeBraceToken);
};
ClassDeclarationSyntax.prototype.withClassElement = function (classElement) {
return this.withClassElements(TypeScript.Syntax.list([classElement]));
};
ClassDeclarationSyntax.prototype.withCloseBraceToken = function (closeBraceToken) {
return this.update(this.modifiers, this.classKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.openBraceToken, this.classElements, closeBraceToken);
};
ClassDeclarationSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return ClassDeclarationSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ClassDeclarationSyntax = ClassDeclarationSyntax;
var InterfaceDeclarationSyntax = (function (_super) {
__extends(InterfaceDeclarationSyntax, _super);
function InterfaceDeclarationSyntax(modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.modifiers = modifiers;
this.interfaceKeyword = interfaceKeyword;
this.identifier = identifier;
this.typeParameterList = typeParameterList;
this.heritageClauses = heritageClauses;
this.body = body;
}
InterfaceDeclarationSyntax.prototype.accept = function (visitor) {
return visitor.visitInterfaceDeclaration(this);
};
InterfaceDeclarationSyntax.prototype.kind = function () {
return 128 /* InterfaceDeclaration */;
};
InterfaceDeclarationSyntax.prototype.childCount = function () {
return 6;
};
InterfaceDeclarationSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.modifiers;
case 1:
return this.interfaceKeyword;
case 2:
return this.identifier;
case 3:
return this.typeParameterList;
case 4:
return this.heritageClauses;
case 5:
return this.body;
default:
throw TypeScript.Errors.invalidOperation();
}
};
InterfaceDeclarationSyntax.prototype.isModuleElement = function () {
return true;
};
InterfaceDeclarationSyntax.prototype.update = function (modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body) {
if (this.modifiers === modifiers && this.interfaceKeyword === interfaceKeyword && this.identifier === identifier && this.typeParameterList === typeParameterList && this.heritageClauses === heritageClauses && this.body === body) {
return this;
}
return new InterfaceDeclarationSyntax(modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body, this.parsedInStrictMode());
};
InterfaceDeclarationSyntax.create = function (interfaceKeyword, identifier, body) {
return new InterfaceDeclarationSyntax(TypeScript.Syntax.emptyList, interfaceKeyword, identifier, null, TypeScript.Syntax.emptyList, body, false);
};
InterfaceDeclarationSyntax.create1 = function (identifier) {
return new InterfaceDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(52 /* InterfaceKeyword */), identifier, null, TypeScript.Syntax.emptyList, ObjectTypeSyntax.create1(), false);
};
InterfaceDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
InterfaceDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
InterfaceDeclarationSyntax.prototype.withModifiers = function (modifiers) {
return this.update(modifiers, this.interfaceKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.body);
};
InterfaceDeclarationSyntax.prototype.withModifier = function (modifier) {
return this.withModifiers(TypeScript.Syntax.list([modifier]));
};
InterfaceDeclarationSyntax.prototype.withInterfaceKeyword = function (interfaceKeyword) {
return this.update(this.modifiers, interfaceKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.body);
};
InterfaceDeclarationSyntax.prototype.withIdentifier = function (identifier) {
return this.update(this.modifiers, this.interfaceKeyword, identifier, this.typeParameterList, this.heritageClauses, this.body);
};
InterfaceDeclarationSyntax.prototype.withTypeParameterList = function (typeParameterList) {
return this.update(this.modifiers, this.interfaceKeyword, this.identifier, typeParameterList, this.heritageClauses, this.body);
};
InterfaceDeclarationSyntax.prototype.withHeritageClauses = function (heritageClauses) {
return this.update(this.modifiers, this.interfaceKeyword, this.identifier, this.typeParameterList, heritageClauses, this.body);
};
InterfaceDeclarationSyntax.prototype.withHeritageClause = function (heritageClause) {
return this.withHeritageClauses(TypeScript.Syntax.list([heritageClause]));
};
InterfaceDeclarationSyntax.prototype.withBody = function (body) {
return this.update(this.modifiers, this.interfaceKeyword, this.identifier, this.typeParameterList, this.heritageClauses, body);
};
InterfaceDeclarationSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return InterfaceDeclarationSyntax;
})(TypeScript.SyntaxNode);
TypeScript.InterfaceDeclarationSyntax = InterfaceDeclarationSyntax;
var HeritageClauseSyntax = (function (_super) {
__extends(HeritageClauseSyntax, _super);
function HeritageClauseSyntax(kind, extendsOrImplementsKeyword, typeNames, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.extendsOrImplementsKeyword = extendsOrImplementsKeyword;
this.typeNames = typeNames;
this._kind = kind;
}
HeritageClauseSyntax.prototype.accept = function (visitor) {
return visitor.visitHeritageClause(this);
};
HeritageClauseSyntax.prototype.childCount = function () {
return 2;
};
HeritageClauseSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.extendsOrImplementsKeyword;
case 1:
return this.typeNames;
default:
throw TypeScript.Errors.invalidOperation();
}
};
HeritageClauseSyntax.prototype.kind = function () {
return this._kind;
};
HeritageClauseSyntax.prototype.update = function (kind, extendsOrImplementsKeyword, typeNames) {
if (this._kind === kind && this.extendsOrImplementsKeyword === extendsOrImplementsKeyword && this.typeNames === typeNames) {
return this;
}
return new HeritageClauseSyntax(kind, extendsOrImplementsKeyword, typeNames, this.parsedInStrictMode());
};
HeritageClauseSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
HeritageClauseSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
HeritageClauseSyntax.prototype.withKind = function (kind) {
return this.update(kind, this.extendsOrImplementsKeyword, this.typeNames);
};
HeritageClauseSyntax.prototype.withExtendsOrImplementsKeyword = function (extendsOrImplementsKeyword) {
return this.update(this._kind, extendsOrImplementsKeyword, this.typeNames);
};
HeritageClauseSyntax.prototype.withTypeNames = function (typeNames) {
return this.update(this._kind, this.extendsOrImplementsKeyword, typeNames);
};
HeritageClauseSyntax.prototype.withTypeName = function (typeName) {
return this.withTypeNames(TypeScript.Syntax.separatedList([typeName]));
};
HeritageClauseSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return HeritageClauseSyntax;
})(TypeScript.SyntaxNode);
TypeScript.HeritageClauseSyntax = HeritageClauseSyntax;
var ModuleDeclarationSyntax = (function (_super) {
__extends(ModuleDeclarationSyntax, _super);
function ModuleDeclarationSyntax(modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.modifiers = modifiers;
this.moduleKeyword = moduleKeyword;
this.name = name;
this.stringLiteral = stringLiteral;
this.openBraceToken = openBraceToken;
this.moduleElements = moduleElements;
this.closeBraceToken = closeBraceToken;
}
ModuleDeclarationSyntax.prototype.accept = function (visitor) {
return visitor.visitModuleDeclaration(this);
};
ModuleDeclarationSyntax.prototype.kind = function () {
return 130 /* ModuleDeclaration */;
};
ModuleDeclarationSyntax.prototype.childCount = function () {
return 7;
};
ModuleDeclarationSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.modifiers;
case 1:
return this.moduleKeyword;
case 2:
return this.name;
case 3:
return this.stringLiteral;
case 4:
return this.openBraceToken;
case 5:
return this.moduleElements;
case 6:
return this.closeBraceToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ModuleDeclarationSyntax.prototype.isModuleElement = function () {
return true;
};
ModuleDeclarationSyntax.prototype.update = function (modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken) {
if (this.modifiers === modifiers && this.moduleKeyword === moduleKeyword && this.name === name && this.stringLiteral === stringLiteral && this.openBraceToken === openBraceToken && this.moduleElements === moduleElements && this.closeBraceToken === closeBraceToken) {
return this;
}
return new ModuleDeclarationSyntax(modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken, this.parsedInStrictMode());
};
ModuleDeclarationSyntax.create = function (moduleKeyword, openBraceToken, closeBraceToken) {
return new ModuleDeclarationSyntax(TypeScript.Syntax.emptyList, moduleKeyword, null, null, openBraceToken, TypeScript.Syntax.emptyList, closeBraceToken, false);
};
ModuleDeclarationSyntax.create1 = function () {
return new ModuleDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(65 /* ModuleKeyword */), null, null, TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptyList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false);
};
ModuleDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ModuleDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ModuleDeclarationSyntax.prototype.withModifiers = function (modifiers) {
return this.update(modifiers, this.moduleKeyword, this.name, this.stringLiteral, this.openBraceToken, this.moduleElements, this.closeBraceToken);
};
ModuleDeclarationSyntax.prototype.withModifier = function (modifier) {
return this.withModifiers(TypeScript.Syntax.list([modifier]));
};
ModuleDeclarationSyntax.prototype.withModuleKeyword = function (moduleKeyword) {
return this.update(this.modifiers, moduleKeyword, this.name, this.stringLiteral, this.openBraceToken, this.moduleElements, this.closeBraceToken);
};
ModuleDeclarationSyntax.prototype.withName = function (name) {
return this.update(this.modifiers, this.moduleKeyword, name, this.stringLiteral, this.openBraceToken, this.moduleElements, this.closeBraceToken);
};
ModuleDeclarationSyntax.prototype.withStringLiteral = function (stringLiteral) {
return this.update(this.modifiers, this.moduleKeyword, this.name, stringLiteral, this.openBraceToken, this.moduleElements, this.closeBraceToken);
};
ModuleDeclarationSyntax.prototype.withOpenBraceToken = function (openBraceToken) {
return this.update(this.modifiers, this.moduleKeyword, this.name, this.stringLiteral, openBraceToken, this.moduleElements, this.closeBraceToken);
};
ModuleDeclarationSyntax.prototype.withModuleElements = function (moduleElements) {
return this.update(this.modifiers, this.moduleKeyword, this.name, this.stringLiteral, this.openBraceToken, moduleElements, this.closeBraceToken);
};
ModuleDeclarationSyntax.prototype.withModuleElement = function (moduleElement) {
return this.withModuleElements(TypeScript.Syntax.list([moduleElement]));
};
ModuleDeclarationSyntax.prototype.withCloseBraceToken = function (closeBraceToken) {
return this.update(this.modifiers, this.moduleKeyword, this.name, this.stringLiteral, this.openBraceToken, this.moduleElements, closeBraceToken);
};
ModuleDeclarationSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return ModuleDeclarationSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ModuleDeclarationSyntax = ModuleDeclarationSyntax;
var FunctionDeclarationSyntax = (function (_super) {
__extends(FunctionDeclarationSyntax, _super);
function FunctionDeclarationSyntax(modifiers, functionKeyword, identifier, callSignature, block, semicolonToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.modifiers = modifiers;
this.functionKeyword = functionKeyword;
this.identifier = identifier;
this.callSignature = callSignature;
this.block = block;
this.semicolonToken = semicolonToken;
}
FunctionDeclarationSyntax.prototype.accept = function (visitor) {
return visitor.visitFunctionDeclaration(this);
};
FunctionDeclarationSyntax.prototype.kind = function () {
return 129 /* FunctionDeclaration */;
};
FunctionDeclarationSyntax.prototype.childCount = function () {
return 6;
};
FunctionDeclarationSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.modifiers;
case 1:
return this.functionKeyword;
case 2:
return this.identifier;
case 3:
return this.callSignature;
case 4:
return this.block;
case 5:
return this.semicolonToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
FunctionDeclarationSyntax.prototype.isStatement = function () {
return true;
};
FunctionDeclarationSyntax.prototype.isModuleElement = function () {
return true;
};
FunctionDeclarationSyntax.prototype.update = function (modifiers, functionKeyword, identifier, callSignature, block, semicolonToken) {
if (this.modifiers === modifiers && this.functionKeyword === functionKeyword && this.identifier === identifier && this.callSignature === callSignature && this.block === block && this.semicolonToken === semicolonToken) {
return this;
}
return new FunctionDeclarationSyntax(modifiers, functionKeyword, identifier, callSignature, block, semicolonToken, this.parsedInStrictMode());
};
FunctionDeclarationSyntax.create = function (functionKeyword, identifier, callSignature) {
return new FunctionDeclarationSyntax(TypeScript.Syntax.emptyList, functionKeyword, identifier, callSignature, null, null, false);
};
FunctionDeclarationSyntax.create1 = function (identifier) {
return new FunctionDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(27 /* FunctionKeyword */), identifier, CallSignatureSyntax.create1(), null, null, false);
};
FunctionDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
FunctionDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
FunctionDeclarationSyntax.prototype.withModifiers = function (modifiers) {
return this.update(modifiers, this.functionKeyword, this.identifier, this.callSignature, this.block, this.semicolonToken);
};
FunctionDeclarationSyntax.prototype.withModifier = function (modifier) {
return this.withModifiers(TypeScript.Syntax.list([modifier]));
};
FunctionDeclarationSyntax.prototype.withFunctionKeyword = function (functionKeyword) {
return this.update(this.modifiers, functionKeyword, this.identifier, this.callSignature, this.block, this.semicolonToken);
};
FunctionDeclarationSyntax.prototype.withIdentifier = function (identifier) {
return this.update(this.modifiers, this.functionKeyword, identifier, this.callSignature, this.block, this.semicolonToken);
};
FunctionDeclarationSyntax.prototype.withCallSignature = function (callSignature) {
return this.update(this.modifiers, this.functionKeyword, this.identifier, callSignature, this.block, this.semicolonToken);
};
FunctionDeclarationSyntax.prototype.withBlock = function (block) {
return this.update(this.modifiers, this.functionKeyword, this.identifier, this.callSignature, block, this.semicolonToken);
};
FunctionDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) {
return this.update(this.modifiers, this.functionKeyword, this.identifier, this.callSignature, this.block, semicolonToken);
};
FunctionDeclarationSyntax.prototype.isTypeScriptSpecific = function () {
if (this.modifiers.childCount() > 0) {
return true;
}
if (this.callSignature.isTypeScriptSpecific()) {
return true;
}
if (this.block !== null && this.block.isTypeScriptSpecific()) {
return true;
}
return false;
};
return FunctionDeclarationSyntax;
})(TypeScript.SyntaxNode);
TypeScript.FunctionDeclarationSyntax = FunctionDeclarationSyntax;
var VariableStatementSyntax = (function (_super) {
__extends(VariableStatementSyntax, _super);
function VariableStatementSyntax(modifiers, variableDeclaration, semicolonToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.modifiers = modifiers;
this.variableDeclaration = variableDeclaration;
this.semicolonToken = semicolonToken;
}
VariableStatementSyntax.prototype.accept = function (visitor) {
return visitor.visitVariableStatement(this);
};
VariableStatementSyntax.prototype.kind = function () {
return 148 /* VariableStatement */;
};
VariableStatementSyntax.prototype.childCount = function () {
return 3;
};
VariableStatementSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.modifiers;
case 1:
return this.variableDeclaration;
case 2:
return this.semicolonToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
VariableStatementSyntax.prototype.isStatement = function () {
return true;
};
VariableStatementSyntax.prototype.isModuleElement = function () {
return true;
};
VariableStatementSyntax.prototype.update = function (modifiers, variableDeclaration, semicolonToken) {
if (this.modifiers === modifiers && this.variableDeclaration === variableDeclaration && this.semicolonToken === semicolonToken) {
return this;
}
return new VariableStatementSyntax(modifiers, variableDeclaration, semicolonToken, this.parsedInStrictMode());
};
VariableStatementSyntax.create = function (variableDeclaration, semicolonToken) {
return new VariableStatementSyntax(TypeScript.Syntax.emptyList, variableDeclaration, semicolonToken, false);
};
VariableStatementSyntax.create1 = function (variableDeclaration) {
return new VariableStatementSyntax(TypeScript.Syntax.emptyList, variableDeclaration, TypeScript.Syntax.token(78 /* SemicolonToken */), false);
};
VariableStatementSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
VariableStatementSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
VariableStatementSyntax.prototype.withModifiers = function (modifiers) {
return this.update(modifiers, this.variableDeclaration, this.semicolonToken);
};
VariableStatementSyntax.prototype.withModifier = function (modifier) {
return this.withModifiers(TypeScript.Syntax.list([modifier]));
};
VariableStatementSyntax.prototype.withVariableDeclaration = function (variableDeclaration) {
return this.update(this.modifiers, variableDeclaration, this.semicolonToken);
};
VariableStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) {
return this.update(this.modifiers, this.variableDeclaration, semicolonToken);
};
VariableStatementSyntax.prototype.isTypeScriptSpecific = function () {
if (this.modifiers.childCount() > 0) {
return true;
}
if (this.variableDeclaration.isTypeScriptSpecific()) {
return true;
}
return false;
};
return VariableStatementSyntax;
})(TypeScript.SyntaxNode);
TypeScript.VariableStatementSyntax = VariableStatementSyntax;
var VariableDeclarationSyntax = (function (_super) {
__extends(VariableDeclarationSyntax, _super);
function VariableDeclarationSyntax(varKeyword, variableDeclarators, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.varKeyword = varKeyword;
this.variableDeclarators = variableDeclarators;
}
VariableDeclarationSyntax.prototype.accept = function (visitor) {
return visitor.visitVariableDeclaration(this);
};
VariableDeclarationSyntax.prototype.kind = function () {
return 224 /* VariableDeclaration */;
};
VariableDeclarationSyntax.prototype.childCount = function () {
return 2;
};
VariableDeclarationSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.varKeyword;
case 1:
return this.variableDeclarators;
default:
throw TypeScript.Errors.invalidOperation();
}
};
VariableDeclarationSyntax.prototype.update = function (varKeyword, variableDeclarators) {
if (this.varKeyword === varKeyword && this.variableDeclarators === variableDeclarators) {
return this;
}
return new VariableDeclarationSyntax(varKeyword, variableDeclarators, this.parsedInStrictMode());
};
VariableDeclarationSyntax.create1 = function (variableDeclarators) {
return new VariableDeclarationSyntax(TypeScript.Syntax.token(40 /* VarKeyword */), variableDeclarators, false);
};
VariableDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
VariableDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
VariableDeclarationSyntax.prototype.withVarKeyword = function (varKeyword) {
return this.update(varKeyword, this.variableDeclarators);
};
VariableDeclarationSyntax.prototype.withVariableDeclarators = function (variableDeclarators) {
return this.update(this.varKeyword, variableDeclarators);
};
VariableDeclarationSyntax.prototype.withVariableDeclarator = function (variableDeclarator) {
return this.withVariableDeclarators(TypeScript.Syntax.separatedList([variableDeclarator]));
};
VariableDeclarationSyntax.prototype.isTypeScriptSpecific = function () {
if (this.variableDeclarators.isTypeScriptSpecific()) {
return true;
}
return false;
};
return VariableDeclarationSyntax;
})(TypeScript.SyntaxNode);
TypeScript.VariableDeclarationSyntax = VariableDeclarationSyntax;
var VariableDeclaratorSyntax = (function (_super) {
__extends(VariableDeclaratorSyntax, _super);
function VariableDeclaratorSyntax(propertyName, typeAnnotation, equalsValueClause, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.propertyName = propertyName;
this.typeAnnotation = typeAnnotation;
this.equalsValueClause = equalsValueClause;
}
VariableDeclaratorSyntax.prototype.accept = function (visitor) {
return visitor.visitVariableDeclarator(this);
};
VariableDeclaratorSyntax.prototype.kind = function () {
return 225 /* VariableDeclarator */;
};
VariableDeclaratorSyntax.prototype.childCount = function () {
return 3;
};
VariableDeclaratorSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.propertyName;
case 1:
return this.typeAnnotation;
case 2:
return this.equalsValueClause;
default:
throw TypeScript.Errors.invalidOperation();
}
};
VariableDeclaratorSyntax.prototype.update = function (propertyName, typeAnnotation, equalsValueClause) {
if (this.propertyName === propertyName && this.typeAnnotation === typeAnnotation && this.equalsValueClause === equalsValueClause) {
return this;
}
return new VariableDeclaratorSyntax(propertyName, typeAnnotation, equalsValueClause, this.parsedInStrictMode());
};
VariableDeclaratorSyntax.create = function (propertyName) {
return new VariableDeclaratorSyntax(propertyName, null, null, false);
};
VariableDeclaratorSyntax.create1 = function (propertyName) {
return new VariableDeclaratorSyntax(propertyName, null, null, false);
};
VariableDeclaratorSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
VariableDeclaratorSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
VariableDeclaratorSyntax.prototype.withPropertyName = function (propertyName) {
return this.update(propertyName, this.typeAnnotation, this.equalsValueClause);
};
VariableDeclaratorSyntax.prototype.withTypeAnnotation = function (typeAnnotation) {
return this.update(this.propertyName, typeAnnotation, this.equalsValueClause);
};
VariableDeclaratorSyntax.prototype.withEqualsValueClause = function (equalsValueClause) {
return this.update(this.propertyName, this.typeAnnotation, equalsValueClause);
};
VariableDeclaratorSyntax.prototype.isTypeScriptSpecific = function () {
if (this.typeAnnotation !== null) {
return true;
}
if (this.equalsValueClause !== null && this.equalsValueClause.isTypeScriptSpecific()) {
return true;
}
return false;
};
return VariableDeclaratorSyntax;
})(TypeScript.SyntaxNode);
TypeScript.VariableDeclaratorSyntax = VariableDeclaratorSyntax;
var EqualsValueClauseSyntax = (function (_super) {
__extends(EqualsValueClauseSyntax, _super);
function EqualsValueClauseSyntax(equalsToken, value, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.equalsToken = equalsToken;
this.value = value;
}
EqualsValueClauseSyntax.prototype.accept = function (visitor) {
return visitor.visitEqualsValueClause(this);
};
EqualsValueClauseSyntax.prototype.kind = function () {
return 232 /* EqualsValueClause */;
};
EqualsValueClauseSyntax.prototype.childCount = function () {
return 2;
};
EqualsValueClauseSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.equalsToken;
case 1:
return this.value;
default:
throw TypeScript.Errors.invalidOperation();
}
};
EqualsValueClauseSyntax.prototype.update = function (equalsToken, value) {
if (this.equalsToken === equalsToken && this.value === value) {
return this;
}
return new EqualsValueClauseSyntax(equalsToken, value, this.parsedInStrictMode());
};
EqualsValueClauseSyntax.create1 = function (value) {
return new EqualsValueClauseSyntax(TypeScript.Syntax.token(107 /* EqualsToken */), value, false);
};
EqualsValueClauseSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
EqualsValueClauseSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
EqualsValueClauseSyntax.prototype.withEqualsToken = function (equalsToken) {
return this.update(equalsToken, this.value);
};
EqualsValueClauseSyntax.prototype.withValue = function (value) {
return this.update(this.equalsToken, value);
};
EqualsValueClauseSyntax.prototype.isTypeScriptSpecific = function () {
if (this.value.isTypeScriptSpecific()) {
return true;
}
return false;
};
return EqualsValueClauseSyntax;
})(TypeScript.SyntaxNode);
TypeScript.EqualsValueClauseSyntax = EqualsValueClauseSyntax;
var PrefixUnaryExpressionSyntax = (function (_super) {
__extends(PrefixUnaryExpressionSyntax, _super);
function PrefixUnaryExpressionSyntax(kind, operatorToken, operand, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.operatorToken = operatorToken;
this.operand = operand;
this._kind = kind;
}
PrefixUnaryExpressionSyntax.prototype.accept = function (visitor) {
return visitor.visitPrefixUnaryExpression(this);
};
PrefixUnaryExpressionSyntax.prototype.childCount = function () {
return 2;
};
PrefixUnaryExpressionSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.operatorToken;
case 1:
return this.operand;
default:
throw TypeScript.Errors.invalidOperation();
}
};
PrefixUnaryExpressionSyntax.prototype.isUnaryExpression = function () {
return true;
};
PrefixUnaryExpressionSyntax.prototype.isExpression = function () {
return true;
};
PrefixUnaryExpressionSyntax.prototype.kind = function () {
return this._kind;
};
PrefixUnaryExpressionSyntax.prototype.update = function (kind, operatorToken, operand) {
if (this._kind === kind && this.operatorToken === operatorToken && this.operand === operand) {
return this;
}
return new PrefixUnaryExpressionSyntax(kind, operatorToken, operand, this.parsedInStrictMode());
};
PrefixUnaryExpressionSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
PrefixUnaryExpressionSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
PrefixUnaryExpressionSyntax.prototype.withKind = function (kind) {
return this.update(kind, this.operatorToken, this.operand);
};
PrefixUnaryExpressionSyntax.prototype.withOperatorToken = function (operatorToken) {
return this.update(this._kind, operatorToken, this.operand);
};
PrefixUnaryExpressionSyntax.prototype.withOperand = function (operand) {
return this.update(this._kind, this.operatorToken, operand);
};
PrefixUnaryExpressionSyntax.prototype.isTypeScriptSpecific = function () {
if (this.operand.isTypeScriptSpecific()) {
return true;
}
return false;
};
return PrefixUnaryExpressionSyntax;
})(TypeScript.SyntaxNode);
TypeScript.PrefixUnaryExpressionSyntax = PrefixUnaryExpressionSyntax;
var ArrayLiteralExpressionSyntax = (function (_super) {
__extends(ArrayLiteralExpressionSyntax, _super);
function ArrayLiteralExpressionSyntax(openBracketToken, expressions, closeBracketToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.openBracketToken = openBracketToken;
this.expressions = expressions;
this.closeBracketToken = closeBracketToken;
}
ArrayLiteralExpressionSyntax.prototype.accept = function (visitor) {
return visitor.visitArrayLiteralExpression(this);
};
ArrayLiteralExpressionSyntax.prototype.kind = function () {
return 214 /* ArrayLiteralExpression */;
};
ArrayLiteralExpressionSyntax.prototype.childCount = function () {
return 3;
};
ArrayLiteralExpressionSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.openBracketToken;
case 1:
return this.expressions;
case 2:
return this.closeBracketToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ArrayLiteralExpressionSyntax.prototype.isPrimaryExpression = function () {
return true;
};
ArrayLiteralExpressionSyntax.prototype.isMemberExpression = function () {
return true;
};
ArrayLiteralExpressionSyntax.prototype.isPostfixExpression = function () {
return true;
};
ArrayLiteralExpressionSyntax.prototype.isUnaryExpression = function () {
return true;
};
ArrayLiteralExpressionSyntax.prototype.isExpression = function () {
return true;
};
ArrayLiteralExpressionSyntax.prototype.update = function (openBracketToken, expressions, closeBracketToken) {
if (this.openBracketToken === openBracketToken && this.expressions === expressions && this.closeBracketToken === closeBracketToken) {
return this;
}
return new ArrayLiteralExpressionSyntax(openBracketToken, expressions, closeBracketToken, this.parsedInStrictMode());
};
ArrayLiteralExpressionSyntax.create = function (openBracketToken, closeBracketToken) {
return new ArrayLiteralExpressionSyntax(openBracketToken, TypeScript.Syntax.emptySeparatedList, closeBracketToken, false);
};
ArrayLiteralExpressionSyntax.create1 = function () {
return new ArrayLiteralExpressionSyntax(TypeScript.Syntax.token(74 /* OpenBracketToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(75 /* CloseBracketToken */), false);
};
ArrayLiteralExpressionSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ArrayLiteralExpressionSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ArrayLiteralExpressionSyntax.prototype.withOpenBracketToken = function (openBracketToken) {
return this.update(openBracketToken, this.expressions, this.closeBracketToken);
};
ArrayLiteralExpressionSyntax.prototype.withExpressions = function (expressions) {
return this.update(this.openBracketToken, expressions, this.closeBracketToken);
};
ArrayLiteralExpressionSyntax.prototype.withExpression = function (expression) {
return this.withExpressions(TypeScript.Syntax.separatedList([expression]));
};
ArrayLiteralExpressionSyntax.prototype.withCloseBracketToken = function (closeBracketToken) {
return this.update(this.openBracketToken, this.expressions, closeBracketToken);
};
ArrayLiteralExpressionSyntax.prototype.isTypeScriptSpecific = function () {
if (this.expressions.isTypeScriptSpecific()) {
return true;
}
return false;
};
return ArrayLiteralExpressionSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ArrayLiteralExpressionSyntax = ArrayLiteralExpressionSyntax;
var OmittedExpressionSyntax = (function (_super) {
__extends(OmittedExpressionSyntax, _super);
function OmittedExpressionSyntax(parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
}
OmittedExpressionSyntax.prototype.accept = function (visitor) {
return visitor.visitOmittedExpression(this);
};
OmittedExpressionSyntax.prototype.kind = function () {
return 223 /* OmittedExpression */;
};
OmittedExpressionSyntax.prototype.childCount = function () {
return 0;
};
OmittedExpressionSyntax.prototype.childAt = function (slot) {
throw TypeScript.Errors.invalidOperation();
};
OmittedExpressionSyntax.prototype.isExpression = function () {
return true;
};
OmittedExpressionSyntax.prototype.update = function () {
return this;
};
OmittedExpressionSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
OmittedExpressionSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
OmittedExpressionSyntax.prototype.isTypeScriptSpecific = function () {
return false;
};
return OmittedExpressionSyntax;
})(TypeScript.SyntaxNode);
TypeScript.OmittedExpressionSyntax = OmittedExpressionSyntax;
var ParenthesizedExpressionSyntax = (function (_super) {
__extends(ParenthesizedExpressionSyntax, _super);
function ParenthesizedExpressionSyntax(openParenToken, expression, closeParenToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.openParenToken = openParenToken;
this.expression = expression;
this.closeParenToken = closeParenToken;
}
ParenthesizedExpressionSyntax.prototype.accept = function (visitor) {
return visitor.visitParenthesizedExpression(this);
};
ParenthesizedExpressionSyntax.prototype.kind = function () {
return 217 /* ParenthesizedExpression */;
};
ParenthesizedExpressionSyntax.prototype.childCount = function () {
return 3;
};
ParenthesizedExpressionSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.openParenToken;
case 1:
return this.expression;
case 2:
return this.closeParenToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ParenthesizedExpressionSyntax.prototype.isPrimaryExpression = function () {
return true;
};
ParenthesizedExpressionSyntax.prototype.isMemberExpression = function () {
return true;
};
ParenthesizedExpressionSyntax.prototype.isPostfixExpression = function () {
return true;
};
ParenthesizedExpressionSyntax.prototype.isUnaryExpression = function () {
return true;
};
ParenthesizedExpressionSyntax.prototype.isExpression = function () {
return true;
};
ParenthesizedExpressionSyntax.prototype.update = function (openParenToken, expression, closeParenToken) {
if (this.openParenToken === openParenToken && this.expression === expression && this.closeParenToken === closeParenToken) {
return this;
}
return new ParenthesizedExpressionSyntax(openParenToken, expression, closeParenToken, this.parsedInStrictMode());
};
ParenthesizedExpressionSyntax.create1 = function (expression) {
return new ParenthesizedExpressionSyntax(TypeScript.Syntax.token(72 /* OpenParenToken */), expression, TypeScript.Syntax.token(73 /* CloseParenToken */), false);
};
ParenthesizedExpressionSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ParenthesizedExpressionSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ParenthesizedExpressionSyntax.prototype.withOpenParenToken = function (openParenToken) {
return this.update(openParenToken, this.expression, this.closeParenToken);
};
ParenthesizedExpressionSyntax.prototype.withExpression = function (expression) {
return this.update(this.openParenToken, expression, this.closeParenToken);
};
ParenthesizedExpressionSyntax.prototype.withCloseParenToken = function (closeParenToken) {
return this.update(this.openParenToken, this.expression, closeParenToken);
};
ParenthesizedExpressionSyntax.prototype.isTypeScriptSpecific = function () {
if (this.expression.isTypeScriptSpecific()) {
return true;
}
return false;
};
return ParenthesizedExpressionSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ParenthesizedExpressionSyntax = ParenthesizedExpressionSyntax;
var SimpleArrowFunctionExpressionSyntax = (function (_super) {
__extends(SimpleArrowFunctionExpressionSyntax, _super);
function SimpleArrowFunctionExpressionSyntax(identifier, equalsGreaterThanToken, block, expression, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.identifier = identifier;
this.equalsGreaterThanToken = equalsGreaterThanToken;
this.block = block;
this.expression = expression;
}
SimpleArrowFunctionExpressionSyntax.prototype.accept = function (visitor) {
return visitor.visitSimpleArrowFunctionExpression(this);
};
SimpleArrowFunctionExpressionSyntax.prototype.kind = function () {
return 219 /* SimpleArrowFunctionExpression */;
};
SimpleArrowFunctionExpressionSyntax.prototype.childCount = function () {
return 4;
};
SimpleArrowFunctionExpressionSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.identifier;
case 1:
return this.equalsGreaterThanToken;
case 2:
return this.block;
case 3:
return this.expression;
default:
throw TypeScript.Errors.invalidOperation();
}
};
SimpleArrowFunctionExpressionSyntax.prototype.isArrowFunctionExpression = function () {
return true;
};
SimpleArrowFunctionExpressionSyntax.prototype.isUnaryExpression = function () {
return true;
};
SimpleArrowFunctionExpressionSyntax.prototype.isExpression = function () {
return true;
};
SimpleArrowFunctionExpressionSyntax.prototype.update = function (identifier, equalsGreaterThanToken, block, expression) {
if (this.identifier === identifier && this.equalsGreaterThanToken === equalsGreaterThanToken && this.block === block && this.expression === expression) {
return this;
}
return new SimpleArrowFunctionExpressionSyntax(identifier, equalsGreaterThanToken, block, expression, this.parsedInStrictMode());
};
SimpleArrowFunctionExpressionSyntax.create = function (identifier, equalsGreaterThanToken) {
return new SimpleArrowFunctionExpressionSyntax(identifier, equalsGreaterThanToken, null, null, false);
};
SimpleArrowFunctionExpressionSyntax.create1 = function (identifier) {
return new SimpleArrowFunctionExpressionSyntax(identifier, TypeScript.Syntax.token(85 /* EqualsGreaterThanToken */), null, null, false);
};
SimpleArrowFunctionExpressionSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
SimpleArrowFunctionExpressionSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
SimpleArrowFunctionExpressionSyntax.prototype.withIdentifier = function (identifier) {
return this.update(identifier, this.equalsGreaterThanToken, this.block, this.expression);
};
SimpleArrowFunctionExpressionSyntax.prototype.withEqualsGreaterThanToken = function (equalsGreaterThanToken) {
return this.update(this.identifier, equalsGreaterThanToken, this.block, this.expression);
};
SimpleArrowFunctionExpressionSyntax.prototype.withBlock = function (block) {
return this.update(this.identifier, this.equalsGreaterThanToken, block, this.expression);
};
SimpleArrowFunctionExpressionSyntax.prototype.withExpression = function (expression) {
return this.update(this.identifier, this.equalsGreaterThanToken, this.block, expression);
};
SimpleArrowFunctionExpressionSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return SimpleArrowFunctionExpressionSyntax;
})(TypeScript.SyntaxNode);
TypeScript.SimpleArrowFunctionExpressionSyntax = SimpleArrowFunctionExpressionSyntax;
var ParenthesizedArrowFunctionExpressionSyntax = (function (_super) {
__extends(ParenthesizedArrowFunctionExpressionSyntax, _super);
function ParenthesizedArrowFunctionExpressionSyntax(callSignature, equalsGreaterThanToken, block, expression, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.callSignature = callSignature;
this.equalsGreaterThanToken = equalsGreaterThanToken;
this.block = block;
this.expression = expression;
}
ParenthesizedArrowFunctionExpressionSyntax.prototype.accept = function (visitor) {
return visitor.visitParenthesizedArrowFunctionExpression(this);
};
ParenthesizedArrowFunctionExpressionSyntax.prototype.kind = function () {
return 218 /* ParenthesizedArrowFunctionExpression */;
};
ParenthesizedArrowFunctionExpressionSyntax.prototype.childCount = function () {
return 4;
};
ParenthesizedArrowFunctionExpressionSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.callSignature;
case 1:
return this.equalsGreaterThanToken;
case 2:
return this.block;
case 3:
return this.expression;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ParenthesizedArrowFunctionExpressionSyntax.prototype.isArrowFunctionExpression = function () {
return true;
};
ParenthesizedArrowFunctionExpressionSyntax.prototype.isUnaryExpression = function () {
return true;
};
ParenthesizedArrowFunctionExpressionSyntax.prototype.isExpression = function () {
return true;
};
ParenthesizedArrowFunctionExpressionSyntax.prototype.update = function (callSignature, equalsGreaterThanToken, block, expression) {
if (this.callSignature === callSignature && this.equalsGreaterThanToken === equalsGreaterThanToken && this.block === block && this.expression === expression) {
return this;
}
return new ParenthesizedArrowFunctionExpressionSyntax(callSignature, equalsGreaterThanToken, block, expression, this.parsedInStrictMode());
};
ParenthesizedArrowFunctionExpressionSyntax.create = function (callSignature, equalsGreaterThanToken) {
return new ParenthesizedArrowFunctionExpressionSyntax(callSignature, equalsGreaterThanToken, null, null, false);
};
ParenthesizedArrowFunctionExpressionSyntax.create1 = function () {
return new ParenthesizedArrowFunctionExpressionSyntax(CallSignatureSyntax.create1(), TypeScript.Syntax.token(85 /* EqualsGreaterThanToken */), null, null, false);
};
ParenthesizedArrowFunctionExpressionSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ParenthesizedArrowFunctionExpressionSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ParenthesizedArrowFunctionExpressionSyntax.prototype.withCallSignature = function (callSignature) {
return this.update(callSignature, this.equalsGreaterThanToken, this.block, this.expression);
};
ParenthesizedArrowFunctionExpressionSyntax.prototype.withEqualsGreaterThanToken = function (equalsGreaterThanToken) {
return this.update(this.callSignature, equalsGreaterThanToken, this.block, this.expression);
};
ParenthesizedArrowFunctionExpressionSyntax.prototype.withBlock = function (block) {
return this.update(this.callSignature, this.equalsGreaterThanToken, block, this.expression);
};
ParenthesizedArrowFunctionExpressionSyntax.prototype.withExpression = function (expression) {
return this.update(this.callSignature, this.equalsGreaterThanToken, this.block, expression);
};
ParenthesizedArrowFunctionExpressionSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return ParenthesizedArrowFunctionExpressionSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ParenthesizedArrowFunctionExpressionSyntax = ParenthesizedArrowFunctionExpressionSyntax;
var QualifiedNameSyntax = (function (_super) {
__extends(QualifiedNameSyntax, _super);
function QualifiedNameSyntax(left, dotToken, right, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.left = left;
this.dotToken = dotToken;
this.right = right;
}
QualifiedNameSyntax.prototype.accept = function (visitor) {
return visitor.visitQualifiedName(this);
};
QualifiedNameSyntax.prototype.kind = function () {
return 121 /* QualifiedName */;
};
QualifiedNameSyntax.prototype.childCount = function () {
return 3;
};
QualifiedNameSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.left;
case 1:
return this.dotToken;
case 2:
return this.right;
default:
throw TypeScript.Errors.invalidOperation();
}
};
QualifiedNameSyntax.prototype.isName = function () {
return true;
};
QualifiedNameSyntax.prototype.isType = function () {
return true;
};
QualifiedNameSyntax.prototype.update = function (left, dotToken, right) {
if (this.left === left && this.dotToken === dotToken && this.right === right) {
return this;
}
return new QualifiedNameSyntax(left, dotToken, right, this.parsedInStrictMode());
};
QualifiedNameSyntax.create1 = function (left, right) {
return new QualifiedNameSyntax(left, TypeScript.Syntax.token(76 /* DotToken */), right, false);
};
QualifiedNameSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
QualifiedNameSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
QualifiedNameSyntax.prototype.withLeft = function (left) {
return this.update(left, this.dotToken, this.right);
};
QualifiedNameSyntax.prototype.withDotToken = function (dotToken) {
return this.update(this.left, dotToken, this.right);
};
QualifiedNameSyntax.prototype.withRight = function (right) {
return this.update(this.left, this.dotToken, right);
};
QualifiedNameSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return QualifiedNameSyntax;
})(TypeScript.SyntaxNode);
TypeScript.QualifiedNameSyntax = QualifiedNameSyntax;
var TypeArgumentListSyntax = (function (_super) {
__extends(TypeArgumentListSyntax, _super);
function TypeArgumentListSyntax(lessThanToken, typeArguments, greaterThanToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.lessThanToken = lessThanToken;
this.typeArguments = typeArguments;
this.greaterThanToken = greaterThanToken;
}
TypeArgumentListSyntax.prototype.accept = function (visitor) {
return visitor.visitTypeArgumentList(this);
};
TypeArgumentListSyntax.prototype.kind = function () {
return 228 /* TypeArgumentList */;
};
TypeArgumentListSyntax.prototype.childCount = function () {
return 3;
};
TypeArgumentListSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.lessThanToken;
case 1:
return this.typeArguments;
case 2:
return this.greaterThanToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
TypeArgumentListSyntax.prototype.update = function (lessThanToken, typeArguments, greaterThanToken) {
if (this.lessThanToken === lessThanToken && this.typeArguments === typeArguments && this.greaterThanToken === greaterThanToken) {
return this;
}
return new TypeArgumentListSyntax(lessThanToken, typeArguments, greaterThanToken, this.parsedInStrictMode());
};
TypeArgumentListSyntax.create = function (lessThanToken, greaterThanToken) {
return new TypeArgumentListSyntax(lessThanToken, TypeScript.Syntax.emptySeparatedList, greaterThanToken, false);
};
TypeArgumentListSyntax.create1 = function () {
return new TypeArgumentListSyntax(TypeScript.Syntax.token(80 /* LessThanToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(81 /* GreaterThanToken */), false);
};
TypeArgumentListSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
TypeArgumentListSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
TypeArgumentListSyntax.prototype.withLessThanToken = function (lessThanToken) {
return this.update(lessThanToken, this.typeArguments, this.greaterThanToken);
};
TypeArgumentListSyntax.prototype.withTypeArguments = function (typeArguments) {
return this.update(this.lessThanToken, typeArguments, this.greaterThanToken);
};
TypeArgumentListSyntax.prototype.withTypeArgument = function (typeArgument) {
return this.withTypeArguments(TypeScript.Syntax.separatedList([typeArgument]));
};
TypeArgumentListSyntax.prototype.withGreaterThanToken = function (greaterThanToken) {
return this.update(this.lessThanToken, this.typeArguments, greaterThanToken);
};
TypeArgumentListSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return TypeArgumentListSyntax;
})(TypeScript.SyntaxNode);
TypeScript.TypeArgumentListSyntax = TypeArgumentListSyntax;
var ConstructorTypeSyntax = (function (_super) {
__extends(ConstructorTypeSyntax, _super);
function ConstructorTypeSyntax(newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.newKeyword = newKeyword;
this.typeParameterList = typeParameterList;
this.parameterList = parameterList;
this.equalsGreaterThanToken = equalsGreaterThanToken;
this.type = type;
}
ConstructorTypeSyntax.prototype.accept = function (visitor) {
return visitor.visitConstructorType(this);
};
ConstructorTypeSyntax.prototype.kind = function () {
return 125 /* ConstructorType */;
};
ConstructorTypeSyntax.prototype.childCount = function () {
return 5;
};
ConstructorTypeSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.newKeyword;
case 1:
return this.typeParameterList;
case 2:
return this.parameterList;
case 3:
return this.equalsGreaterThanToken;
case 4:
return this.type;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ConstructorTypeSyntax.prototype.isType = function () {
return true;
};
ConstructorTypeSyntax.prototype.update = function (newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type) {
if (this.newKeyword === newKeyword && this.typeParameterList === typeParameterList && this.parameterList === parameterList && this.equalsGreaterThanToken === equalsGreaterThanToken && this.type === type) {
return this;
}
return new ConstructorTypeSyntax(newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type, this.parsedInStrictMode());
};
ConstructorTypeSyntax.create = function (newKeyword, parameterList, equalsGreaterThanToken, type) {
return new ConstructorTypeSyntax(newKeyword, null, parameterList, equalsGreaterThanToken, type, false);
};
ConstructorTypeSyntax.create1 = function (type) {
return new ConstructorTypeSyntax(TypeScript.Syntax.token(31 /* NewKeyword */), null, ParameterListSyntax.create1(), TypeScript.Syntax.token(85 /* EqualsGreaterThanToken */), type, false);
};
ConstructorTypeSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ConstructorTypeSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ConstructorTypeSyntax.prototype.withNewKeyword = function (newKeyword) {
return this.update(newKeyword, this.typeParameterList, this.parameterList, this.equalsGreaterThanToken, this.type);
};
ConstructorTypeSyntax.prototype.withTypeParameterList = function (typeParameterList) {
return this.update(this.newKeyword, typeParameterList, this.parameterList, this.equalsGreaterThanToken, this.type);
};
ConstructorTypeSyntax.prototype.withParameterList = function (parameterList) {
return this.update(this.newKeyword, this.typeParameterList, parameterList, this.equalsGreaterThanToken, this.type);
};
ConstructorTypeSyntax.prototype.withEqualsGreaterThanToken = function (equalsGreaterThanToken) {
return this.update(this.newKeyword, this.typeParameterList, this.parameterList, equalsGreaterThanToken, this.type);
};
ConstructorTypeSyntax.prototype.withType = function (type) {
return this.update(this.newKeyword, this.typeParameterList, this.parameterList, this.equalsGreaterThanToken, type);
};
ConstructorTypeSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return ConstructorTypeSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ConstructorTypeSyntax = ConstructorTypeSyntax;
var FunctionTypeSyntax = (function (_super) {
__extends(FunctionTypeSyntax, _super);
function FunctionTypeSyntax(typeParameterList, parameterList, equalsGreaterThanToken, type, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.typeParameterList = typeParameterList;
this.parameterList = parameterList;
this.equalsGreaterThanToken = equalsGreaterThanToken;
this.type = type;
}
FunctionTypeSyntax.prototype.accept = function (visitor) {
return visitor.visitFunctionType(this);
};
FunctionTypeSyntax.prototype.kind = function () {
return 123 /* FunctionType */;
};
FunctionTypeSyntax.prototype.childCount = function () {
return 4;
};
FunctionTypeSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.typeParameterList;
case 1:
return this.parameterList;
case 2:
return this.equalsGreaterThanToken;
case 3:
return this.type;
default:
throw TypeScript.Errors.invalidOperation();
}
};
FunctionTypeSyntax.prototype.isType = function () {
return true;
};
FunctionTypeSyntax.prototype.update = function (typeParameterList, parameterList, equalsGreaterThanToken, type) {
if (this.typeParameterList === typeParameterList && this.parameterList === parameterList && this.equalsGreaterThanToken === equalsGreaterThanToken && this.type === type) {
return this;
}
return new FunctionTypeSyntax(typeParameterList, parameterList, equalsGreaterThanToken, type, this.parsedInStrictMode());
};
FunctionTypeSyntax.create = function (parameterList, equalsGreaterThanToken, type) {
return new FunctionTypeSyntax(null, parameterList, equalsGreaterThanToken, type, false);
};
FunctionTypeSyntax.create1 = function (type) {
return new FunctionTypeSyntax(null, ParameterListSyntax.create1(), TypeScript.Syntax.token(85 /* EqualsGreaterThanToken */), type, false);
};
FunctionTypeSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
FunctionTypeSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
FunctionTypeSyntax.prototype.withTypeParameterList = function (typeParameterList) {
return this.update(typeParameterList, this.parameterList, this.equalsGreaterThanToken, this.type);
};
FunctionTypeSyntax.prototype.withParameterList = function (parameterList) {
return this.update(this.typeParameterList, parameterList, this.equalsGreaterThanToken, this.type);
};
FunctionTypeSyntax.prototype.withEqualsGreaterThanToken = function (equalsGreaterThanToken) {
return this.update(this.typeParameterList, this.parameterList, equalsGreaterThanToken, this.type);
};
FunctionTypeSyntax.prototype.withType = function (type) {
return this.update(this.typeParameterList, this.parameterList, this.equalsGreaterThanToken, type);
};
FunctionTypeSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return FunctionTypeSyntax;
})(TypeScript.SyntaxNode);
TypeScript.FunctionTypeSyntax = FunctionTypeSyntax;
var ObjectTypeSyntax = (function (_super) {
__extends(ObjectTypeSyntax, _super);
function ObjectTypeSyntax(openBraceToken, typeMembers, closeBraceToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.openBraceToken = openBraceToken;
this.typeMembers = typeMembers;
this.closeBraceToken = closeBraceToken;
}
ObjectTypeSyntax.prototype.accept = function (visitor) {
return visitor.visitObjectType(this);
};
ObjectTypeSyntax.prototype.kind = function () {
return 122 /* ObjectType */;
};
ObjectTypeSyntax.prototype.childCount = function () {
return 3;
};
ObjectTypeSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.openBraceToken;
case 1:
return this.typeMembers;
case 2:
return this.closeBraceToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ObjectTypeSyntax.prototype.isType = function () {
return true;
};
ObjectTypeSyntax.prototype.update = function (openBraceToken, typeMembers, closeBraceToken) {
if (this.openBraceToken === openBraceToken && this.typeMembers === typeMembers && this.closeBraceToken === closeBraceToken) {
return this;
}
return new ObjectTypeSyntax(openBraceToken, typeMembers, closeBraceToken, this.parsedInStrictMode());
};
ObjectTypeSyntax.create = function (openBraceToken, closeBraceToken) {
return new ObjectTypeSyntax(openBraceToken, TypeScript.Syntax.emptySeparatedList, closeBraceToken, false);
};
ObjectTypeSyntax.create1 = function () {
return new ObjectTypeSyntax(TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false);
};
ObjectTypeSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ObjectTypeSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ObjectTypeSyntax.prototype.withOpenBraceToken = function (openBraceToken) {
return this.update(openBraceToken, this.typeMembers, this.closeBraceToken);
};
ObjectTypeSyntax.prototype.withTypeMembers = function (typeMembers) {
return this.update(this.openBraceToken, typeMembers, this.closeBraceToken);
};
ObjectTypeSyntax.prototype.withTypeMember = function (typeMember) {
return this.withTypeMembers(TypeScript.Syntax.separatedList([typeMember]));
};
ObjectTypeSyntax.prototype.withCloseBraceToken = function (closeBraceToken) {
return this.update(this.openBraceToken, this.typeMembers, closeBraceToken);
};
ObjectTypeSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return ObjectTypeSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ObjectTypeSyntax = ObjectTypeSyntax;
var ArrayTypeSyntax = (function (_super) {
__extends(ArrayTypeSyntax, _super);
function ArrayTypeSyntax(type, openBracketToken, closeBracketToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.type = type;
this.openBracketToken = openBracketToken;
this.closeBracketToken = closeBracketToken;
}
ArrayTypeSyntax.prototype.accept = function (visitor) {
return visitor.visitArrayType(this);
};
ArrayTypeSyntax.prototype.kind = function () {
return 124 /* ArrayType */;
};
ArrayTypeSyntax.prototype.childCount = function () {
return 3;
};
ArrayTypeSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.type;
case 1:
return this.openBracketToken;
case 2:
return this.closeBracketToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ArrayTypeSyntax.prototype.isType = function () {
return true;
};
ArrayTypeSyntax.prototype.update = function (type, openBracketToken, closeBracketToken) {
if (this.type === type && this.openBracketToken === openBracketToken && this.closeBracketToken === closeBracketToken) {
return this;
}
return new ArrayTypeSyntax(type, openBracketToken, closeBracketToken, this.parsedInStrictMode());
};
ArrayTypeSyntax.create1 = function (type) {
return new ArrayTypeSyntax(type, TypeScript.Syntax.token(74 /* OpenBracketToken */), TypeScript.Syntax.token(75 /* CloseBracketToken */), false);
};
ArrayTypeSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ArrayTypeSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ArrayTypeSyntax.prototype.withType = function (type) {
return this.update(type, this.openBracketToken, this.closeBracketToken);
};
ArrayTypeSyntax.prototype.withOpenBracketToken = function (openBracketToken) {
return this.update(this.type, openBracketToken, this.closeBracketToken);
};
ArrayTypeSyntax.prototype.withCloseBracketToken = function (closeBracketToken) {
return this.update(this.type, this.openBracketToken, closeBracketToken);
};
ArrayTypeSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return ArrayTypeSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ArrayTypeSyntax = ArrayTypeSyntax;
var GenericTypeSyntax = (function (_super) {
__extends(GenericTypeSyntax, _super);
function GenericTypeSyntax(name, typeArgumentList, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.name = name;
this.typeArgumentList = typeArgumentList;
}
GenericTypeSyntax.prototype.accept = function (visitor) {
return visitor.visitGenericType(this);
};
GenericTypeSyntax.prototype.kind = function () {
return 126 /* GenericType */;
};
GenericTypeSyntax.prototype.childCount = function () {
return 2;
};
GenericTypeSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.name;
case 1:
return this.typeArgumentList;
default:
throw TypeScript.Errors.invalidOperation();
}
};
GenericTypeSyntax.prototype.isType = function () {
return true;
};
GenericTypeSyntax.prototype.update = function (name, typeArgumentList) {
if (this.name === name && this.typeArgumentList === typeArgumentList) {
return this;
}
return new GenericTypeSyntax(name, typeArgumentList, this.parsedInStrictMode());
};
GenericTypeSyntax.create1 = function (name) {
return new GenericTypeSyntax(name, TypeArgumentListSyntax.create1(), false);
};
GenericTypeSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
GenericTypeSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
GenericTypeSyntax.prototype.withName = function (name) {
return this.update(name, this.typeArgumentList);
};
GenericTypeSyntax.prototype.withTypeArgumentList = function (typeArgumentList) {
return this.update(this.name, typeArgumentList);
};
GenericTypeSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return GenericTypeSyntax;
})(TypeScript.SyntaxNode);
TypeScript.GenericTypeSyntax = GenericTypeSyntax;
var TypeQuerySyntax = (function (_super) {
__extends(TypeQuerySyntax, _super);
function TypeQuerySyntax(typeOfKeyword, name, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.typeOfKeyword = typeOfKeyword;
this.name = name;
}
TypeQuerySyntax.prototype.accept = function (visitor) {
return visitor.visitTypeQuery(this);
};
TypeQuerySyntax.prototype.kind = function () {
return 127 /* TypeQuery */;
};
TypeQuerySyntax.prototype.childCount = function () {
return 2;
};
TypeQuerySyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.typeOfKeyword;
case 1:
return this.name;
default:
throw TypeScript.Errors.invalidOperation();
}
};
TypeQuerySyntax.prototype.isType = function () {
return true;
};
TypeQuerySyntax.prototype.update = function (typeOfKeyword, name) {
if (this.typeOfKeyword === typeOfKeyword && this.name === name) {
return this;
}
return new TypeQuerySyntax(typeOfKeyword, name, this.parsedInStrictMode());
};
TypeQuerySyntax.create1 = function (name) {
return new TypeQuerySyntax(TypeScript.Syntax.token(39 /* TypeOfKeyword */), name, false);
};
TypeQuerySyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
TypeQuerySyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
TypeQuerySyntax.prototype.withTypeOfKeyword = function (typeOfKeyword) {
return this.update(typeOfKeyword, this.name);
};
TypeQuerySyntax.prototype.withName = function (name) {
return this.update(this.typeOfKeyword, name);
};
TypeQuerySyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return TypeQuerySyntax;
})(TypeScript.SyntaxNode);
TypeScript.TypeQuerySyntax = TypeQuerySyntax;
var TypeAnnotationSyntax = (function (_super) {
__extends(TypeAnnotationSyntax, _super);
function TypeAnnotationSyntax(colonToken, type, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.colonToken = colonToken;
this.type = type;
}
TypeAnnotationSyntax.prototype.accept = function (visitor) {
return visitor.visitTypeAnnotation(this);
};
TypeAnnotationSyntax.prototype.kind = function () {
return 244 /* TypeAnnotation */;
};
TypeAnnotationSyntax.prototype.childCount = function () {
return 2;
};
TypeAnnotationSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.colonToken;
case 1:
return this.type;
default:
throw TypeScript.Errors.invalidOperation();
}
};
TypeAnnotationSyntax.prototype.update = function (colonToken, type) {
if (this.colonToken === colonToken && this.type === type) {
return this;
}
return new TypeAnnotationSyntax(colonToken, type, this.parsedInStrictMode());
};
TypeAnnotationSyntax.create1 = function (type) {
return new TypeAnnotationSyntax(TypeScript.Syntax.token(106 /* ColonToken */), type, false);
};
TypeAnnotationSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
TypeAnnotationSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
TypeAnnotationSyntax.prototype.withColonToken = function (colonToken) {
return this.update(colonToken, this.type);
};
TypeAnnotationSyntax.prototype.withType = function (type) {
return this.update(this.colonToken, type);
};
TypeAnnotationSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return TypeAnnotationSyntax;
})(TypeScript.SyntaxNode);
TypeScript.TypeAnnotationSyntax = TypeAnnotationSyntax;
var BlockSyntax = (function (_super) {
__extends(BlockSyntax, _super);
function BlockSyntax(openBraceToken, statements, closeBraceToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.openBraceToken = openBraceToken;
this.statements = statements;
this.closeBraceToken = closeBraceToken;
}
BlockSyntax.prototype.accept = function (visitor) {
return visitor.visitBlock(this);
};
BlockSyntax.prototype.kind = function () {
return 146 /* Block */;
};
BlockSyntax.prototype.childCount = function () {
return 3;
};
BlockSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.openBraceToken;
case 1:
return this.statements;
case 2:
return this.closeBraceToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
BlockSyntax.prototype.isStatement = function () {
return true;
};
BlockSyntax.prototype.isModuleElement = function () {
return true;
};
BlockSyntax.prototype.update = function (openBraceToken, statements, closeBraceToken) {
if (this.openBraceToken === openBraceToken && this.statements === statements && this.closeBraceToken === closeBraceToken) {
return this;
}
return new BlockSyntax(openBraceToken, statements, closeBraceToken, this.parsedInStrictMode());
};
BlockSyntax.create = function (openBraceToken, closeBraceToken) {
return new BlockSyntax(openBraceToken, TypeScript.Syntax.emptyList, closeBraceToken, false);
};
BlockSyntax.create1 = function () {
return new BlockSyntax(TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptyList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false);
};
BlockSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
BlockSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
BlockSyntax.prototype.withOpenBraceToken = function (openBraceToken) {
return this.update(openBraceToken, this.statements, this.closeBraceToken);
};
BlockSyntax.prototype.withStatements = function (statements) {
return this.update(this.openBraceToken, statements, this.closeBraceToken);
};
BlockSyntax.prototype.withStatement = function (statement) {
return this.withStatements(TypeScript.Syntax.list([statement]));
};
BlockSyntax.prototype.withCloseBraceToken = function (closeBraceToken) {
return this.update(this.openBraceToken, this.statements, closeBraceToken);
};
BlockSyntax.prototype.isTypeScriptSpecific = function () {
if (this.statements.isTypeScriptSpecific()) {
return true;
}
return false;
};
return BlockSyntax;
})(TypeScript.SyntaxNode);
TypeScript.BlockSyntax = BlockSyntax;
var ParameterSyntax = (function (_super) {
__extends(ParameterSyntax, _super);
function ParameterSyntax(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.dotDotDotToken = dotDotDotToken;
this.modifiers = modifiers;
this.identifier = identifier;
this.questionToken = questionToken;
this.typeAnnotation = typeAnnotation;
this.equalsValueClause = equalsValueClause;
}
ParameterSyntax.prototype.accept = function (visitor) {
return visitor.visitParameter(this);
};
ParameterSyntax.prototype.kind = function () {
return 242 /* Parameter */;
};
ParameterSyntax.prototype.childCount = function () {
return 6;
};
ParameterSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.dotDotDotToken;
case 1:
return this.modifiers;
case 2:
return this.identifier;
case 3:
return this.questionToken;
case 4:
return this.typeAnnotation;
case 5:
return this.equalsValueClause;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ParameterSyntax.prototype.update = function (dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause) {
if (this.dotDotDotToken === dotDotDotToken && this.modifiers === modifiers && this.identifier === identifier && this.questionToken === questionToken && this.typeAnnotation === typeAnnotation && this.equalsValueClause === equalsValueClause) {
return this;
}
return new ParameterSyntax(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause, this.parsedInStrictMode());
};
ParameterSyntax.create = function (identifier) {
return new ParameterSyntax(null, TypeScript.Syntax.emptyList, identifier, null, null, null, false);
};
ParameterSyntax.create1 = function (identifier) {
return new ParameterSyntax(null, TypeScript.Syntax.emptyList, identifier, null, null, null, false);
};
ParameterSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ParameterSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ParameterSyntax.prototype.withDotDotDotToken = function (dotDotDotToken) {
return this.update(dotDotDotToken, this.modifiers, this.identifier, this.questionToken, this.typeAnnotation, this.equalsValueClause);
};
ParameterSyntax.prototype.withModifiers = function (modifiers) {
return this.update(this.dotDotDotToken, modifiers, this.identifier, this.questionToken, this.typeAnnotation, this.equalsValueClause);
};
ParameterSyntax.prototype.withModifier = function (modifier) {
return this.withModifiers(TypeScript.Syntax.list([modifier]));
};
ParameterSyntax.prototype.withIdentifier = function (identifier) {
return this.update(this.dotDotDotToken, this.modifiers, identifier, this.questionToken, this.typeAnnotation, this.equalsValueClause);
};
ParameterSyntax.prototype.withQuestionToken = function (questionToken) {
return this.update(this.dotDotDotToken, this.modifiers, this.identifier, questionToken, this.typeAnnotation, this.equalsValueClause);
};
ParameterSyntax.prototype.withTypeAnnotation = function (typeAnnotation) {
return this.update(this.dotDotDotToken, this.modifiers, this.identifier, this.questionToken, typeAnnotation, this.equalsValueClause);
};
ParameterSyntax.prototype.withEqualsValueClause = function (equalsValueClause) {
return this.update(this.dotDotDotToken, this.modifiers, this.identifier, this.questionToken, this.typeAnnotation, equalsValueClause);
};
ParameterSyntax.prototype.isTypeScriptSpecific = function () {
if (this.dotDotDotToken !== null) {
return true;
}
if (this.modifiers.isTypeScriptSpecific()) {
return true;
}
if (this.questionToken !== null) {
return true;
}
if (this.typeAnnotation !== null) {
return true;
}
if (this.equalsValueClause !== null) {
return true;
}
return false;
};
return ParameterSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ParameterSyntax = ParameterSyntax;
var MemberAccessExpressionSyntax = (function (_super) {
__extends(MemberAccessExpressionSyntax, _super);
function MemberAccessExpressionSyntax(expression, dotToken, name, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.expression = expression;
this.dotToken = dotToken;
this.name = name;
}
MemberAccessExpressionSyntax.prototype.accept = function (visitor) {
return visitor.visitMemberAccessExpression(this);
};
MemberAccessExpressionSyntax.prototype.kind = function () {
return 212 /* MemberAccessExpression */;
};
MemberAccessExpressionSyntax.prototype.childCount = function () {
return 3;
};
MemberAccessExpressionSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.expression;
case 1:
return this.dotToken;
case 2:
return this.name;
default:
throw TypeScript.Errors.invalidOperation();
}
};
MemberAccessExpressionSyntax.prototype.isMemberExpression = function () {
return true;
};
MemberAccessExpressionSyntax.prototype.isPostfixExpression = function () {
return true;
};
MemberAccessExpressionSyntax.prototype.isUnaryExpression = function () {
return true;
};
MemberAccessExpressionSyntax.prototype.isExpression = function () {
return true;
};
MemberAccessExpressionSyntax.prototype.update = function (expression, dotToken, name) {
if (this.expression === expression && this.dotToken === dotToken && this.name === name) {
return this;
}
return new MemberAccessExpressionSyntax(expression, dotToken, name, this.parsedInStrictMode());
};
MemberAccessExpressionSyntax.create1 = function (expression, name) {
return new MemberAccessExpressionSyntax(expression, TypeScript.Syntax.token(76 /* DotToken */), name, false);
};
MemberAccessExpressionSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
MemberAccessExpressionSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
MemberAccessExpressionSyntax.prototype.withExpression = function (expression) {
return this.update(expression, this.dotToken, this.name);
};
MemberAccessExpressionSyntax.prototype.withDotToken = function (dotToken) {
return this.update(this.expression, dotToken, this.name);
};
MemberAccessExpressionSyntax.prototype.withName = function (name) {
return this.update(this.expression, this.dotToken, name);
};
MemberAccessExpressionSyntax.prototype.isTypeScriptSpecific = function () {
if (this.expression.isTypeScriptSpecific()) {
return true;
}
return false;
};
return MemberAccessExpressionSyntax;
})(TypeScript.SyntaxNode);
TypeScript.MemberAccessExpressionSyntax = MemberAccessExpressionSyntax;
var PostfixUnaryExpressionSyntax = (function (_super) {
__extends(PostfixUnaryExpressionSyntax, _super);
function PostfixUnaryExpressionSyntax(kind, operand, operatorToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.operand = operand;
this.operatorToken = operatorToken;
this._kind = kind;
}
PostfixUnaryExpressionSyntax.prototype.accept = function (visitor) {
return visitor.visitPostfixUnaryExpression(this);
};
PostfixUnaryExpressionSyntax.prototype.childCount = function () {
return 2;
};
PostfixUnaryExpressionSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.operand;
case 1:
return this.operatorToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
PostfixUnaryExpressionSyntax.prototype.isPostfixExpression = function () {
return true;
};
PostfixUnaryExpressionSyntax.prototype.isUnaryExpression = function () {
return true;
};
PostfixUnaryExpressionSyntax.prototype.isExpression = function () {
return true;
};
PostfixUnaryExpressionSyntax.prototype.kind = function () {
return this._kind;
};
PostfixUnaryExpressionSyntax.prototype.update = function (kind, operand, operatorToken) {
if (this._kind === kind && this.operand === operand && this.operatorToken === operatorToken) {
return this;
}
return new PostfixUnaryExpressionSyntax(kind, operand, operatorToken, this.parsedInStrictMode());
};
PostfixUnaryExpressionSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
PostfixUnaryExpressionSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
PostfixUnaryExpressionSyntax.prototype.withKind = function (kind) {
return this.update(kind, this.operand, this.operatorToken);
};
PostfixUnaryExpressionSyntax.prototype.withOperand = function (operand) {
return this.update(this._kind, operand, this.operatorToken);
};
PostfixUnaryExpressionSyntax.prototype.withOperatorToken = function (operatorToken) {
return this.update(this._kind, this.operand, operatorToken);
};
PostfixUnaryExpressionSyntax.prototype.isTypeScriptSpecific = function () {
if (this.operand.isTypeScriptSpecific()) {
return true;
}
return false;
};
return PostfixUnaryExpressionSyntax;
})(TypeScript.SyntaxNode);
TypeScript.PostfixUnaryExpressionSyntax = PostfixUnaryExpressionSyntax;
var ElementAccessExpressionSyntax = (function (_super) {
__extends(ElementAccessExpressionSyntax, _super);
function ElementAccessExpressionSyntax(expression, openBracketToken, argumentExpression, closeBracketToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.expression = expression;
this.openBracketToken = openBracketToken;
this.argumentExpression = argumentExpression;
this.closeBracketToken = closeBracketToken;
}
ElementAccessExpressionSyntax.prototype.accept = function (visitor) {
return visitor.visitElementAccessExpression(this);
};
ElementAccessExpressionSyntax.prototype.kind = function () {
return 221 /* ElementAccessExpression */;
};
ElementAccessExpressionSyntax.prototype.childCount = function () {
return 4;
};
ElementAccessExpressionSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.expression;
case 1:
return this.openBracketToken;
case 2:
return this.argumentExpression;
case 3:
return this.closeBracketToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ElementAccessExpressionSyntax.prototype.isMemberExpression = function () {
return true;
};
ElementAccessExpressionSyntax.prototype.isPostfixExpression = function () {
return true;
};
ElementAccessExpressionSyntax.prototype.isUnaryExpression = function () {
return true;
};
ElementAccessExpressionSyntax.prototype.isExpression = function () {
return true;
};
ElementAccessExpressionSyntax.prototype.update = function (expression, openBracketToken, argumentExpression, closeBracketToken) {
if (this.expression === expression && this.openBracketToken === openBracketToken && this.argumentExpression === argumentExpression && this.closeBracketToken === closeBracketToken) {
return this;
}
return new ElementAccessExpressionSyntax(expression, openBracketToken, argumentExpression, closeBracketToken, this.parsedInStrictMode());
};
ElementAccessExpressionSyntax.create1 = function (expression, argumentExpression) {
return new ElementAccessExpressionSyntax(expression, TypeScript.Syntax.token(74 /* OpenBracketToken */), argumentExpression, TypeScript.Syntax.token(75 /* CloseBracketToken */), false);
};
ElementAccessExpressionSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ElementAccessExpressionSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ElementAccessExpressionSyntax.prototype.withExpression = function (expression) {
return this.update(expression, this.openBracketToken, this.argumentExpression, this.closeBracketToken);
};
ElementAccessExpressionSyntax.prototype.withOpenBracketToken = function (openBracketToken) {
return this.update(this.expression, openBracketToken, this.argumentExpression, this.closeBracketToken);
};
ElementAccessExpressionSyntax.prototype.withArgumentExpression = function (argumentExpression) {
return this.update(this.expression, this.openBracketToken, argumentExpression, this.closeBracketToken);
};
ElementAccessExpressionSyntax.prototype.withCloseBracketToken = function (closeBracketToken) {
return this.update(this.expression, this.openBracketToken, this.argumentExpression, closeBracketToken);
};
ElementAccessExpressionSyntax.prototype.isTypeScriptSpecific = function () {
if (this.expression.isTypeScriptSpecific()) {
return true;
}
if (this.argumentExpression.isTypeScriptSpecific()) {
return true;
}
return false;
};
return ElementAccessExpressionSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ElementAccessExpressionSyntax = ElementAccessExpressionSyntax;
var InvocationExpressionSyntax = (function (_super) {
__extends(InvocationExpressionSyntax, _super);
function InvocationExpressionSyntax(expression, argumentList, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.expression = expression;
this.argumentList = argumentList;
}
InvocationExpressionSyntax.prototype.accept = function (visitor) {
return visitor.visitInvocationExpression(this);
};
InvocationExpressionSyntax.prototype.kind = function () {
return 213 /* InvocationExpression */;
};
InvocationExpressionSyntax.prototype.childCount = function () {
return 2;
};
InvocationExpressionSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.expression;
case 1:
return this.argumentList;
default:
throw TypeScript.Errors.invalidOperation();
}
};
InvocationExpressionSyntax.prototype.isMemberExpression = function () {
return true;
};
InvocationExpressionSyntax.prototype.isPostfixExpression = function () {
return true;
};
InvocationExpressionSyntax.prototype.isUnaryExpression = function () {
return true;
};
InvocationExpressionSyntax.prototype.isExpression = function () {
return true;
};
InvocationExpressionSyntax.prototype.update = function (expression, argumentList) {
if (this.expression === expression && this.argumentList === argumentList) {
return this;
}
return new InvocationExpressionSyntax(expression, argumentList, this.parsedInStrictMode());
};
InvocationExpressionSyntax.create1 = function (expression) {
return new InvocationExpressionSyntax(expression, ArgumentListSyntax.create1(), false);
};
InvocationExpressionSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
InvocationExpressionSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
InvocationExpressionSyntax.prototype.withExpression = function (expression) {
return this.update(expression, this.argumentList);
};
InvocationExpressionSyntax.prototype.withArgumentList = function (argumentList) {
return this.update(this.expression, argumentList);
};
InvocationExpressionSyntax.prototype.isTypeScriptSpecific = function () {
if (this.expression.isTypeScriptSpecific()) {
return true;
}
if (this.argumentList.isTypeScriptSpecific()) {
return true;
}
return false;
};
return InvocationExpressionSyntax;
})(TypeScript.SyntaxNode);
TypeScript.InvocationExpressionSyntax = InvocationExpressionSyntax;
var ArgumentListSyntax = (function (_super) {
__extends(ArgumentListSyntax, _super);
function ArgumentListSyntax(typeArgumentList, openParenToken, _arguments, closeParenToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.typeArgumentList = typeArgumentList;
this.openParenToken = openParenToken;
this.closeParenToken = closeParenToken;
this.arguments = _arguments;
}
ArgumentListSyntax.prototype.accept = function (visitor) {
return visitor.visitArgumentList(this);
};
ArgumentListSyntax.prototype.kind = function () {
return 226 /* ArgumentList */;
};
ArgumentListSyntax.prototype.childCount = function () {
return 4;
};
ArgumentListSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.typeArgumentList;
case 1:
return this.openParenToken;
case 2:
return this.arguments;
case 3:
return this.closeParenToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ArgumentListSyntax.prototype.update = function (typeArgumentList, openParenToken, _arguments, closeParenToken) {
if (this.typeArgumentList === typeArgumentList && this.openParenToken === openParenToken && this.arguments === _arguments && this.closeParenToken === closeParenToken) {
return this;
}
return new ArgumentListSyntax(typeArgumentList, openParenToken, _arguments, closeParenToken, this.parsedInStrictMode());
};
ArgumentListSyntax.create = function (openParenToken, closeParenToken) {
return new ArgumentListSyntax(null, openParenToken, TypeScript.Syntax.emptySeparatedList, closeParenToken, false);
};
ArgumentListSyntax.create1 = function () {
return new ArgumentListSyntax(null, TypeScript.Syntax.token(72 /* OpenParenToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(73 /* CloseParenToken */), false);
};
ArgumentListSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ArgumentListSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ArgumentListSyntax.prototype.withTypeArgumentList = function (typeArgumentList) {
return this.update(typeArgumentList, this.openParenToken, this.arguments, this.closeParenToken);
};
ArgumentListSyntax.prototype.withOpenParenToken = function (openParenToken) {
return this.update(this.typeArgumentList, openParenToken, this.arguments, this.closeParenToken);
};
ArgumentListSyntax.prototype.withArguments = function (_arguments) {
return this.update(this.typeArgumentList, this.openParenToken, _arguments, this.closeParenToken);
};
ArgumentListSyntax.prototype.withArgument = function (_argument) {
return this.withArguments(TypeScript.Syntax.separatedList([_argument]));
};
ArgumentListSyntax.prototype.withCloseParenToken = function (closeParenToken) {
return this.update(this.typeArgumentList, this.openParenToken, this.arguments, closeParenToken);
};
ArgumentListSyntax.prototype.isTypeScriptSpecific = function () {
if (this.typeArgumentList !== null && this.typeArgumentList.isTypeScriptSpecific()) {
return true;
}
if (this.arguments.isTypeScriptSpecific()) {
return true;
}
return false;
};
return ArgumentListSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ArgumentListSyntax = ArgumentListSyntax;
var BinaryExpressionSyntax = (function (_super) {
__extends(BinaryExpressionSyntax, _super);
function BinaryExpressionSyntax(kind, left, operatorToken, right, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.left = left;
this.operatorToken = operatorToken;
this.right = right;
this._kind = kind;
}
BinaryExpressionSyntax.prototype.accept = function (visitor) {
return visitor.visitBinaryExpression(this);
};
BinaryExpressionSyntax.prototype.childCount = function () {
return 3;
};
BinaryExpressionSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.left;
case 1:
return this.operatorToken;
case 2:
return this.right;
default:
throw TypeScript.Errors.invalidOperation();
}
};
BinaryExpressionSyntax.prototype.isExpression = function () {
return true;
};
BinaryExpressionSyntax.prototype.kind = function () {
return this._kind;
};
BinaryExpressionSyntax.prototype.update = function (kind, left, operatorToken, right) {
if (this._kind === kind && this.left === left && this.operatorToken === operatorToken && this.right === right) {
return this;
}
return new BinaryExpressionSyntax(kind, left, operatorToken, right, this.parsedInStrictMode());
};
BinaryExpressionSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
BinaryExpressionSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
BinaryExpressionSyntax.prototype.withKind = function (kind) {
return this.update(kind, this.left, this.operatorToken, this.right);
};
BinaryExpressionSyntax.prototype.withLeft = function (left) {
return this.update(this._kind, left, this.operatorToken, this.right);
};
BinaryExpressionSyntax.prototype.withOperatorToken = function (operatorToken) {
return this.update(this._kind, this.left, operatorToken, this.right);
};
BinaryExpressionSyntax.prototype.withRight = function (right) {
return this.update(this._kind, this.left, this.operatorToken, right);
};
BinaryExpressionSyntax.prototype.isTypeScriptSpecific = function () {
if (this.left.isTypeScriptSpecific()) {
return true;
}
if (this.right.isTypeScriptSpecific()) {
return true;
}
return false;
};
return BinaryExpressionSyntax;
})(TypeScript.SyntaxNode);
TypeScript.BinaryExpressionSyntax = BinaryExpressionSyntax;
var ConditionalExpressionSyntax = (function (_super) {
__extends(ConditionalExpressionSyntax, _super);
function ConditionalExpressionSyntax(condition, questionToken, whenTrue, colonToken, whenFalse, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.condition = condition;
this.questionToken = questionToken;
this.whenTrue = whenTrue;
this.colonToken = colonToken;
this.whenFalse = whenFalse;
}
ConditionalExpressionSyntax.prototype.accept = function (visitor) {
return visitor.visitConditionalExpression(this);
};
ConditionalExpressionSyntax.prototype.kind = function () {
return 186 /* ConditionalExpression */;
};
ConditionalExpressionSyntax.prototype.childCount = function () {
return 5;
};
ConditionalExpressionSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.condition;
case 1:
return this.questionToken;
case 2:
return this.whenTrue;
case 3:
return this.colonToken;
case 4:
return this.whenFalse;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ConditionalExpressionSyntax.prototype.isExpression = function () {
return true;
};
ConditionalExpressionSyntax.prototype.update = function (condition, questionToken, whenTrue, colonToken, whenFalse) {
if (this.condition === condition && this.questionToken === questionToken && this.whenTrue === whenTrue && this.colonToken === colonToken && this.whenFalse === whenFalse) {
return this;
}
return new ConditionalExpressionSyntax(condition, questionToken, whenTrue, colonToken, whenFalse, this.parsedInStrictMode());
};
ConditionalExpressionSyntax.create1 = function (condition, whenTrue, whenFalse) {
return new ConditionalExpressionSyntax(condition, TypeScript.Syntax.token(105 /* QuestionToken */), whenTrue, TypeScript.Syntax.token(106 /* ColonToken */), whenFalse, false);
};
ConditionalExpressionSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ConditionalExpressionSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ConditionalExpressionSyntax.prototype.withCondition = function (condition) {
return this.update(condition, this.questionToken, this.whenTrue, this.colonToken, this.whenFalse);
};
ConditionalExpressionSyntax.prototype.withQuestionToken = function (questionToken) {
return this.update(this.condition, questionToken, this.whenTrue, this.colonToken, this.whenFalse);
};
ConditionalExpressionSyntax.prototype.withWhenTrue = function (whenTrue) {
return this.update(this.condition, this.questionToken, whenTrue, this.colonToken, this.whenFalse);
};
ConditionalExpressionSyntax.prototype.withColonToken = function (colonToken) {
return this.update(this.condition, this.questionToken, this.whenTrue, colonToken, this.whenFalse);
};
ConditionalExpressionSyntax.prototype.withWhenFalse = function (whenFalse) {
return this.update(this.condition, this.questionToken, this.whenTrue, this.colonToken, whenFalse);
};
ConditionalExpressionSyntax.prototype.isTypeScriptSpecific = function () {
if (this.condition.isTypeScriptSpecific()) {
return true;
}
if (this.whenTrue.isTypeScriptSpecific()) {
return true;
}
if (this.whenFalse.isTypeScriptSpecific()) {
return true;
}
return false;
};
return ConditionalExpressionSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ConditionalExpressionSyntax = ConditionalExpressionSyntax;
var ConstructSignatureSyntax = (function (_super) {
__extends(ConstructSignatureSyntax, _super);
function ConstructSignatureSyntax(newKeyword, callSignature, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.newKeyword = newKeyword;
this.callSignature = callSignature;
}
ConstructSignatureSyntax.prototype.accept = function (visitor) {
return visitor.visitConstructSignature(this);
};
ConstructSignatureSyntax.prototype.kind = function () {
return 143 /* ConstructSignature */;
};
ConstructSignatureSyntax.prototype.childCount = function () {
return 2;
};
ConstructSignatureSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.newKeyword;
case 1:
return this.callSignature;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ConstructSignatureSyntax.prototype.isTypeMember = function () {
return true;
};
ConstructSignatureSyntax.prototype.update = function (newKeyword, callSignature) {
if (this.newKeyword === newKeyword && this.callSignature === callSignature) {
return this;
}
return new ConstructSignatureSyntax(newKeyword, callSignature, this.parsedInStrictMode());
};
ConstructSignatureSyntax.create1 = function () {
return new ConstructSignatureSyntax(TypeScript.Syntax.token(31 /* NewKeyword */), CallSignatureSyntax.create1(), false);
};
ConstructSignatureSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ConstructSignatureSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ConstructSignatureSyntax.prototype.withNewKeyword = function (newKeyword) {
return this.update(newKeyword, this.callSignature);
};
ConstructSignatureSyntax.prototype.withCallSignature = function (callSignature) {
return this.update(this.newKeyword, callSignature);
};
ConstructSignatureSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return ConstructSignatureSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ConstructSignatureSyntax = ConstructSignatureSyntax;
var MethodSignatureSyntax = (function (_super) {
__extends(MethodSignatureSyntax, _super);
function MethodSignatureSyntax(propertyName, questionToken, callSignature, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.propertyName = propertyName;
this.questionToken = questionToken;
this.callSignature = callSignature;
}
MethodSignatureSyntax.prototype.accept = function (visitor) {
return visitor.visitMethodSignature(this);
};
MethodSignatureSyntax.prototype.kind = function () {
return 145 /* MethodSignature */;
};
MethodSignatureSyntax.prototype.childCount = function () {
return 3;
};
MethodSignatureSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.propertyName;
case 1:
return this.questionToken;
case 2:
return this.callSignature;
default:
throw TypeScript.Errors.invalidOperation();
}
};
MethodSignatureSyntax.prototype.isTypeMember = function () {
return true;
};
MethodSignatureSyntax.prototype.update = function (propertyName, questionToken, callSignature) {
if (this.propertyName === propertyName && this.questionToken === questionToken && this.callSignature === callSignature) {
return this;
}
return new MethodSignatureSyntax(propertyName, questionToken, callSignature, this.parsedInStrictMode());
};
MethodSignatureSyntax.create = function (propertyName, callSignature) {
return new MethodSignatureSyntax(propertyName, null, callSignature, false);
};
MethodSignatureSyntax.create1 = function (propertyName) {
return new MethodSignatureSyntax(propertyName, null, CallSignatureSyntax.create1(), false);
};
MethodSignatureSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
MethodSignatureSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
MethodSignatureSyntax.prototype.withPropertyName = function (propertyName) {
return this.update(propertyName, this.questionToken, this.callSignature);
};
MethodSignatureSyntax.prototype.withQuestionToken = function (questionToken) {
return this.update(this.propertyName, questionToken, this.callSignature);
};
MethodSignatureSyntax.prototype.withCallSignature = function (callSignature) {
return this.update(this.propertyName, this.questionToken, callSignature);
};
MethodSignatureSyntax.prototype.isTypeScriptSpecific = function () {
if (this.callSignature.isTypeScriptSpecific()) {
return true;
}
return false;
};
return MethodSignatureSyntax;
})(TypeScript.SyntaxNode);
TypeScript.MethodSignatureSyntax = MethodSignatureSyntax;
var IndexSignatureSyntax = (function (_super) {
__extends(IndexSignatureSyntax, _super);
function IndexSignatureSyntax(openBracketToken, parameter, closeBracketToken, typeAnnotation, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.openBracketToken = openBracketToken;
this.parameter = parameter;
this.closeBracketToken = closeBracketToken;
this.typeAnnotation = typeAnnotation;
}
IndexSignatureSyntax.prototype.accept = function (visitor) {
return visitor.visitIndexSignature(this);
};
IndexSignatureSyntax.prototype.kind = function () {
return 144 /* IndexSignature */;
};
IndexSignatureSyntax.prototype.childCount = function () {
return 4;
};
IndexSignatureSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.openBracketToken;
case 1:
return this.parameter;
case 2:
return this.closeBracketToken;
case 3:
return this.typeAnnotation;
default:
throw TypeScript.Errors.invalidOperation();
}
};
IndexSignatureSyntax.prototype.isTypeMember = function () {
return true;
};
IndexSignatureSyntax.prototype.update = function (openBracketToken, parameter, closeBracketToken, typeAnnotation) {
if (this.openBracketToken === openBracketToken && this.parameter === parameter && this.closeBracketToken === closeBracketToken && this.typeAnnotation === typeAnnotation) {
return this;
}
return new IndexSignatureSyntax(openBracketToken, parameter, closeBracketToken, typeAnnotation, this.parsedInStrictMode());
};
IndexSignatureSyntax.create = function (openBracketToken, parameter, closeBracketToken) {
return new IndexSignatureSyntax(openBracketToken, parameter, closeBracketToken, null, false);
};
IndexSignatureSyntax.create1 = function (parameter) {
return new IndexSignatureSyntax(TypeScript.Syntax.token(74 /* OpenBracketToken */), parameter, TypeScript.Syntax.token(75 /* CloseBracketToken */), null, false);
};
IndexSignatureSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
IndexSignatureSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
IndexSignatureSyntax.prototype.withOpenBracketToken = function (openBracketToken) {
return this.update(openBracketToken, this.parameter, this.closeBracketToken, this.typeAnnotation);
};
IndexSignatureSyntax.prototype.withParameter = function (parameter) {
return this.update(this.openBracketToken, parameter, this.closeBracketToken, this.typeAnnotation);
};
IndexSignatureSyntax.prototype.withCloseBracketToken = function (closeBracketToken) {
return this.update(this.openBracketToken, this.parameter, closeBracketToken, this.typeAnnotation);
};
IndexSignatureSyntax.prototype.withTypeAnnotation = function (typeAnnotation) {
return this.update(this.openBracketToken, this.parameter, this.closeBracketToken, typeAnnotation);
};
IndexSignatureSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return IndexSignatureSyntax;
})(TypeScript.SyntaxNode);
TypeScript.IndexSignatureSyntax = IndexSignatureSyntax;
var PropertySignatureSyntax = (function (_super) {
__extends(PropertySignatureSyntax, _super);
function PropertySignatureSyntax(propertyName, questionToken, typeAnnotation, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.propertyName = propertyName;
this.questionToken = questionToken;
this.typeAnnotation = typeAnnotation;
}
PropertySignatureSyntax.prototype.accept = function (visitor) {
return visitor.visitPropertySignature(this);
};
PropertySignatureSyntax.prototype.kind = function () {
return 141 /* PropertySignature */;
};
PropertySignatureSyntax.prototype.childCount = function () {
return 3;
};
PropertySignatureSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.propertyName;
case 1:
return this.questionToken;
case 2:
return this.typeAnnotation;
default:
throw TypeScript.Errors.invalidOperation();
}
};
PropertySignatureSyntax.prototype.isTypeMember = function () {
return true;
};
PropertySignatureSyntax.prototype.update = function (propertyName, questionToken, typeAnnotation) {
if (this.propertyName === propertyName && this.questionToken === questionToken && this.typeAnnotation === typeAnnotation) {
return this;
}
return new PropertySignatureSyntax(propertyName, questionToken, typeAnnotation, this.parsedInStrictMode());
};
PropertySignatureSyntax.create = function (propertyName) {
return new PropertySignatureSyntax(propertyName, null, null, false);
};
PropertySignatureSyntax.create1 = function (propertyName) {
return new PropertySignatureSyntax(propertyName, null, null, false);
};
PropertySignatureSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
PropertySignatureSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
PropertySignatureSyntax.prototype.withPropertyName = function (propertyName) {
return this.update(propertyName, this.questionToken, this.typeAnnotation);
};
PropertySignatureSyntax.prototype.withQuestionToken = function (questionToken) {
return this.update(this.propertyName, questionToken, this.typeAnnotation);
};
PropertySignatureSyntax.prototype.withTypeAnnotation = function (typeAnnotation) {
return this.update(this.propertyName, this.questionToken, typeAnnotation);
};
PropertySignatureSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return PropertySignatureSyntax;
})(TypeScript.SyntaxNode);
TypeScript.PropertySignatureSyntax = PropertySignatureSyntax;
var CallSignatureSyntax = (function (_super) {
__extends(CallSignatureSyntax, _super);
function CallSignatureSyntax(typeParameterList, parameterList, typeAnnotation, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.typeParameterList = typeParameterList;
this.parameterList = parameterList;
this.typeAnnotation = typeAnnotation;
}
CallSignatureSyntax.prototype.accept = function (visitor) {
return visitor.visitCallSignature(this);
};
CallSignatureSyntax.prototype.kind = function () {
return 142 /* CallSignature */;
};
CallSignatureSyntax.prototype.childCount = function () {
return 3;
};
CallSignatureSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.typeParameterList;
case 1:
return this.parameterList;
case 2:
return this.typeAnnotation;
default:
throw TypeScript.Errors.invalidOperation();
}
};
CallSignatureSyntax.prototype.isTypeMember = function () {
return true;
};
CallSignatureSyntax.prototype.update = function (typeParameterList, parameterList, typeAnnotation) {
if (this.typeParameterList === typeParameterList && this.parameterList === parameterList && this.typeAnnotation === typeAnnotation) {
return this;
}
return new CallSignatureSyntax(typeParameterList, parameterList, typeAnnotation, this.parsedInStrictMode());
};
CallSignatureSyntax.create = function (parameterList) {
return new CallSignatureSyntax(null, parameterList, null, false);
};
CallSignatureSyntax.create1 = function () {
return new CallSignatureSyntax(null, ParameterListSyntax.create1(), null, false);
};
CallSignatureSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
CallSignatureSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
CallSignatureSyntax.prototype.withTypeParameterList = function (typeParameterList) {
return this.update(typeParameterList, this.parameterList, this.typeAnnotation);
};
CallSignatureSyntax.prototype.withParameterList = function (parameterList) {
return this.update(this.typeParameterList, parameterList, this.typeAnnotation);
};
CallSignatureSyntax.prototype.withTypeAnnotation = function (typeAnnotation) {
return this.update(this.typeParameterList, this.parameterList, typeAnnotation);
};
CallSignatureSyntax.prototype.isTypeScriptSpecific = function () {
if (this.typeParameterList !== null) {
return true;
}
if (this.parameterList.isTypeScriptSpecific()) {
return true;
}
if (this.typeAnnotation !== null) {
return true;
}
return false;
};
return CallSignatureSyntax;
})(TypeScript.SyntaxNode);
TypeScript.CallSignatureSyntax = CallSignatureSyntax;
var ParameterListSyntax = (function (_super) {
__extends(ParameterListSyntax, _super);
function ParameterListSyntax(openParenToken, parameters, closeParenToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.openParenToken = openParenToken;
this.parameters = parameters;
this.closeParenToken = closeParenToken;
}
ParameterListSyntax.prototype.accept = function (visitor) {
return visitor.visitParameterList(this);
};
ParameterListSyntax.prototype.kind = function () {
return 227 /* ParameterList */;
};
ParameterListSyntax.prototype.childCount = function () {
return 3;
};
ParameterListSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.openParenToken;
case 1:
return this.parameters;
case 2:
return this.closeParenToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ParameterListSyntax.prototype.update = function (openParenToken, parameters, closeParenToken) {
if (this.openParenToken === openParenToken && this.parameters === parameters && this.closeParenToken === closeParenToken) {
return this;
}
return new ParameterListSyntax(openParenToken, parameters, closeParenToken, this.parsedInStrictMode());
};
ParameterListSyntax.create = function (openParenToken, closeParenToken) {
return new ParameterListSyntax(openParenToken, TypeScript.Syntax.emptySeparatedList, closeParenToken, false);
};
ParameterListSyntax.create1 = function () {
return new ParameterListSyntax(TypeScript.Syntax.token(72 /* OpenParenToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(73 /* CloseParenToken */), false);
};
ParameterListSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ParameterListSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ParameterListSyntax.prototype.withOpenParenToken = function (openParenToken) {
return this.update(openParenToken, this.parameters, this.closeParenToken);
};
ParameterListSyntax.prototype.withParameters = function (parameters) {
return this.update(this.openParenToken, parameters, this.closeParenToken);
};
ParameterListSyntax.prototype.withParameter = function (parameter) {
return this.withParameters(TypeScript.Syntax.separatedList([parameter]));
};
ParameterListSyntax.prototype.withCloseParenToken = function (closeParenToken) {
return this.update(this.openParenToken, this.parameters, closeParenToken);
};
ParameterListSyntax.prototype.isTypeScriptSpecific = function () {
if (this.parameters.isTypeScriptSpecific()) {
return true;
}
return false;
};
return ParameterListSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ParameterListSyntax = ParameterListSyntax;
var TypeParameterListSyntax = (function (_super) {
__extends(TypeParameterListSyntax, _super);
function TypeParameterListSyntax(lessThanToken, typeParameters, greaterThanToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.lessThanToken = lessThanToken;
this.typeParameters = typeParameters;
this.greaterThanToken = greaterThanToken;
}
TypeParameterListSyntax.prototype.accept = function (visitor) {
return visitor.visitTypeParameterList(this);
};
TypeParameterListSyntax.prototype.kind = function () {
return 229 /* TypeParameterList */;
};
TypeParameterListSyntax.prototype.childCount = function () {
return 3;
};
TypeParameterListSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.lessThanToken;
case 1:
return this.typeParameters;
case 2:
return this.greaterThanToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
TypeParameterListSyntax.prototype.update = function (lessThanToken, typeParameters, greaterThanToken) {
if (this.lessThanToken === lessThanToken && this.typeParameters === typeParameters && this.greaterThanToken === greaterThanToken) {
return this;
}
return new TypeParameterListSyntax(lessThanToken, typeParameters, greaterThanToken, this.parsedInStrictMode());
};
TypeParameterListSyntax.create = function (lessThanToken, greaterThanToken) {
return new TypeParameterListSyntax(lessThanToken, TypeScript.Syntax.emptySeparatedList, greaterThanToken, false);
};
TypeParameterListSyntax.create1 = function () {
return new TypeParameterListSyntax(TypeScript.Syntax.token(80 /* LessThanToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(81 /* GreaterThanToken */), false);
};
TypeParameterListSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
TypeParameterListSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
TypeParameterListSyntax.prototype.withLessThanToken = function (lessThanToken) {
return this.update(lessThanToken, this.typeParameters, this.greaterThanToken);
};
TypeParameterListSyntax.prototype.withTypeParameters = function (typeParameters) {
return this.update(this.lessThanToken, typeParameters, this.greaterThanToken);
};
TypeParameterListSyntax.prototype.withTypeParameter = function (typeParameter) {
return this.withTypeParameters(TypeScript.Syntax.separatedList([typeParameter]));
};
TypeParameterListSyntax.prototype.withGreaterThanToken = function (greaterThanToken) {
return this.update(this.lessThanToken, this.typeParameters, greaterThanToken);
};
TypeParameterListSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return TypeParameterListSyntax;
})(TypeScript.SyntaxNode);
TypeScript.TypeParameterListSyntax = TypeParameterListSyntax;
var TypeParameterSyntax = (function (_super) {
__extends(TypeParameterSyntax, _super);
function TypeParameterSyntax(identifier, constraint, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.identifier = identifier;
this.constraint = constraint;
}
TypeParameterSyntax.prototype.accept = function (visitor) {
return visitor.visitTypeParameter(this);
};
TypeParameterSyntax.prototype.kind = function () {
return 238 /* TypeParameter */;
};
TypeParameterSyntax.prototype.childCount = function () {
return 2;
};
TypeParameterSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.identifier;
case 1:
return this.constraint;
default:
throw TypeScript.Errors.invalidOperation();
}
};
TypeParameterSyntax.prototype.update = function (identifier, constraint) {
if (this.identifier === identifier && this.constraint === constraint) {
return this;
}
return new TypeParameterSyntax(identifier, constraint, this.parsedInStrictMode());
};
TypeParameterSyntax.create = function (identifier) {
return new TypeParameterSyntax(identifier, null, false);
};
TypeParameterSyntax.create1 = function (identifier) {
return new TypeParameterSyntax(identifier, null, false);
};
TypeParameterSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
TypeParameterSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
TypeParameterSyntax.prototype.withIdentifier = function (identifier) {
return this.update(identifier, this.constraint);
};
TypeParameterSyntax.prototype.withConstraint = function (constraint) {
return this.update(this.identifier, constraint);
};
TypeParameterSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return TypeParameterSyntax;
})(TypeScript.SyntaxNode);
TypeScript.TypeParameterSyntax = TypeParameterSyntax;
var ConstraintSyntax = (function (_super) {
__extends(ConstraintSyntax, _super);
function ConstraintSyntax(extendsKeyword, type, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.extendsKeyword = extendsKeyword;
this.type = type;
}
ConstraintSyntax.prototype.accept = function (visitor) {
return visitor.visitConstraint(this);
};
ConstraintSyntax.prototype.kind = function () {
return 239 /* Constraint */;
};
ConstraintSyntax.prototype.childCount = function () {
return 2;
};
ConstraintSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.extendsKeyword;
case 1:
return this.type;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ConstraintSyntax.prototype.update = function (extendsKeyword, type) {
if (this.extendsKeyword === extendsKeyword && this.type === type) {
return this;
}
return new ConstraintSyntax(extendsKeyword, type, this.parsedInStrictMode());
};
ConstraintSyntax.create1 = function (type) {
return new ConstraintSyntax(TypeScript.Syntax.token(48 /* ExtendsKeyword */), type, false);
};
ConstraintSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ConstraintSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ConstraintSyntax.prototype.withExtendsKeyword = function (extendsKeyword) {
return this.update(extendsKeyword, this.type);
};
ConstraintSyntax.prototype.withType = function (type) {
return this.update(this.extendsKeyword, type);
};
ConstraintSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return ConstraintSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ConstraintSyntax = ConstraintSyntax;
var ElseClauseSyntax = (function (_super) {
__extends(ElseClauseSyntax, _super);
function ElseClauseSyntax(elseKeyword, statement, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.elseKeyword = elseKeyword;
this.statement = statement;
}
ElseClauseSyntax.prototype.accept = function (visitor) {
return visitor.visitElseClause(this);
};
ElseClauseSyntax.prototype.kind = function () {
return 235 /* ElseClause */;
};
ElseClauseSyntax.prototype.childCount = function () {
return 2;
};
ElseClauseSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.elseKeyword;
case 1:
return this.statement;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ElseClauseSyntax.prototype.update = function (elseKeyword, statement) {
if (this.elseKeyword === elseKeyword && this.statement === statement) {
return this;
}
return new ElseClauseSyntax(elseKeyword, statement, this.parsedInStrictMode());
};
ElseClauseSyntax.create1 = function (statement) {
return new ElseClauseSyntax(TypeScript.Syntax.token(23 /* ElseKeyword */), statement, false);
};
ElseClauseSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ElseClauseSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ElseClauseSyntax.prototype.withElseKeyword = function (elseKeyword) {
return this.update(elseKeyword, this.statement);
};
ElseClauseSyntax.prototype.withStatement = function (statement) {
return this.update(this.elseKeyword, statement);
};
ElseClauseSyntax.prototype.isTypeScriptSpecific = function () {
if (this.statement.isTypeScriptSpecific()) {
return true;
}
return false;
};
return ElseClauseSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ElseClauseSyntax = ElseClauseSyntax;
var IfStatementSyntax = (function (_super) {
__extends(IfStatementSyntax, _super);
function IfStatementSyntax(ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.ifKeyword = ifKeyword;
this.openParenToken = openParenToken;
this.condition = condition;
this.closeParenToken = closeParenToken;
this.statement = statement;
this.elseClause = elseClause;
}
IfStatementSyntax.prototype.accept = function (visitor) {
return visitor.visitIfStatement(this);
};
IfStatementSyntax.prototype.kind = function () {
return 147 /* IfStatement */;
};
IfStatementSyntax.prototype.childCount = function () {
return 6;
};
IfStatementSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.ifKeyword;
case 1:
return this.openParenToken;
case 2:
return this.condition;
case 3:
return this.closeParenToken;
case 4:
return this.statement;
case 5:
return this.elseClause;
default:
throw TypeScript.Errors.invalidOperation();
}
};
IfStatementSyntax.prototype.isStatement = function () {
return true;
};
IfStatementSyntax.prototype.isModuleElement = function () {
return true;
};
IfStatementSyntax.prototype.update = function (ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause) {
if (this.ifKeyword === ifKeyword && this.openParenToken === openParenToken && this.condition === condition && this.closeParenToken === closeParenToken && this.statement === statement && this.elseClause === elseClause) {
return this;
}
return new IfStatementSyntax(ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause, this.parsedInStrictMode());
};
IfStatementSyntax.create = function (ifKeyword, openParenToken, condition, closeParenToken, statement) {
return new IfStatementSyntax(ifKeyword, openParenToken, condition, closeParenToken, statement, null, false);
};
IfStatementSyntax.create1 = function (condition, statement) {
return new IfStatementSyntax(TypeScript.Syntax.token(28 /* IfKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), condition, TypeScript.Syntax.token(73 /* CloseParenToken */), statement, null, false);
};
IfStatementSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
IfStatementSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
IfStatementSyntax.prototype.withIfKeyword = function (ifKeyword) {
return this.update(ifKeyword, this.openParenToken, this.condition, this.closeParenToken, this.statement, this.elseClause);
};
IfStatementSyntax.prototype.withOpenParenToken = function (openParenToken) {
return this.update(this.ifKeyword, openParenToken, this.condition, this.closeParenToken, this.statement, this.elseClause);
};
IfStatementSyntax.prototype.withCondition = function (condition) {
return this.update(this.ifKeyword, this.openParenToken, condition, this.closeParenToken, this.statement, this.elseClause);
};
IfStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) {
return this.update(this.ifKeyword, this.openParenToken, this.condition, closeParenToken, this.statement, this.elseClause);
};
IfStatementSyntax.prototype.withStatement = function (statement) {
return this.update(this.ifKeyword, this.openParenToken, this.condition, this.closeParenToken, statement, this.elseClause);
};
IfStatementSyntax.prototype.withElseClause = function (elseClause) {
return this.update(this.ifKeyword, this.openParenToken, this.condition, this.closeParenToken, this.statement, elseClause);
};
IfStatementSyntax.prototype.isTypeScriptSpecific = function () {
if (this.condition.isTypeScriptSpecific()) {
return true;
}
if (this.statement.isTypeScriptSpecific()) {
return true;
}
if (this.elseClause !== null && this.elseClause.isTypeScriptSpecific()) {
return true;
}
return false;
};
return IfStatementSyntax;
})(TypeScript.SyntaxNode);
TypeScript.IfStatementSyntax = IfStatementSyntax;
var ExpressionStatementSyntax = (function (_super) {
__extends(ExpressionStatementSyntax, _super);
function ExpressionStatementSyntax(expression, semicolonToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.expression = expression;
this.semicolonToken = semicolonToken;
}
ExpressionStatementSyntax.prototype.accept = function (visitor) {
return visitor.visitExpressionStatement(this);
};
ExpressionStatementSyntax.prototype.kind = function () {
return 149 /* ExpressionStatement */;
};
ExpressionStatementSyntax.prototype.childCount = function () {
return 2;
};
ExpressionStatementSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.expression;
case 1:
return this.semicolonToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ExpressionStatementSyntax.prototype.isStatement = function () {
return true;
};
ExpressionStatementSyntax.prototype.isModuleElement = function () {
return true;
};
ExpressionStatementSyntax.prototype.update = function (expression, semicolonToken) {
if (this.expression === expression && this.semicolonToken === semicolonToken) {
return this;
}
return new ExpressionStatementSyntax(expression, semicolonToken, this.parsedInStrictMode());
};
ExpressionStatementSyntax.create1 = function (expression) {
return new ExpressionStatementSyntax(expression, TypeScript.Syntax.token(78 /* SemicolonToken */), false);
};
ExpressionStatementSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ExpressionStatementSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ExpressionStatementSyntax.prototype.withExpression = function (expression) {
return this.update(expression, this.semicolonToken);
};
ExpressionStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) {
return this.update(this.expression, semicolonToken);
};
ExpressionStatementSyntax.prototype.isTypeScriptSpecific = function () {
if (this.expression.isTypeScriptSpecific()) {
return true;
}
return false;
};
return ExpressionStatementSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ExpressionStatementSyntax = ExpressionStatementSyntax;
var ConstructorDeclarationSyntax = (function (_super) {
__extends(ConstructorDeclarationSyntax, _super);
function ConstructorDeclarationSyntax(modifiers, constructorKeyword, callSignature, block, semicolonToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.modifiers = modifiers;
this.constructorKeyword = constructorKeyword;
this.callSignature = callSignature;
this.block = block;
this.semicolonToken = semicolonToken;
}
ConstructorDeclarationSyntax.prototype.accept = function (visitor) {
return visitor.visitConstructorDeclaration(this);
};
ConstructorDeclarationSyntax.prototype.kind = function () {
return 137 /* ConstructorDeclaration */;
};
ConstructorDeclarationSyntax.prototype.childCount = function () {
return 5;
};
ConstructorDeclarationSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.modifiers;
case 1:
return this.constructorKeyword;
case 2:
return this.callSignature;
case 3:
return this.block;
case 4:
return this.semicolonToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ConstructorDeclarationSyntax.prototype.isClassElement = function () {
return true;
};
ConstructorDeclarationSyntax.prototype.update = function (modifiers, constructorKeyword, callSignature, block, semicolonToken) {
if (this.modifiers === modifiers && this.constructorKeyword === constructorKeyword && this.callSignature === callSignature && this.block === block && this.semicolonToken === semicolonToken) {
return this;
}
return new ConstructorDeclarationSyntax(modifiers, constructorKeyword, callSignature, block, semicolonToken, this.parsedInStrictMode());
};
ConstructorDeclarationSyntax.create = function (constructorKeyword, callSignature) {
return new ConstructorDeclarationSyntax(TypeScript.Syntax.emptyList, constructorKeyword, callSignature, null, null, false);
};
ConstructorDeclarationSyntax.create1 = function () {
return new ConstructorDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(62 /* ConstructorKeyword */), CallSignatureSyntax.create1(), null, null, false);
};
ConstructorDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ConstructorDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ConstructorDeclarationSyntax.prototype.withModifiers = function (modifiers) {
return this.update(modifiers, this.constructorKeyword, this.callSignature, this.block, this.semicolonToken);
};
ConstructorDeclarationSyntax.prototype.withModifier = function (modifier) {
return this.withModifiers(TypeScript.Syntax.list([modifier]));
};
ConstructorDeclarationSyntax.prototype.withConstructorKeyword = function (constructorKeyword) {
return this.update(this.modifiers, constructorKeyword, this.callSignature, this.block, this.semicolonToken);
};
ConstructorDeclarationSyntax.prototype.withCallSignature = function (callSignature) {
return this.update(this.modifiers, this.constructorKeyword, callSignature, this.block, this.semicolonToken);
};
ConstructorDeclarationSyntax.prototype.withBlock = function (block) {
return this.update(this.modifiers, this.constructorKeyword, this.callSignature, block, this.semicolonToken);
};
ConstructorDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) {
return this.update(this.modifiers, this.constructorKeyword, this.callSignature, this.block, semicolonToken);
};
ConstructorDeclarationSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return ConstructorDeclarationSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ConstructorDeclarationSyntax = ConstructorDeclarationSyntax;
var MemberFunctionDeclarationSyntax = (function (_super) {
__extends(MemberFunctionDeclarationSyntax, _super);
function MemberFunctionDeclarationSyntax(modifiers, propertyName, callSignature, block, semicolonToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.modifiers = modifiers;
this.propertyName = propertyName;
this.callSignature = callSignature;
this.block = block;
this.semicolonToken = semicolonToken;
}
MemberFunctionDeclarationSyntax.prototype.accept = function (visitor) {
return visitor.visitMemberFunctionDeclaration(this);
};
MemberFunctionDeclarationSyntax.prototype.kind = function () {
return 135 /* MemberFunctionDeclaration */;
};
MemberFunctionDeclarationSyntax.prototype.childCount = function () {
return 5;
};
MemberFunctionDeclarationSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.modifiers;
case 1:
return this.propertyName;
case 2:
return this.callSignature;
case 3:
return this.block;
case 4:
return this.semicolonToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
MemberFunctionDeclarationSyntax.prototype.isMemberDeclaration = function () {
return true;
};
MemberFunctionDeclarationSyntax.prototype.isClassElement = function () {
return true;
};
MemberFunctionDeclarationSyntax.prototype.update = function (modifiers, propertyName, callSignature, block, semicolonToken) {
if (this.modifiers === modifiers && this.propertyName === propertyName && this.callSignature === callSignature && this.block === block && this.semicolonToken === semicolonToken) {
return this;
}
return new MemberFunctionDeclarationSyntax(modifiers, propertyName, callSignature, block, semicolonToken, this.parsedInStrictMode());
};
MemberFunctionDeclarationSyntax.create = function (propertyName, callSignature) {
return new MemberFunctionDeclarationSyntax(TypeScript.Syntax.emptyList, propertyName, callSignature, null, null, false);
};
MemberFunctionDeclarationSyntax.create1 = function (propertyName) {
return new MemberFunctionDeclarationSyntax(TypeScript.Syntax.emptyList, propertyName, CallSignatureSyntax.create1(), null, null, false);
};
MemberFunctionDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
MemberFunctionDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
MemberFunctionDeclarationSyntax.prototype.withModifiers = function (modifiers) {
return this.update(modifiers, this.propertyName, this.callSignature, this.block, this.semicolonToken);
};
MemberFunctionDeclarationSyntax.prototype.withModifier = function (modifier) {
return this.withModifiers(TypeScript.Syntax.list([modifier]));
};
MemberFunctionDeclarationSyntax.prototype.withPropertyName = function (propertyName) {
return this.update(this.modifiers, propertyName, this.callSignature, this.block, this.semicolonToken);
};
MemberFunctionDeclarationSyntax.prototype.withCallSignature = function (callSignature) {
return this.update(this.modifiers, this.propertyName, callSignature, this.block, this.semicolonToken);
};
MemberFunctionDeclarationSyntax.prototype.withBlock = function (block) {
return this.update(this.modifiers, this.propertyName, this.callSignature, block, this.semicolonToken);
};
MemberFunctionDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) {
return this.update(this.modifiers, this.propertyName, this.callSignature, this.block, semicolonToken);
};
MemberFunctionDeclarationSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return MemberFunctionDeclarationSyntax;
})(TypeScript.SyntaxNode);
TypeScript.MemberFunctionDeclarationSyntax = MemberFunctionDeclarationSyntax;
var GetAccessorSyntax = (function (_super) {
__extends(GetAccessorSyntax, _super);
function GetAccessorSyntax(modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.modifiers = modifiers;
this.getKeyword = getKeyword;
this.propertyName = propertyName;
this.parameterList = parameterList;
this.typeAnnotation = typeAnnotation;
this.block = block;
}
GetAccessorSyntax.prototype.accept = function (visitor) {
return visitor.visitGetAccessor(this);
};
GetAccessorSyntax.prototype.kind = function () {
return 139 /* GetAccessor */;
};
GetAccessorSyntax.prototype.childCount = function () {
return 6;
};
GetAccessorSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.modifiers;
case 1:
return this.getKeyword;
case 2:
return this.propertyName;
case 3:
return this.parameterList;
case 4:
return this.typeAnnotation;
case 5:
return this.block;
default:
throw TypeScript.Errors.invalidOperation();
}
};
GetAccessorSyntax.prototype.isMemberDeclaration = function () {
return true;
};
GetAccessorSyntax.prototype.isPropertyAssignment = function () {
return true;
};
GetAccessorSyntax.prototype.isClassElement = function () {
return true;
};
GetAccessorSyntax.prototype.update = function (modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block) {
if (this.modifiers === modifiers && this.getKeyword === getKeyword && this.propertyName === propertyName && this.parameterList === parameterList && this.typeAnnotation === typeAnnotation && this.block === block) {
return this;
}
return new GetAccessorSyntax(modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block, this.parsedInStrictMode());
};
GetAccessorSyntax.create = function (getKeyword, propertyName, parameterList, block) {
return new GetAccessorSyntax(TypeScript.Syntax.emptyList, getKeyword, propertyName, parameterList, null, block, false);
};
GetAccessorSyntax.create1 = function (propertyName) {
return new GetAccessorSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(64 /* GetKeyword */), propertyName, ParameterListSyntax.create1(), null, BlockSyntax.create1(), false);
};
GetAccessorSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
GetAccessorSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
GetAccessorSyntax.prototype.withModifiers = function (modifiers) {
return this.update(modifiers, this.getKeyword, this.propertyName, this.parameterList, this.typeAnnotation, this.block);
};
GetAccessorSyntax.prototype.withModifier = function (modifier) {
return this.withModifiers(TypeScript.Syntax.list([modifier]));
};
GetAccessorSyntax.prototype.withGetKeyword = function (getKeyword) {
return this.update(this.modifiers, getKeyword, this.propertyName, this.parameterList, this.typeAnnotation, this.block);
};
GetAccessorSyntax.prototype.withPropertyName = function (propertyName) {
return this.update(this.modifiers, this.getKeyword, propertyName, this.parameterList, this.typeAnnotation, this.block);
};
GetAccessorSyntax.prototype.withParameterList = function (parameterList) {
return this.update(this.modifiers, this.getKeyword, this.propertyName, parameterList, this.typeAnnotation, this.block);
};
GetAccessorSyntax.prototype.withTypeAnnotation = function (typeAnnotation) {
return this.update(this.modifiers, this.getKeyword, this.propertyName, this.parameterList, typeAnnotation, this.block);
};
GetAccessorSyntax.prototype.withBlock = function (block) {
return this.update(this.modifiers, this.getKeyword, this.propertyName, this.parameterList, this.typeAnnotation, block);
};
GetAccessorSyntax.prototype.isTypeScriptSpecific = function () {
if (this.modifiers.childCount() > 0) {
return true;
}
if (this.parameterList.isTypeScriptSpecific()) {
return true;
}
if (this.typeAnnotation !== null) {
return true;
}
if (this.block.isTypeScriptSpecific()) {
return true;
}
return false;
};
return GetAccessorSyntax;
})(TypeScript.SyntaxNode);
TypeScript.GetAccessorSyntax = GetAccessorSyntax;
var SetAccessorSyntax = (function (_super) {
__extends(SetAccessorSyntax, _super);
function SetAccessorSyntax(modifiers, setKeyword, propertyName, parameterList, block, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.modifiers = modifiers;
this.setKeyword = setKeyword;
this.propertyName = propertyName;
this.parameterList = parameterList;
this.block = block;
}
SetAccessorSyntax.prototype.accept = function (visitor) {
return visitor.visitSetAccessor(this);
};
SetAccessorSyntax.prototype.kind = function () {
return 140 /* SetAccessor */;
};
SetAccessorSyntax.prototype.childCount = function () {
return 5;
};
SetAccessorSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.modifiers;
case 1:
return this.setKeyword;
case 2:
return this.propertyName;
case 3:
return this.parameterList;
case 4:
return this.block;
default:
throw TypeScript.Errors.invalidOperation();
}
};
SetAccessorSyntax.prototype.isMemberDeclaration = function () {
return true;
};
SetAccessorSyntax.prototype.isPropertyAssignment = function () {
return true;
};
SetAccessorSyntax.prototype.isClassElement = function () {
return true;
};
SetAccessorSyntax.prototype.update = function (modifiers, setKeyword, propertyName, parameterList, block) {
if (this.modifiers === modifiers && this.setKeyword === setKeyword && this.propertyName === propertyName && this.parameterList === parameterList && this.block === block) {
return this;
}
return new SetAccessorSyntax(modifiers, setKeyword, propertyName, parameterList, block, this.parsedInStrictMode());
};
SetAccessorSyntax.create = function (setKeyword, propertyName, parameterList, block) {
return new SetAccessorSyntax(TypeScript.Syntax.emptyList, setKeyword, propertyName, parameterList, block, false);
};
SetAccessorSyntax.create1 = function (propertyName) {
return new SetAccessorSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(68 /* SetKeyword */), propertyName, ParameterListSyntax.create1(), BlockSyntax.create1(), false);
};
SetAccessorSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
SetAccessorSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
SetAccessorSyntax.prototype.withModifiers = function (modifiers) {
return this.update(modifiers, this.setKeyword, this.propertyName, this.parameterList, this.block);
};
SetAccessorSyntax.prototype.withModifier = function (modifier) {
return this.withModifiers(TypeScript.Syntax.list([modifier]));
};
SetAccessorSyntax.prototype.withSetKeyword = function (setKeyword) {
return this.update(this.modifiers, setKeyword, this.propertyName, this.parameterList, this.block);
};
SetAccessorSyntax.prototype.withPropertyName = function (propertyName) {
return this.update(this.modifiers, this.setKeyword, propertyName, this.parameterList, this.block);
};
SetAccessorSyntax.prototype.withParameterList = function (parameterList) {
return this.update(this.modifiers, this.setKeyword, this.propertyName, parameterList, this.block);
};
SetAccessorSyntax.prototype.withBlock = function (block) {
return this.update(this.modifiers, this.setKeyword, this.propertyName, this.parameterList, block);
};
SetAccessorSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return SetAccessorSyntax;
})(TypeScript.SyntaxNode);
TypeScript.SetAccessorSyntax = SetAccessorSyntax;
var MemberVariableDeclarationSyntax = (function (_super) {
__extends(MemberVariableDeclarationSyntax, _super);
function MemberVariableDeclarationSyntax(modifiers, variableDeclarator, semicolonToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.modifiers = modifiers;
this.variableDeclarator = variableDeclarator;
this.semicolonToken = semicolonToken;
}
MemberVariableDeclarationSyntax.prototype.accept = function (visitor) {
return visitor.visitMemberVariableDeclaration(this);
};
MemberVariableDeclarationSyntax.prototype.kind = function () {
return 136 /* MemberVariableDeclaration */;
};
MemberVariableDeclarationSyntax.prototype.childCount = function () {
return 3;
};
MemberVariableDeclarationSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.modifiers;
case 1:
return this.variableDeclarator;
case 2:
return this.semicolonToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
MemberVariableDeclarationSyntax.prototype.isMemberDeclaration = function () {
return true;
};
MemberVariableDeclarationSyntax.prototype.isClassElement = function () {
return true;
};
MemberVariableDeclarationSyntax.prototype.update = function (modifiers, variableDeclarator, semicolonToken) {
if (this.modifiers === modifiers && this.variableDeclarator === variableDeclarator && this.semicolonToken === semicolonToken) {
return this;
}
return new MemberVariableDeclarationSyntax(modifiers, variableDeclarator, semicolonToken, this.parsedInStrictMode());
};
MemberVariableDeclarationSyntax.create = function (variableDeclarator, semicolonToken) {
return new MemberVariableDeclarationSyntax(TypeScript.Syntax.emptyList, variableDeclarator, semicolonToken, false);
};
MemberVariableDeclarationSyntax.create1 = function (variableDeclarator) {
return new MemberVariableDeclarationSyntax(TypeScript.Syntax.emptyList, variableDeclarator, TypeScript.Syntax.token(78 /* SemicolonToken */), false);
};
MemberVariableDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
MemberVariableDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
MemberVariableDeclarationSyntax.prototype.withModifiers = function (modifiers) {
return this.update(modifiers, this.variableDeclarator, this.semicolonToken);
};
MemberVariableDeclarationSyntax.prototype.withModifier = function (modifier) {
return this.withModifiers(TypeScript.Syntax.list([modifier]));
};
MemberVariableDeclarationSyntax.prototype.withVariableDeclarator = function (variableDeclarator) {
return this.update(this.modifiers, variableDeclarator, this.semicolonToken);
};
MemberVariableDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) {
return this.update(this.modifiers, this.variableDeclarator, semicolonToken);
};
MemberVariableDeclarationSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return MemberVariableDeclarationSyntax;
})(TypeScript.SyntaxNode);
TypeScript.MemberVariableDeclarationSyntax = MemberVariableDeclarationSyntax;
var IndexMemberDeclarationSyntax = (function (_super) {
__extends(IndexMemberDeclarationSyntax, _super);
function IndexMemberDeclarationSyntax(modifiers, indexSignature, semicolonToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.modifiers = modifiers;
this.indexSignature = indexSignature;
this.semicolonToken = semicolonToken;
}
IndexMemberDeclarationSyntax.prototype.accept = function (visitor) {
return visitor.visitIndexMemberDeclaration(this);
};
IndexMemberDeclarationSyntax.prototype.kind = function () {
return 138 /* IndexMemberDeclaration */;
};
IndexMemberDeclarationSyntax.prototype.childCount = function () {
return 3;
};
IndexMemberDeclarationSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.modifiers;
case 1:
return this.indexSignature;
case 2:
return this.semicolonToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
IndexMemberDeclarationSyntax.prototype.isClassElement = function () {
return true;
};
IndexMemberDeclarationSyntax.prototype.update = function (modifiers, indexSignature, semicolonToken) {
if (this.modifiers === modifiers && this.indexSignature === indexSignature && this.semicolonToken === semicolonToken) {
return this;
}
return new IndexMemberDeclarationSyntax(modifiers, indexSignature, semicolonToken, this.parsedInStrictMode());
};
IndexMemberDeclarationSyntax.create = function (indexSignature, semicolonToken) {
return new IndexMemberDeclarationSyntax(TypeScript.Syntax.emptyList, indexSignature, semicolonToken, false);
};
IndexMemberDeclarationSyntax.create1 = function (indexSignature) {
return new IndexMemberDeclarationSyntax(TypeScript.Syntax.emptyList, indexSignature, TypeScript.Syntax.token(78 /* SemicolonToken */), false);
};
IndexMemberDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
IndexMemberDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
IndexMemberDeclarationSyntax.prototype.withModifiers = function (modifiers) {
return this.update(modifiers, this.indexSignature, this.semicolonToken);
};
IndexMemberDeclarationSyntax.prototype.withModifier = function (modifier) {
return this.withModifiers(TypeScript.Syntax.list([modifier]));
};
IndexMemberDeclarationSyntax.prototype.withIndexSignature = function (indexSignature) {
return this.update(this.modifiers, indexSignature, this.semicolonToken);
};
IndexMemberDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) {
return this.update(this.modifiers, this.indexSignature, semicolonToken);
};
IndexMemberDeclarationSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return IndexMemberDeclarationSyntax;
})(TypeScript.SyntaxNode);
TypeScript.IndexMemberDeclarationSyntax = IndexMemberDeclarationSyntax;
var ThrowStatementSyntax = (function (_super) {
__extends(ThrowStatementSyntax, _super);
function ThrowStatementSyntax(throwKeyword, expression, semicolonToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.throwKeyword = throwKeyword;
this.expression = expression;
this.semicolonToken = semicolonToken;
}
ThrowStatementSyntax.prototype.accept = function (visitor) {
return visitor.visitThrowStatement(this);
};
ThrowStatementSyntax.prototype.kind = function () {
return 157 /* ThrowStatement */;
};
ThrowStatementSyntax.prototype.childCount = function () {
return 3;
};
ThrowStatementSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.throwKeyword;
case 1:
return this.expression;
case 2:
return this.semicolonToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ThrowStatementSyntax.prototype.isStatement = function () {
return true;
};
ThrowStatementSyntax.prototype.isModuleElement = function () {
return true;
};
ThrowStatementSyntax.prototype.update = function (throwKeyword, expression, semicolonToken) {
if (this.throwKeyword === throwKeyword && this.expression === expression && this.semicolonToken === semicolonToken) {
return this;
}
return new ThrowStatementSyntax(throwKeyword, expression, semicolonToken, this.parsedInStrictMode());
};
ThrowStatementSyntax.create1 = function (expression) {
return new ThrowStatementSyntax(TypeScript.Syntax.token(36 /* ThrowKeyword */), expression, TypeScript.Syntax.token(78 /* SemicolonToken */), false);
};
ThrowStatementSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ThrowStatementSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ThrowStatementSyntax.prototype.withThrowKeyword = function (throwKeyword) {
return this.update(throwKeyword, this.expression, this.semicolonToken);
};
ThrowStatementSyntax.prototype.withExpression = function (expression) {
return this.update(this.throwKeyword, expression, this.semicolonToken);
};
ThrowStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) {
return this.update(this.throwKeyword, this.expression, semicolonToken);
};
ThrowStatementSyntax.prototype.isTypeScriptSpecific = function () {
if (this.expression.isTypeScriptSpecific()) {
return true;
}
return false;
};
return ThrowStatementSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ThrowStatementSyntax = ThrowStatementSyntax;
var ReturnStatementSyntax = (function (_super) {
__extends(ReturnStatementSyntax, _super);
function ReturnStatementSyntax(returnKeyword, expression, semicolonToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.returnKeyword = returnKeyword;
this.expression = expression;
this.semicolonToken = semicolonToken;
}
ReturnStatementSyntax.prototype.accept = function (visitor) {
return visitor.visitReturnStatement(this);
};
ReturnStatementSyntax.prototype.kind = function () {
return 150 /* ReturnStatement */;
};
ReturnStatementSyntax.prototype.childCount = function () {
return 3;
};
ReturnStatementSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.returnKeyword;
case 1:
return this.expression;
case 2:
return this.semicolonToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ReturnStatementSyntax.prototype.isStatement = function () {
return true;
};
ReturnStatementSyntax.prototype.isModuleElement = function () {
return true;
};
ReturnStatementSyntax.prototype.update = function (returnKeyword, expression, semicolonToken) {
if (this.returnKeyword === returnKeyword && this.expression === expression && this.semicolonToken === semicolonToken) {
return this;
}
return new ReturnStatementSyntax(returnKeyword, expression, semicolonToken, this.parsedInStrictMode());
};
ReturnStatementSyntax.create = function (returnKeyword, semicolonToken) {
return new ReturnStatementSyntax(returnKeyword, null, semicolonToken, false);
};
ReturnStatementSyntax.create1 = function () {
return new ReturnStatementSyntax(TypeScript.Syntax.token(33 /* ReturnKeyword */), null, TypeScript.Syntax.token(78 /* SemicolonToken */), false);
};
ReturnStatementSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ReturnStatementSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ReturnStatementSyntax.prototype.withReturnKeyword = function (returnKeyword) {
return this.update(returnKeyword, this.expression, this.semicolonToken);
};
ReturnStatementSyntax.prototype.withExpression = function (expression) {
return this.update(this.returnKeyword, expression, this.semicolonToken);
};
ReturnStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) {
return this.update(this.returnKeyword, this.expression, semicolonToken);
};
ReturnStatementSyntax.prototype.isTypeScriptSpecific = function () {
if (this.expression !== null && this.expression.isTypeScriptSpecific()) {
return true;
}
return false;
};
return ReturnStatementSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ReturnStatementSyntax = ReturnStatementSyntax;
var ObjectCreationExpressionSyntax = (function (_super) {
__extends(ObjectCreationExpressionSyntax, _super);
function ObjectCreationExpressionSyntax(newKeyword, expression, argumentList, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.newKeyword = newKeyword;
this.expression = expression;
this.argumentList = argumentList;
}
ObjectCreationExpressionSyntax.prototype.accept = function (visitor) {
return visitor.visitObjectCreationExpression(this);
};
ObjectCreationExpressionSyntax.prototype.kind = function () {
return 216 /* ObjectCreationExpression */;
};
ObjectCreationExpressionSyntax.prototype.childCount = function () {
return 3;
};
ObjectCreationExpressionSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.newKeyword;
case 1:
return this.expression;
case 2:
return this.argumentList;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ObjectCreationExpressionSyntax.prototype.isMemberExpression = function () {
return true;
};
ObjectCreationExpressionSyntax.prototype.isPostfixExpression = function () {
return true;
};
ObjectCreationExpressionSyntax.prototype.isUnaryExpression = function () {
return true;
};
ObjectCreationExpressionSyntax.prototype.isExpression = function () {
return true;
};
ObjectCreationExpressionSyntax.prototype.update = function (newKeyword, expression, argumentList) {
if (this.newKeyword === newKeyword && this.expression === expression && this.argumentList === argumentList) {
return this;
}
return new ObjectCreationExpressionSyntax(newKeyword, expression, argumentList, this.parsedInStrictMode());
};
ObjectCreationExpressionSyntax.create = function (newKeyword, expression) {
return new ObjectCreationExpressionSyntax(newKeyword, expression, null, false);
};
ObjectCreationExpressionSyntax.create1 = function (expression) {
return new ObjectCreationExpressionSyntax(TypeScript.Syntax.token(31 /* NewKeyword */), expression, null, false);
};
ObjectCreationExpressionSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ObjectCreationExpressionSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ObjectCreationExpressionSyntax.prototype.withNewKeyword = function (newKeyword) {
return this.update(newKeyword, this.expression, this.argumentList);
};
ObjectCreationExpressionSyntax.prototype.withExpression = function (expression) {
return this.update(this.newKeyword, expression, this.argumentList);
};
ObjectCreationExpressionSyntax.prototype.withArgumentList = function (argumentList) {
return this.update(this.newKeyword, this.expression, argumentList);
};
ObjectCreationExpressionSyntax.prototype.isTypeScriptSpecific = function () {
if (this.expression.isTypeScriptSpecific()) {
return true;
}
if (this.argumentList !== null && this.argumentList.isTypeScriptSpecific()) {
return true;
}
return false;
};
return ObjectCreationExpressionSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ObjectCreationExpressionSyntax = ObjectCreationExpressionSyntax;
var SwitchStatementSyntax = (function (_super) {
__extends(SwitchStatementSyntax, _super);
function SwitchStatementSyntax(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.switchKeyword = switchKeyword;
this.openParenToken = openParenToken;
this.expression = expression;
this.closeParenToken = closeParenToken;
this.openBraceToken = openBraceToken;
this.switchClauses = switchClauses;
this.closeBraceToken = closeBraceToken;
}
SwitchStatementSyntax.prototype.accept = function (visitor) {
return visitor.visitSwitchStatement(this);
};
SwitchStatementSyntax.prototype.kind = function () {
return 151 /* SwitchStatement */;
};
SwitchStatementSyntax.prototype.childCount = function () {
return 7;
};
SwitchStatementSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.switchKeyword;
case 1:
return this.openParenToken;
case 2:
return this.expression;
case 3:
return this.closeParenToken;
case 4:
return this.openBraceToken;
case 5:
return this.switchClauses;
case 6:
return this.closeBraceToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
SwitchStatementSyntax.prototype.isStatement = function () {
return true;
};
SwitchStatementSyntax.prototype.isModuleElement = function () {
return true;
};
SwitchStatementSyntax.prototype.update = function (switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken) {
if (this.switchKeyword === switchKeyword && this.openParenToken === openParenToken && this.expression === expression && this.closeParenToken === closeParenToken && this.openBraceToken === openBraceToken && this.switchClauses === switchClauses && this.closeBraceToken === closeBraceToken) {
return this;
}
return new SwitchStatementSyntax(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken, this.parsedInStrictMode());
};
SwitchStatementSyntax.create = function (switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, closeBraceToken) {
return new SwitchStatementSyntax(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, TypeScript.Syntax.emptyList, closeBraceToken, false);
};
SwitchStatementSyntax.create1 = function (expression) {
return new SwitchStatementSyntax(TypeScript.Syntax.token(34 /* SwitchKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), expression, TypeScript.Syntax.token(73 /* CloseParenToken */), TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptyList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false);
};
SwitchStatementSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
SwitchStatementSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
SwitchStatementSyntax.prototype.withSwitchKeyword = function (switchKeyword) {
return this.update(switchKeyword, this.openParenToken, this.expression, this.closeParenToken, this.openBraceToken, this.switchClauses, this.closeBraceToken);
};
SwitchStatementSyntax.prototype.withOpenParenToken = function (openParenToken) {
return this.update(this.switchKeyword, openParenToken, this.expression, this.closeParenToken, this.openBraceToken, this.switchClauses, this.closeBraceToken);
};
SwitchStatementSyntax.prototype.withExpression = function (expression) {
return this.update(this.switchKeyword, this.openParenToken, expression, this.closeParenToken, this.openBraceToken, this.switchClauses, this.closeBraceToken);
};
SwitchStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) {
return this.update(this.switchKeyword, this.openParenToken, this.expression, closeParenToken, this.openBraceToken, this.switchClauses, this.closeBraceToken);
};
SwitchStatementSyntax.prototype.withOpenBraceToken = function (openBraceToken) {
return this.update(this.switchKeyword, this.openParenToken, this.expression, this.closeParenToken, openBraceToken, this.switchClauses, this.closeBraceToken);
};
SwitchStatementSyntax.prototype.withSwitchClauses = function (switchClauses) {
return this.update(this.switchKeyword, this.openParenToken, this.expression, this.closeParenToken, this.openBraceToken, switchClauses, this.closeBraceToken);
};
SwitchStatementSyntax.prototype.withSwitchClause = function (switchClause) {
return this.withSwitchClauses(TypeScript.Syntax.list([switchClause]));
};
SwitchStatementSyntax.prototype.withCloseBraceToken = function (closeBraceToken) {
return this.update(this.switchKeyword, this.openParenToken, this.expression, this.closeParenToken, this.openBraceToken, this.switchClauses, closeBraceToken);
};
SwitchStatementSyntax.prototype.isTypeScriptSpecific = function () {
if (this.expression.isTypeScriptSpecific()) {
return true;
}
if (this.switchClauses.isTypeScriptSpecific()) {
return true;
}
return false;
};
return SwitchStatementSyntax;
})(TypeScript.SyntaxNode);
TypeScript.SwitchStatementSyntax = SwitchStatementSyntax;
var CaseSwitchClauseSyntax = (function (_super) {
__extends(CaseSwitchClauseSyntax, _super);
function CaseSwitchClauseSyntax(caseKeyword, expression, colonToken, statements, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.caseKeyword = caseKeyword;
this.expression = expression;
this.colonToken = colonToken;
this.statements = statements;
}
CaseSwitchClauseSyntax.prototype.accept = function (visitor) {
return visitor.visitCaseSwitchClause(this);
};
CaseSwitchClauseSyntax.prototype.kind = function () {
return 233 /* CaseSwitchClause */;
};
CaseSwitchClauseSyntax.prototype.childCount = function () {
return 4;
};
CaseSwitchClauseSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.caseKeyword;
case 1:
return this.expression;
case 2:
return this.colonToken;
case 3:
return this.statements;
default:
throw TypeScript.Errors.invalidOperation();
}
};
CaseSwitchClauseSyntax.prototype.isSwitchClause = function () {
return true;
};
CaseSwitchClauseSyntax.prototype.update = function (caseKeyword, expression, colonToken, statements) {
if (this.caseKeyword === caseKeyword && this.expression === expression && this.colonToken === colonToken && this.statements === statements) {
return this;
}
return new CaseSwitchClauseSyntax(caseKeyword, expression, colonToken, statements, this.parsedInStrictMode());
};
CaseSwitchClauseSyntax.create = function (caseKeyword, expression, colonToken) {
return new CaseSwitchClauseSyntax(caseKeyword, expression, colonToken, TypeScript.Syntax.emptyList, false);
};
CaseSwitchClauseSyntax.create1 = function (expression) {
return new CaseSwitchClauseSyntax(TypeScript.Syntax.token(16 /* CaseKeyword */), expression, TypeScript.Syntax.token(106 /* ColonToken */), TypeScript.Syntax.emptyList, false);
};
CaseSwitchClauseSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
CaseSwitchClauseSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
CaseSwitchClauseSyntax.prototype.withCaseKeyword = function (caseKeyword) {
return this.update(caseKeyword, this.expression, this.colonToken, this.statements);
};
CaseSwitchClauseSyntax.prototype.withExpression = function (expression) {
return this.update(this.caseKeyword, expression, this.colonToken, this.statements);
};
CaseSwitchClauseSyntax.prototype.withColonToken = function (colonToken) {
return this.update(this.caseKeyword, this.expression, colonToken, this.statements);
};
CaseSwitchClauseSyntax.prototype.withStatements = function (statements) {
return this.update(this.caseKeyword, this.expression, this.colonToken, statements);
};
CaseSwitchClauseSyntax.prototype.withStatement = function (statement) {
return this.withStatements(TypeScript.Syntax.list([statement]));
};
CaseSwitchClauseSyntax.prototype.isTypeScriptSpecific = function () {
if (this.expression.isTypeScriptSpecific()) {
return true;
}
if (this.statements.isTypeScriptSpecific()) {
return true;
}
return false;
};
return CaseSwitchClauseSyntax;
})(TypeScript.SyntaxNode);
TypeScript.CaseSwitchClauseSyntax = CaseSwitchClauseSyntax;
var DefaultSwitchClauseSyntax = (function (_super) {
__extends(DefaultSwitchClauseSyntax, _super);
function DefaultSwitchClauseSyntax(defaultKeyword, colonToken, statements, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.defaultKeyword = defaultKeyword;
this.colonToken = colonToken;
this.statements = statements;
}
DefaultSwitchClauseSyntax.prototype.accept = function (visitor) {
return visitor.visitDefaultSwitchClause(this);
};
DefaultSwitchClauseSyntax.prototype.kind = function () {
return 234 /* DefaultSwitchClause */;
};
DefaultSwitchClauseSyntax.prototype.childCount = function () {
return 3;
};
DefaultSwitchClauseSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.defaultKeyword;
case 1:
return this.colonToken;
case 2:
return this.statements;
default:
throw TypeScript.Errors.invalidOperation();
}
};
DefaultSwitchClauseSyntax.prototype.isSwitchClause = function () {
return true;
};
DefaultSwitchClauseSyntax.prototype.update = function (defaultKeyword, colonToken, statements) {
if (this.defaultKeyword === defaultKeyword && this.colonToken === colonToken && this.statements === statements) {
return this;
}
return new DefaultSwitchClauseSyntax(defaultKeyword, colonToken, statements, this.parsedInStrictMode());
};
DefaultSwitchClauseSyntax.create = function (defaultKeyword, colonToken) {
return new DefaultSwitchClauseSyntax(defaultKeyword, colonToken, TypeScript.Syntax.emptyList, false);
};
DefaultSwitchClauseSyntax.create1 = function () {
return new DefaultSwitchClauseSyntax(TypeScript.Syntax.token(20 /* DefaultKeyword */), TypeScript.Syntax.token(106 /* ColonToken */), TypeScript.Syntax.emptyList, false);
};
DefaultSwitchClauseSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
DefaultSwitchClauseSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
DefaultSwitchClauseSyntax.prototype.withDefaultKeyword = function (defaultKeyword) {
return this.update(defaultKeyword, this.colonToken, this.statements);
};
DefaultSwitchClauseSyntax.prototype.withColonToken = function (colonToken) {
return this.update(this.defaultKeyword, colonToken, this.statements);
};
DefaultSwitchClauseSyntax.prototype.withStatements = function (statements) {
return this.update(this.defaultKeyword, this.colonToken, statements);
};
DefaultSwitchClauseSyntax.prototype.withStatement = function (statement) {
return this.withStatements(TypeScript.Syntax.list([statement]));
};
DefaultSwitchClauseSyntax.prototype.isTypeScriptSpecific = function () {
if (this.statements.isTypeScriptSpecific()) {
return true;
}
return false;
};
return DefaultSwitchClauseSyntax;
})(TypeScript.SyntaxNode);
TypeScript.DefaultSwitchClauseSyntax = DefaultSwitchClauseSyntax;
var BreakStatementSyntax = (function (_super) {
__extends(BreakStatementSyntax, _super);
function BreakStatementSyntax(breakKeyword, identifier, semicolonToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.breakKeyword = breakKeyword;
this.identifier = identifier;
this.semicolonToken = semicolonToken;
}
BreakStatementSyntax.prototype.accept = function (visitor) {
return visitor.visitBreakStatement(this);
};
BreakStatementSyntax.prototype.kind = function () {
return 152 /* BreakStatement */;
};
BreakStatementSyntax.prototype.childCount = function () {
return 3;
};
BreakStatementSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.breakKeyword;
case 1:
return this.identifier;
case 2:
return this.semicolonToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
BreakStatementSyntax.prototype.isStatement = function () {
return true;
};
BreakStatementSyntax.prototype.isModuleElement = function () {
return true;
};
BreakStatementSyntax.prototype.update = function (breakKeyword, identifier, semicolonToken) {
if (this.breakKeyword === breakKeyword && this.identifier === identifier && this.semicolonToken === semicolonToken) {
return this;
}
return new BreakStatementSyntax(breakKeyword, identifier, semicolonToken, this.parsedInStrictMode());
};
BreakStatementSyntax.create = function (breakKeyword, semicolonToken) {
return new BreakStatementSyntax(breakKeyword, null, semicolonToken, false);
};
BreakStatementSyntax.create1 = function () {
return new BreakStatementSyntax(TypeScript.Syntax.token(15 /* BreakKeyword */), null, TypeScript.Syntax.token(78 /* SemicolonToken */), false);
};
BreakStatementSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
BreakStatementSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
BreakStatementSyntax.prototype.withBreakKeyword = function (breakKeyword) {
return this.update(breakKeyword, this.identifier, this.semicolonToken);
};
BreakStatementSyntax.prototype.withIdentifier = function (identifier) {
return this.update(this.breakKeyword, identifier, this.semicolonToken);
};
BreakStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) {
return this.update(this.breakKeyword, this.identifier, semicolonToken);
};
BreakStatementSyntax.prototype.isTypeScriptSpecific = function () {
return false;
};
return BreakStatementSyntax;
})(TypeScript.SyntaxNode);
TypeScript.BreakStatementSyntax = BreakStatementSyntax;
var ContinueStatementSyntax = (function (_super) {
__extends(ContinueStatementSyntax, _super);
function ContinueStatementSyntax(continueKeyword, identifier, semicolonToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.continueKeyword = continueKeyword;
this.identifier = identifier;
this.semicolonToken = semicolonToken;
}
ContinueStatementSyntax.prototype.accept = function (visitor) {
return visitor.visitContinueStatement(this);
};
ContinueStatementSyntax.prototype.kind = function () {
return 153 /* ContinueStatement */;
};
ContinueStatementSyntax.prototype.childCount = function () {
return 3;
};
ContinueStatementSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.continueKeyword;
case 1:
return this.identifier;
case 2:
return this.semicolonToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ContinueStatementSyntax.prototype.isStatement = function () {
return true;
};
ContinueStatementSyntax.prototype.isModuleElement = function () {
return true;
};
ContinueStatementSyntax.prototype.update = function (continueKeyword, identifier, semicolonToken) {
if (this.continueKeyword === continueKeyword && this.identifier === identifier && this.semicolonToken === semicolonToken) {
return this;
}
return new ContinueStatementSyntax(continueKeyword, identifier, semicolonToken, this.parsedInStrictMode());
};
ContinueStatementSyntax.create = function (continueKeyword, semicolonToken) {
return new ContinueStatementSyntax(continueKeyword, null, semicolonToken, false);
};
ContinueStatementSyntax.create1 = function () {
return new ContinueStatementSyntax(TypeScript.Syntax.token(18 /* ContinueKeyword */), null, TypeScript.Syntax.token(78 /* SemicolonToken */), false);
};
ContinueStatementSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ContinueStatementSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ContinueStatementSyntax.prototype.withContinueKeyword = function (continueKeyword) {
return this.update(continueKeyword, this.identifier, this.semicolonToken);
};
ContinueStatementSyntax.prototype.withIdentifier = function (identifier) {
return this.update(this.continueKeyword, identifier, this.semicolonToken);
};
ContinueStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) {
return this.update(this.continueKeyword, this.identifier, semicolonToken);
};
ContinueStatementSyntax.prototype.isTypeScriptSpecific = function () {
return false;
};
return ContinueStatementSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ContinueStatementSyntax = ContinueStatementSyntax;
var ForStatementSyntax = (function (_super) {
__extends(ForStatementSyntax, _super);
function ForStatementSyntax(forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.forKeyword = forKeyword;
this.openParenToken = openParenToken;
this.variableDeclaration = variableDeclaration;
this.initializer = initializer;
this.firstSemicolonToken = firstSemicolonToken;
this.condition = condition;
this.secondSemicolonToken = secondSemicolonToken;
this.incrementor = incrementor;
this.closeParenToken = closeParenToken;
this.statement = statement;
}
ForStatementSyntax.prototype.accept = function (visitor) {
return visitor.visitForStatement(this);
};
ForStatementSyntax.prototype.kind = function () {
return 154 /* ForStatement */;
};
ForStatementSyntax.prototype.childCount = function () {
return 10;
};
ForStatementSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.forKeyword;
case 1:
return this.openParenToken;
case 2:
return this.variableDeclaration;
case 3:
return this.initializer;
case 4:
return this.firstSemicolonToken;
case 5:
return this.condition;
case 6:
return this.secondSemicolonToken;
case 7:
return this.incrementor;
case 8:
return this.closeParenToken;
case 9:
return this.statement;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ForStatementSyntax.prototype.isIterationStatement = function () {
return true;
};
ForStatementSyntax.prototype.isStatement = function () {
return true;
};
ForStatementSyntax.prototype.isModuleElement = function () {
return true;
};
ForStatementSyntax.prototype.update = function (forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement) {
if (this.forKeyword === forKeyword && this.openParenToken === openParenToken && this.variableDeclaration === variableDeclaration && this.initializer === initializer && this.firstSemicolonToken === firstSemicolonToken && this.condition === condition && this.secondSemicolonToken === secondSemicolonToken && this.incrementor === incrementor && this.closeParenToken === closeParenToken && this.statement === statement) {
return this;
}
return new ForStatementSyntax(forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement, this.parsedInStrictMode());
};
ForStatementSyntax.create = function (forKeyword, openParenToken, firstSemicolonToken, secondSemicolonToken, closeParenToken, statement) {
return new ForStatementSyntax(forKeyword, openParenToken, null, null, firstSemicolonToken, null, secondSemicolonToken, null, closeParenToken, statement, false);
};
ForStatementSyntax.create1 = function (statement) {
return new ForStatementSyntax(TypeScript.Syntax.token(26 /* ForKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), null, null, TypeScript.Syntax.token(78 /* SemicolonToken */), null, TypeScript.Syntax.token(78 /* SemicolonToken */), null, TypeScript.Syntax.token(73 /* CloseParenToken */), statement, false);
};
ForStatementSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ForStatementSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ForStatementSyntax.prototype.withForKeyword = function (forKeyword) {
return this.update(forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement);
};
ForStatementSyntax.prototype.withOpenParenToken = function (openParenToken) {
return this.update(this.forKeyword, openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement);
};
ForStatementSyntax.prototype.withVariableDeclaration = function (variableDeclaration) {
return this.update(this.forKeyword, this.openParenToken, variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement);
};
ForStatementSyntax.prototype.withInitializer = function (initializer) {
return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement);
};
ForStatementSyntax.prototype.withFirstSemicolonToken = function (firstSemicolonToken) {
return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement);
};
ForStatementSyntax.prototype.withCondition = function (condition) {
return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement);
};
ForStatementSyntax.prototype.withSecondSemicolonToken = function (secondSemicolonToken) {
return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement);
};
ForStatementSyntax.prototype.withIncrementor = function (incrementor) {
return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, incrementor, this.closeParenToken, this.statement);
};
ForStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) {
return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, closeParenToken, this.statement);
};
ForStatementSyntax.prototype.withStatement = function (statement) {
return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, statement);
};
ForStatementSyntax.prototype.isTypeScriptSpecific = function () {
if (this.variableDeclaration !== null && this.variableDeclaration.isTypeScriptSpecific()) {
return true;
}
if (this.initializer !== null && this.initializer.isTypeScriptSpecific()) {
return true;
}
if (this.condition !== null && this.condition.isTypeScriptSpecific()) {
return true;
}
if (this.incrementor !== null && this.incrementor.isTypeScriptSpecific()) {
return true;
}
if (this.statement.isTypeScriptSpecific()) {
return true;
}
return false;
};
return ForStatementSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ForStatementSyntax = ForStatementSyntax;
var ForInStatementSyntax = (function (_super) {
__extends(ForInStatementSyntax, _super);
function ForInStatementSyntax(forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.forKeyword = forKeyword;
this.openParenToken = openParenToken;
this.variableDeclaration = variableDeclaration;
this.left = left;
this.inKeyword = inKeyword;
this.expression = expression;
this.closeParenToken = closeParenToken;
this.statement = statement;
}
ForInStatementSyntax.prototype.accept = function (visitor) {
return visitor.visitForInStatement(this);
};
ForInStatementSyntax.prototype.kind = function () {
return 155 /* ForInStatement */;
};
ForInStatementSyntax.prototype.childCount = function () {
return 8;
};
ForInStatementSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.forKeyword;
case 1:
return this.openParenToken;
case 2:
return this.variableDeclaration;
case 3:
return this.left;
case 4:
return this.inKeyword;
case 5:
return this.expression;
case 6:
return this.closeParenToken;
case 7:
return this.statement;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ForInStatementSyntax.prototype.isIterationStatement = function () {
return true;
};
ForInStatementSyntax.prototype.isStatement = function () {
return true;
};
ForInStatementSyntax.prototype.isModuleElement = function () {
return true;
};
ForInStatementSyntax.prototype.update = function (forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement) {
if (this.forKeyword === forKeyword && this.openParenToken === openParenToken && this.variableDeclaration === variableDeclaration && this.left === left && this.inKeyword === inKeyword && this.expression === expression && this.closeParenToken === closeParenToken && this.statement === statement) {
return this;
}
return new ForInStatementSyntax(forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement, this.parsedInStrictMode());
};
ForInStatementSyntax.create = function (forKeyword, openParenToken, inKeyword, expression, closeParenToken, statement) {
return new ForInStatementSyntax(forKeyword, openParenToken, null, null, inKeyword, expression, closeParenToken, statement, false);
};
ForInStatementSyntax.create1 = function (expression, statement) {
return new ForInStatementSyntax(TypeScript.Syntax.token(26 /* ForKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), null, null, TypeScript.Syntax.token(29 /* InKeyword */), expression, TypeScript.Syntax.token(73 /* CloseParenToken */), statement, false);
};
ForInStatementSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ForInStatementSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ForInStatementSyntax.prototype.withForKeyword = function (forKeyword) {
return this.update(forKeyword, this.openParenToken, this.variableDeclaration, this.left, this.inKeyword, this.expression, this.closeParenToken, this.statement);
};
ForInStatementSyntax.prototype.withOpenParenToken = function (openParenToken) {
return this.update(this.forKeyword, openParenToken, this.variableDeclaration, this.left, this.inKeyword, this.expression, this.closeParenToken, this.statement);
};
ForInStatementSyntax.prototype.withVariableDeclaration = function (variableDeclaration) {
return this.update(this.forKeyword, this.openParenToken, variableDeclaration, this.left, this.inKeyword, this.expression, this.closeParenToken, this.statement);
};
ForInStatementSyntax.prototype.withLeft = function (left) {
return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, left, this.inKeyword, this.expression, this.closeParenToken, this.statement);
};
ForInStatementSyntax.prototype.withInKeyword = function (inKeyword) {
return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.left, inKeyword, this.expression, this.closeParenToken, this.statement);
};
ForInStatementSyntax.prototype.withExpression = function (expression) {
return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.left, this.inKeyword, expression, this.closeParenToken, this.statement);
};
ForInStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) {
return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.left, this.inKeyword, this.expression, closeParenToken, this.statement);
};
ForInStatementSyntax.prototype.withStatement = function (statement) {
return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.left, this.inKeyword, this.expression, this.closeParenToken, statement);
};
ForInStatementSyntax.prototype.isTypeScriptSpecific = function () {
if (this.variableDeclaration !== null && this.variableDeclaration.isTypeScriptSpecific()) {
return true;
}
if (this.left !== null && this.left.isTypeScriptSpecific()) {
return true;
}
if (this.expression.isTypeScriptSpecific()) {
return true;
}
if (this.statement.isTypeScriptSpecific()) {
return true;
}
return false;
};
return ForInStatementSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ForInStatementSyntax = ForInStatementSyntax;
var WhileStatementSyntax = (function (_super) {
__extends(WhileStatementSyntax, _super);
function WhileStatementSyntax(whileKeyword, openParenToken, condition, closeParenToken, statement, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.whileKeyword = whileKeyword;
this.openParenToken = openParenToken;
this.condition = condition;
this.closeParenToken = closeParenToken;
this.statement = statement;
}
WhileStatementSyntax.prototype.accept = function (visitor) {
return visitor.visitWhileStatement(this);
};
WhileStatementSyntax.prototype.kind = function () {
return 158 /* WhileStatement */;
};
WhileStatementSyntax.prototype.childCount = function () {
return 5;
};
WhileStatementSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.whileKeyword;
case 1:
return this.openParenToken;
case 2:
return this.condition;
case 3:
return this.closeParenToken;
case 4:
return this.statement;
default:
throw TypeScript.Errors.invalidOperation();
}
};
WhileStatementSyntax.prototype.isIterationStatement = function () {
return true;
};
WhileStatementSyntax.prototype.isStatement = function () {
return true;
};
WhileStatementSyntax.prototype.isModuleElement = function () {
return true;
};
WhileStatementSyntax.prototype.update = function (whileKeyword, openParenToken, condition, closeParenToken, statement) {
if (this.whileKeyword === whileKeyword && this.openParenToken === openParenToken && this.condition === condition && this.closeParenToken === closeParenToken && this.statement === statement) {
return this;
}
return new WhileStatementSyntax(whileKeyword, openParenToken, condition, closeParenToken, statement, this.parsedInStrictMode());
};
WhileStatementSyntax.create1 = function (condition, statement) {
return new WhileStatementSyntax(TypeScript.Syntax.token(42 /* WhileKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), condition, TypeScript.Syntax.token(73 /* CloseParenToken */), statement, false);
};
WhileStatementSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
WhileStatementSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
WhileStatementSyntax.prototype.withWhileKeyword = function (whileKeyword) {
return this.update(whileKeyword, this.openParenToken, this.condition, this.closeParenToken, this.statement);
};
WhileStatementSyntax.prototype.withOpenParenToken = function (openParenToken) {
return this.update(this.whileKeyword, openParenToken, this.condition, this.closeParenToken, this.statement);
};
WhileStatementSyntax.prototype.withCondition = function (condition) {
return this.update(this.whileKeyword, this.openParenToken, condition, this.closeParenToken, this.statement);
};
WhileStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) {
return this.update(this.whileKeyword, this.openParenToken, this.condition, closeParenToken, this.statement);
};
WhileStatementSyntax.prototype.withStatement = function (statement) {
return this.update(this.whileKeyword, this.openParenToken, this.condition, this.closeParenToken, statement);
};
WhileStatementSyntax.prototype.isTypeScriptSpecific = function () {
if (this.condition.isTypeScriptSpecific()) {
return true;
}
if (this.statement.isTypeScriptSpecific()) {
return true;
}
return false;
};
return WhileStatementSyntax;
})(TypeScript.SyntaxNode);
TypeScript.WhileStatementSyntax = WhileStatementSyntax;
var WithStatementSyntax = (function (_super) {
__extends(WithStatementSyntax, _super);
function WithStatementSyntax(withKeyword, openParenToken, condition, closeParenToken, statement, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.withKeyword = withKeyword;
this.openParenToken = openParenToken;
this.condition = condition;
this.closeParenToken = closeParenToken;
this.statement = statement;
}
WithStatementSyntax.prototype.accept = function (visitor) {
return visitor.visitWithStatement(this);
};
WithStatementSyntax.prototype.kind = function () {
return 163 /* WithStatement */;
};
WithStatementSyntax.prototype.childCount = function () {
return 5;
};
WithStatementSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.withKeyword;
case 1:
return this.openParenToken;
case 2:
return this.condition;
case 3:
return this.closeParenToken;
case 4:
return this.statement;
default:
throw TypeScript.Errors.invalidOperation();
}
};
WithStatementSyntax.prototype.isStatement = function () {
return true;
};
WithStatementSyntax.prototype.isModuleElement = function () {
return true;
};
WithStatementSyntax.prototype.update = function (withKeyword, openParenToken, condition, closeParenToken, statement) {
if (this.withKeyword === withKeyword && this.openParenToken === openParenToken && this.condition === condition && this.closeParenToken === closeParenToken && this.statement === statement) {
return this;
}
return new WithStatementSyntax(withKeyword, openParenToken, condition, closeParenToken, statement, this.parsedInStrictMode());
};
WithStatementSyntax.create1 = function (condition, statement) {
return new WithStatementSyntax(TypeScript.Syntax.token(43 /* WithKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), condition, TypeScript.Syntax.token(73 /* CloseParenToken */), statement, false);
};
WithStatementSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
WithStatementSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
WithStatementSyntax.prototype.withWithKeyword = function (withKeyword) {
return this.update(withKeyword, this.openParenToken, this.condition, this.closeParenToken, this.statement);
};
WithStatementSyntax.prototype.withOpenParenToken = function (openParenToken) {
return this.update(this.withKeyword, openParenToken, this.condition, this.closeParenToken, this.statement);
};
WithStatementSyntax.prototype.withCondition = function (condition) {
return this.update(this.withKeyword, this.openParenToken, condition, this.closeParenToken, this.statement);
};
WithStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) {
return this.update(this.withKeyword, this.openParenToken, this.condition, closeParenToken, this.statement);
};
WithStatementSyntax.prototype.withStatement = function (statement) {
return this.update(this.withKeyword, this.openParenToken, this.condition, this.closeParenToken, statement);
};
WithStatementSyntax.prototype.isTypeScriptSpecific = function () {
if (this.condition.isTypeScriptSpecific()) {
return true;
}
if (this.statement.isTypeScriptSpecific()) {
return true;
}
return false;
};
return WithStatementSyntax;
})(TypeScript.SyntaxNode);
TypeScript.WithStatementSyntax = WithStatementSyntax;
var EnumDeclarationSyntax = (function (_super) {
__extends(EnumDeclarationSyntax, _super);
function EnumDeclarationSyntax(modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.modifiers = modifiers;
this.enumKeyword = enumKeyword;
this.identifier = identifier;
this.openBraceToken = openBraceToken;
this.enumElements = enumElements;
this.closeBraceToken = closeBraceToken;
}
EnumDeclarationSyntax.prototype.accept = function (visitor) {
return visitor.visitEnumDeclaration(this);
};
EnumDeclarationSyntax.prototype.kind = function () {
return 132 /* EnumDeclaration */;
};
EnumDeclarationSyntax.prototype.childCount = function () {
return 6;
};
EnumDeclarationSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.modifiers;
case 1:
return this.enumKeyword;
case 2:
return this.identifier;
case 3:
return this.openBraceToken;
case 4:
return this.enumElements;
case 5:
return this.closeBraceToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
EnumDeclarationSyntax.prototype.isModuleElement = function () {
return true;
};
EnumDeclarationSyntax.prototype.update = function (modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken) {
if (this.modifiers === modifiers && this.enumKeyword === enumKeyword && this.identifier === identifier && this.openBraceToken === openBraceToken && this.enumElements === enumElements && this.closeBraceToken === closeBraceToken) {
return this;
}
return new EnumDeclarationSyntax(modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken, this.parsedInStrictMode());
};
EnumDeclarationSyntax.create = function (enumKeyword, identifier, openBraceToken, closeBraceToken) {
return new EnumDeclarationSyntax(TypeScript.Syntax.emptyList, enumKeyword, identifier, openBraceToken, TypeScript.Syntax.emptySeparatedList, closeBraceToken, false);
};
EnumDeclarationSyntax.create1 = function (identifier) {
return new EnumDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(46 /* EnumKeyword */), identifier, TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false);
};
EnumDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
EnumDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
EnumDeclarationSyntax.prototype.withModifiers = function (modifiers) {
return this.update(modifiers, this.enumKeyword, this.identifier, this.openBraceToken, this.enumElements, this.closeBraceToken);
};
EnumDeclarationSyntax.prototype.withModifier = function (modifier) {
return this.withModifiers(TypeScript.Syntax.list([modifier]));
};
EnumDeclarationSyntax.prototype.withEnumKeyword = function (enumKeyword) {
return this.update(this.modifiers, enumKeyword, this.identifier, this.openBraceToken, this.enumElements, this.closeBraceToken);
};
EnumDeclarationSyntax.prototype.withIdentifier = function (identifier) {
return this.update(this.modifiers, this.enumKeyword, identifier, this.openBraceToken, this.enumElements, this.closeBraceToken);
};
EnumDeclarationSyntax.prototype.withOpenBraceToken = function (openBraceToken) {
return this.update(this.modifiers, this.enumKeyword, this.identifier, openBraceToken, this.enumElements, this.closeBraceToken);
};
EnumDeclarationSyntax.prototype.withEnumElements = function (enumElements) {
return this.update(this.modifiers, this.enumKeyword, this.identifier, this.openBraceToken, enumElements, this.closeBraceToken);
};
EnumDeclarationSyntax.prototype.withEnumElement = function (enumElement) {
return this.withEnumElements(TypeScript.Syntax.separatedList([enumElement]));
};
EnumDeclarationSyntax.prototype.withCloseBraceToken = function (closeBraceToken) {
return this.update(this.modifiers, this.enumKeyword, this.identifier, this.openBraceToken, this.enumElements, closeBraceToken);
};
EnumDeclarationSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return EnumDeclarationSyntax;
})(TypeScript.SyntaxNode);
TypeScript.EnumDeclarationSyntax = EnumDeclarationSyntax;
var EnumElementSyntax = (function (_super) {
__extends(EnumElementSyntax, _super);
function EnumElementSyntax(propertyName, equalsValueClause, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.propertyName = propertyName;
this.equalsValueClause = equalsValueClause;
}
EnumElementSyntax.prototype.accept = function (visitor) {
return visitor.visitEnumElement(this);
};
EnumElementSyntax.prototype.kind = function () {
return 243 /* EnumElement */;
};
EnumElementSyntax.prototype.childCount = function () {
return 2;
};
EnumElementSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.propertyName;
case 1:
return this.equalsValueClause;
default:
throw TypeScript.Errors.invalidOperation();
}
};
EnumElementSyntax.prototype.update = function (propertyName, equalsValueClause) {
if (this.propertyName === propertyName && this.equalsValueClause === equalsValueClause) {
return this;
}
return new EnumElementSyntax(propertyName, equalsValueClause, this.parsedInStrictMode());
};
EnumElementSyntax.create = function (propertyName) {
return new EnumElementSyntax(propertyName, null, false);
};
EnumElementSyntax.create1 = function (propertyName) {
return new EnumElementSyntax(propertyName, null, false);
};
EnumElementSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
EnumElementSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
EnumElementSyntax.prototype.withPropertyName = function (propertyName) {
return this.update(propertyName, this.equalsValueClause);
};
EnumElementSyntax.prototype.withEqualsValueClause = function (equalsValueClause) {
return this.update(this.propertyName, equalsValueClause);
};
EnumElementSyntax.prototype.isTypeScriptSpecific = function () {
if (this.equalsValueClause !== null && this.equalsValueClause.isTypeScriptSpecific()) {
return true;
}
return false;
};
return EnumElementSyntax;
})(TypeScript.SyntaxNode);
TypeScript.EnumElementSyntax = EnumElementSyntax;
var CastExpressionSyntax = (function (_super) {
__extends(CastExpressionSyntax, _super);
function CastExpressionSyntax(lessThanToken, type, greaterThanToken, expression, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.lessThanToken = lessThanToken;
this.type = type;
this.greaterThanToken = greaterThanToken;
this.expression = expression;
}
CastExpressionSyntax.prototype.accept = function (visitor) {
return visitor.visitCastExpression(this);
};
CastExpressionSyntax.prototype.kind = function () {
return 220 /* CastExpression */;
};
CastExpressionSyntax.prototype.childCount = function () {
return 4;
};
CastExpressionSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.lessThanToken;
case 1:
return this.type;
case 2:
return this.greaterThanToken;
case 3:
return this.expression;
default:
throw TypeScript.Errors.invalidOperation();
}
};
CastExpressionSyntax.prototype.isUnaryExpression = function () {
return true;
};
CastExpressionSyntax.prototype.isExpression = function () {
return true;
};
CastExpressionSyntax.prototype.update = function (lessThanToken, type, greaterThanToken, expression) {
if (this.lessThanToken === lessThanToken && this.type === type && this.greaterThanToken === greaterThanToken && this.expression === expression) {
return this;
}
return new CastExpressionSyntax(lessThanToken, type, greaterThanToken, expression, this.parsedInStrictMode());
};
CastExpressionSyntax.create1 = function (type, expression) {
return new CastExpressionSyntax(TypeScript.Syntax.token(80 /* LessThanToken */), type, TypeScript.Syntax.token(81 /* GreaterThanToken */), expression, false);
};
CastExpressionSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
CastExpressionSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
CastExpressionSyntax.prototype.withLessThanToken = function (lessThanToken) {
return this.update(lessThanToken, this.type, this.greaterThanToken, this.expression);
};
CastExpressionSyntax.prototype.withType = function (type) {
return this.update(this.lessThanToken, type, this.greaterThanToken, this.expression);
};
CastExpressionSyntax.prototype.withGreaterThanToken = function (greaterThanToken) {
return this.update(this.lessThanToken, this.type, greaterThanToken, this.expression);
};
CastExpressionSyntax.prototype.withExpression = function (expression) {
return this.update(this.lessThanToken, this.type, this.greaterThanToken, expression);
};
CastExpressionSyntax.prototype.isTypeScriptSpecific = function () {
return true;
};
return CastExpressionSyntax;
})(TypeScript.SyntaxNode);
TypeScript.CastExpressionSyntax = CastExpressionSyntax;
var ObjectLiteralExpressionSyntax = (function (_super) {
__extends(ObjectLiteralExpressionSyntax, _super);
function ObjectLiteralExpressionSyntax(openBraceToken, propertyAssignments, closeBraceToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.openBraceToken = openBraceToken;
this.propertyAssignments = propertyAssignments;
this.closeBraceToken = closeBraceToken;
}
ObjectLiteralExpressionSyntax.prototype.accept = function (visitor) {
return visitor.visitObjectLiteralExpression(this);
};
ObjectLiteralExpressionSyntax.prototype.kind = function () {
return 215 /* ObjectLiteralExpression */;
};
ObjectLiteralExpressionSyntax.prototype.childCount = function () {
return 3;
};
ObjectLiteralExpressionSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.openBraceToken;
case 1:
return this.propertyAssignments;
case 2:
return this.closeBraceToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
ObjectLiteralExpressionSyntax.prototype.isPrimaryExpression = function () {
return true;
};
ObjectLiteralExpressionSyntax.prototype.isMemberExpression = function () {
return true;
};
ObjectLiteralExpressionSyntax.prototype.isPostfixExpression = function () {
return true;
};
ObjectLiteralExpressionSyntax.prototype.isUnaryExpression = function () {
return true;
};
ObjectLiteralExpressionSyntax.prototype.isExpression = function () {
return true;
};
ObjectLiteralExpressionSyntax.prototype.update = function (openBraceToken, propertyAssignments, closeBraceToken) {
if (this.openBraceToken === openBraceToken && this.propertyAssignments === propertyAssignments && this.closeBraceToken === closeBraceToken) {
return this;
}
return new ObjectLiteralExpressionSyntax(openBraceToken, propertyAssignments, closeBraceToken, this.parsedInStrictMode());
};
ObjectLiteralExpressionSyntax.create = function (openBraceToken, closeBraceToken) {
return new ObjectLiteralExpressionSyntax(openBraceToken, TypeScript.Syntax.emptySeparatedList, closeBraceToken, false);
};
ObjectLiteralExpressionSyntax.create1 = function () {
return new ObjectLiteralExpressionSyntax(TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false);
};
ObjectLiteralExpressionSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
ObjectLiteralExpressionSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
ObjectLiteralExpressionSyntax.prototype.withOpenBraceToken = function (openBraceToken) {
return this.update(openBraceToken, this.propertyAssignments, this.closeBraceToken);
};
ObjectLiteralExpressionSyntax.prototype.withPropertyAssignments = function (propertyAssignments) {
return this.update(this.openBraceToken, propertyAssignments, this.closeBraceToken);
};
ObjectLiteralExpressionSyntax.prototype.withPropertyAssignment = function (propertyAssignment) {
return this.withPropertyAssignments(TypeScript.Syntax.separatedList([propertyAssignment]));
};
ObjectLiteralExpressionSyntax.prototype.withCloseBraceToken = function (closeBraceToken) {
return this.update(this.openBraceToken, this.propertyAssignments, closeBraceToken);
};
ObjectLiteralExpressionSyntax.prototype.isTypeScriptSpecific = function () {
if (this.propertyAssignments.isTypeScriptSpecific()) {
return true;
}
return false;
};
return ObjectLiteralExpressionSyntax;
})(TypeScript.SyntaxNode);
TypeScript.ObjectLiteralExpressionSyntax = ObjectLiteralExpressionSyntax;
var SimplePropertyAssignmentSyntax = (function (_super) {
__extends(SimplePropertyAssignmentSyntax, _super);
function SimplePropertyAssignmentSyntax(propertyName, colonToken, expression, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.propertyName = propertyName;
this.colonToken = colonToken;
this.expression = expression;
}
SimplePropertyAssignmentSyntax.prototype.accept = function (visitor) {
return visitor.visitSimplePropertyAssignment(this);
};
SimplePropertyAssignmentSyntax.prototype.kind = function () {
return 240 /* SimplePropertyAssignment */;
};
SimplePropertyAssignmentSyntax.prototype.childCount = function () {
return 3;
};
SimplePropertyAssignmentSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.propertyName;
case 1:
return this.colonToken;
case 2:
return this.expression;
default:
throw TypeScript.Errors.invalidOperation();
}
};
SimplePropertyAssignmentSyntax.prototype.isPropertyAssignment = function () {
return true;
};
SimplePropertyAssignmentSyntax.prototype.update = function (propertyName, colonToken, expression) {
if (this.propertyName === propertyName && this.colonToken === colonToken && this.expression === expression) {
return this;
}
return new SimplePropertyAssignmentSyntax(propertyName, colonToken, expression, this.parsedInStrictMode());
};
SimplePropertyAssignmentSyntax.create1 = function (propertyName, expression) {
return new SimplePropertyAssignmentSyntax(propertyName, TypeScript.Syntax.token(106 /* ColonToken */), expression, false);
};
SimplePropertyAssignmentSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
SimplePropertyAssignmentSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
SimplePropertyAssignmentSyntax.prototype.withPropertyName = function (propertyName) {
return this.update(propertyName, this.colonToken, this.expression);
};
SimplePropertyAssignmentSyntax.prototype.withColonToken = function (colonToken) {
return this.update(this.propertyName, colonToken, this.expression);
};
SimplePropertyAssignmentSyntax.prototype.withExpression = function (expression) {
return this.update(this.propertyName, this.colonToken, expression);
};
SimplePropertyAssignmentSyntax.prototype.isTypeScriptSpecific = function () {
if (this.expression.isTypeScriptSpecific()) {
return true;
}
return false;
};
return SimplePropertyAssignmentSyntax;
})(TypeScript.SyntaxNode);
TypeScript.SimplePropertyAssignmentSyntax = SimplePropertyAssignmentSyntax;
var FunctionPropertyAssignmentSyntax = (function (_super) {
__extends(FunctionPropertyAssignmentSyntax, _super);
function FunctionPropertyAssignmentSyntax(propertyName, callSignature, block, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.propertyName = propertyName;
this.callSignature = callSignature;
this.block = block;
}
FunctionPropertyAssignmentSyntax.prototype.accept = function (visitor) {
return visitor.visitFunctionPropertyAssignment(this);
};
FunctionPropertyAssignmentSyntax.prototype.kind = function () {
return 241 /* FunctionPropertyAssignment */;
};
FunctionPropertyAssignmentSyntax.prototype.childCount = function () {
return 3;
};
FunctionPropertyAssignmentSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.propertyName;
case 1:
return this.callSignature;
case 2:
return this.block;
default:
throw TypeScript.Errors.invalidOperation();
}
};
FunctionPropertyAssignmentSyntax.prototype.isPropertyAssignment = function () {
return true;
};
FunctionPropertyAssignmentSyntax.prototype.update = function (propertyName, callSignature, block) {
if (this.propertyName === propertyName && this.callSignature === callSignature && this.block === block) {
return this;
}
return new FunctionPropertyAssignmentSyntax(propertyName, callSignature, block, this.parsedInStrictMode());
};
FunctionPropertyAssignmentSyntax.create1 = function (propertyName) {
return new FunctionPropertyAssignmentSyntax(propertyName, CallSignatureSyntax.create1(), BlockSyntax.create1(), false);
};
FunctionPropertyAssignmentSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
FunctionPropertyAssignmentSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
FunctionPropertyAssignmentSyntax.prototype.withPropertyName = function (propertyName) {
return this.update(propertyName, this.callSignature, this.block);
};
FunctionPropertyAssignmentSyntax.prototype.withCallSignature = function (callSignature) {
return this.update(this.propertyName, callSignature, this.block);
};
FunctionPropertyAssignmentSyntax.prototype.withBlock = function (block) {
return this.update(this.propertyName, this.callSignature, block);
};
FunctionPropertyAssignmentSyntax.prototype.isTypeScriptSpecific = function () {
if (this.callSignature.isTypeScriptSpecific()) {
return true;
}
if (this.block.isTypeScriptSpecific()) {
return true;
}
return false;
};
return FunctionPropertyAssignmentSyntax;
})(TypeScript.SyntaxNode);
TypeScript.FunctionPropertyAssignmentSyntax = FunctionPropertyAssignmentSyntax;
var FunctionExpressionSyntax = (function (_super) {
__extends(FunctionExpressionSyntax, _super);
function FunctionExpressionSyntax(functionKeyword, identifier, callSignature, block, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.functionKeyword = functionKeyword;
this.identifier = identifier;
this.callSignature = callSignature;
this.block = block;
}
FunctionExpressionSyntax.prototype.accept = function (visitor) {
return visitor.visitFunctionExpression(this);
};
FunctionExpressionSyntax.prototype.kind = function () {
return 222 /* FunctionExpression */;
};
FunctionExpressionSyntax.prototype.childCount = function () {
return 4;
};
FunctionExpressionSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.functionKeyword;
case 1:
return this.identifier;
case 2:
return this.callSignature;
case 3:
return this.block;
default:
throw TypeScript.Errors.invalidOperation();
}
};
FunctionExpressionSyntax.prototype.isPrimaryExpression = function () {
return true;
};
FunctionExpressionSyntax.prototype.isMemberExpression = function () {
return true;
};
FunctionExpressionSyntax.prototype.isPostfixExpression = function () {
return true;
};
FunctionExpressionSyntax.prototype.isUnaryExpression = function () {
return true;
};
FunctionExpressionSyntax.prototype.isExpression = function () {
return true;
};
FunctionExpressionSyntax.prototype.update = function (functionKeyword, identifier, callSignature, block) {
if (this.functionKeyword === functionKeyword && this.identifier === identifier && this.callSignature === callSignature && this.block === block) {
return this;
}
return new FunctionExpressionSyntax(functionKeyword, identifier, callSignature, block, this.parsedInStrictMode());
};
FunctionExpressionSyntax.create = function (functionKeyword, callSignature, block) {
return new FunctionExpressionSyntax(functionKeyword, null, callSignature, block, false);
};
FunctionExpressionSyntax.create1 = function () {
return new FunctionExpressionSyntax(TypeScript.Syntax.token(27 /* FunctionKeyword */), null, CallSignatureSyntax.create1(), BlockSyntax.create1(), false);
};
FunctionExpressionSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
FunctionExpressionSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
FunctionExpressionSyntax.prototype.withFunctionKeyword = function (functionKeyword) {
return this.update(functionKeyword, this.identifier, this.callSignature, this.block);
};
FunctionExpressionSyntax.prototype.withIdentifier = function (identifier) {
return this.update(this.functionKeyword, identifier, this.callSignature, this.block);
};
FunctionExpressionSyntax.prototype.withCallSignature = function (callSignature) {
return this.update(this.functionKeyword, this.identifier, callSignature, this.block);
};
FunctionExpressionSyntax.prototype.withBlock = function (block) {
return this.update(this.functionKeyword, this.identifier, this.callSignature, block);
};
FunctionExpressionSyntax.prototype.isTypeScriptSpecific = function () {
if (this.callSignature.isTypeScriptSpecific()) {
return true;
}
if (this.block.isTypeScriptSpecific()) {
return true;
}
return false;
};
return FunctionExpressionSyntax;
})(TypeScript.SyntaxNode);
TypeScript.FunctionExpressionSyntax = FunctionExpressionSyntax;
var EmptyStatementSyntax = (function (_super) {
__extends(EmptyStatementSyntax, _super);
function EmptyStatementSyntax(semicolonToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.semicolonToken = semicolonToken;
}
EmptyStatementSyntax.prototype.accept = function (visitor) {
return visitor.visitEmptyStatement(this);
};
EmptyStatementSyntax.prototype.kind = function () {
return 156 /* EmptyStatement */;
};
EmptyStatementSyntax.prototype.childCount = function () {
return 1;
};
EmptyStatementSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.semicolonToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
EmptyStatementSyntax.prototype.isStatement = function () {
return true;
};
EmptyStatementSyntax.prototype.isModuleElement = function () {
return true;
};
EmptyStatementSyntax.prototype.update = function (semicolonToken) {
if (this.semicolonToken === semicolonToken) {
return this;
}
return new EmptyStatementSyntax(semicolonToken, this.parsedInStrictMode());
};
EmptyStatementSyntax.create1 = function () {
return new EmptyStatementSyntax(TypeScript.Syntax.token(78 /* SemicolonToken */), false);
};
EmptyStatementSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
EmptyStatementSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
EmptyStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) {
return this.update(semicolonToken);
};
EmptyStatementSyntax.prototype.isTypeScriptSpecific = function () {
return false;
};
return EmptyStatementSyntax;
})(TypeScript.SyntaxNode);
TypeScript.EmptyStatementSyntax = EmptyStatementSyntax;
var TryStatementSyntax = (function (_super) {
__extends(TryStatementSyntax, _super);
function TryStatementSyntax(tryKeyword, block, catchClause, finallyClause, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.tryKeyword = tryKeyword;
this.block = block;
this.catchClause = catchClause;
this.finallyClause = finallyClause;
}
TryStatementSyntax.prototype.accept = function (visitor) {
return visitor.visitTryStatement(this);
};
TryStatementSyntax.prototype.kind = function () {
return 159 /* TryStatement */;
};
TryStatementSyntax.prototype.childCount = function () {
return 4;
};
TryStatementSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.tryKeyword;
case 1:
return this.block;
case 2:
return this.catchClause;
case 3:
return this.finallyClause;
default:
throw TypeScript.Errors.invalidOperation();
}
};
TryStatementSyntax.prototype.isStatement = function () {
return true;
};
TryStatementSyntax.prototype.isModuleElement = function () {
return true;
};
TryStatementSyntax.prototype.update = function (tryKeyword, block, catchClause, finallyClause) {
if (this.tryKeyword === tryKeyword && this.block === block && this.catchClause === catchClause && this.finallyClause === finallyClause) {
return this;
}
return new TryStatementSyntax(tryKeyword, block, catchClause, finallyClause, this.parsedInStrictMode());
};
TryStatementSyntax.create = function (tryKeyword, block) {
return new TryStatementSyntax(tryKeyword, block, null, null, false);
};
TryStatementSyntax.create1 = function () {
return new TryStatementSyntax(TypeScript.Syntax.token(38 /* TryKeyword */), BlockSyntax.create1(), null, null, false);
};
TryStatementSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
TryStatementSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
TryStatementSyntax.prototype.withTryKeyword = function (tryKeyword) {
return this.update(tryKeyword, this.block, this.catchClause, this.finallyClause);
};
TryStatementSyntax.prototype.withBlock = function (block) {
return this.update(this.tryKeyword, block, this.catchClause, this.finallyClause);
};
TryStatementSyntax.prototype.withCatchClause = function (catchClause) {
return this.update(this.tryKeyword, this.block, catchClause, this.finallyClause);
};
TryStatementSyntax.prototype.withFinallyClause = function (finallyClause) {
return this.update(this.tryKeyword, this.block, this.catchClause, finallyClause);
};
TryStatementSyntax.prototype.isTypeScriptSpecific = function () {
if (this.block.isTypeScriptSpecific()) {
return true;
}
if (this.catchClause !== null && this.catchClause.isTypeScriptSpecific()) {
return true;
}
if (this.finallyClause !== null && this.finallyClause.isTypeScriptSpecific()) {
return true;
}
return false;
};
return TryStatementSyntax;
})(TypeScript.SyntaxNode);
TypeScript.TryStatementSyntax = TryStatementSyntax;
var CatchClauseSyntax = (function (_super) {
__extends(CatchClauseSyntax, _super);
function CatchClauseSyntax(catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.catchKeyword = catchKeyword;
this.openParenToken = openParenToken;
this.identifier = identifier;
this.typeAnnotation = typeAnnotation;
this.closeParenToken = closeParenToken;
this.block = block;
}
CatchClauseSyntax.prototype.accept = function (visitor) {
return visitor.visitCatchClause(this);
};
CatchClauseSyntax.prototype.kind = function () {
return 236 /* CatchClause */;
};
CatchClauseSyntax.prototype.childCount = function () {
return 6;
};
CatchClauseSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.catchKeyword;
case 1:
return this.openParenToken;
case 2:
return this.identifier;
case 3:
return this.typeAnnotation;
case 4:
return this.closeParenToken;
case 5:
return this.block;
default:
throw TypeScript.Errors.invalidOperation();
}
};
CatchClauseSyntax.prototype.update = function (catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block) {
if (this.catchKeyword === catchKeyword && this.openParenToken === openParenToken && this.identifier === identifier && this.typeAnnotation === typeAnnotation && this.closeParenToken === closeParenToken && this.block === block) {
return this;
}
return new CatchClauseSyntax(catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block, this.parsedInStrictMode());
};
CatchClauseSyntax.create = function (catchKeyword, openParenToken, identifier, closeParenToken, block) {
return new CatchClauseSyntax(catchKeyword, openParenToken, identifier, null, closeParenToken, block, false);
};
CatchClauseSyntax.create1 = function (identifier) {
return new CatchClauseSyntax(TypeScript.Syntax.token(17 /* CatchKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), identifier, null, TypeScript.Syntax.token(73 /* CloseParenToken */), BlockSyntax.create1(), false);
};
CatchClauseSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
CatchClauseSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
CatchClauseSyntax.prototype.withCatchKeyword = function (catchKeyword) {
return this.update(catchKeyword, this.openParenToken, this.identifier, this.typeAnnotation, this.closeParenToken, this.block);
};
CatchClauseSyntax.prototype.withOpenParenToken = function (openParenToken) {
return this.update(this.catchKeyword, openParenToken, this.identifier, this.typeAnnotation, this.closeParenToken, this.block);
};
CatchClauseSyntax.prototype.withIdentifier = function (identifier) {
return this.update(this.catchKeyword, this.openParenToken, identifier, this.typeAnnotation, this.closeParenToken, this.block);
};
CatchClauseSyntax.prototype.withTypeAnnotation = function (typeAnnotation) {
return this.update(this.catchKeyword, this.openParenToken, this.identifier, typeAnnotation, this.closeParenToken, this.block);
};
CatchClauseSyntax.prototype.withCloseParenToken = function (closeParenToken) {
return this.update(this.catchKeyword, this.openParenToken, this.identifier, this.typeAnnotation, closeParenToken, this.block);
};
CatchClauseSyntax.prototype.withBlock = function (block) {
return this.update(this.catchKeyword, this.openParenToken, this.identifier, this.typeAnnotation, this.closeParenToken, block);
};
CatchClauseSyntax.prototype.isTypeScriptSpecific = function () {
if (this.typeAnnotation !== null && this.typeAnnotation.isTypeScriptSpecific()) {
return true;
}
if (this.block.isTypeScriptSpecific()) {
return true;
}
return false;
};
return CatchClauseSyntax;
})(TypeScript.SyntaxNode);
TypeScript.CatchClauseSyntax = CatchClauseSyntax;
var FinallyClauseSyntax = (function (_super) {
__extends(FinallyClauseSyntax, _super);
function FinallyClauseSyntax(finallyKeyword, block, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.finallyKeyword = finallyKeyword;
this.block = block;
}
FinallyClauseSyntax.prototype.accept = function (visitor) {
return visitor.visitFinallyClause(this);
};
FinallyClauseSyntax.prototype.kind = function () {
return 237 /* FinallyClause */;
};
FinallyClauseSyntax.prototype.childCount = function () {
return 2;
};
FinallyClauseSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.finallyKeyword;
case 1:
return this.block;
default:
throw TypeScript.Errors.invalidOperation();
}
};
FinallyClauseSyntax.prototype.update = function (finallyKeyword, block) {
if (this.finallyKeyword === finallyKeyword && this.block === block) {
return this;
}
return new FinallyClauseSyntax(finallyKeyword, block, this.parsedInStrictMode());
};
FinallyClauseSyntax.create1 = function () {
return new FinallyClauseSyntax(TypeScript.Syntax.token(25 /* FinallyKeyword */), BlockSyntax.create1(), false);
};
FinallyClauseSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
FinallyClauseSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
FinallyClauseSyntax.prototype.withFinallyKeyword = function (finallyKeyword) {
return this.update(finallyKeyword, this.block);
};
FinallyClauseSyntax.prototype.withBlock = function (block) {
return this.update(this.finallyKeyword, block);
};
FinallyClauseSyntax.prototype.isTypeScriptSpecific = function () {
if (this.block.isTypeScriptSpecific()) {
return true;
}
return false;
};
return FinallyClauseSyntax;
})(TypeScript.SyntaxNode);
TypeScript.FinallyClauseSyntax = FinallyClauseSyntax;
var LabeledStatementSyntax = (function (_super) {
__extends(LabeledStatementSyntax, _super);
function LabeledStatementSyntax(identifier, colonToken, statement, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.identifier = identifier;
this.colonToken = colonToken;
this.statement = statement;
}
LabeledStatementSyntax.prototype.accept = function (visitor) {
return visitor.visitLabeledStatement(this);
};
LabeledStatementSyntax.prototype.kind = function () {
return 160 /* LabeledStatement */;
};
LabeledStatementSyntax.prototype.childCount = function () {
return 3;
};
LabeledStatementSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.identifier;
case 1:
return this.colonToken;
case 2:
return this.statement;
default:
throw TypeScript.Errors.invalidOperation();
}
};
LabeledStatementSyntax.prototype.isStatement = function () {
return true;
};
LabeledStatementSyntax.prototype.isModuleElement = function () {
return true;
};
LabeledStatementSyntax.prototype.update = function (identifier, colonToken, statement) {
if (this.identifier === identifier && this.colonToken === colonToken && this.statement === statement) {
return this;
}
return new LabeledStatementSyntax(identifier, colonToken, statement, this.parsedInStrictMode());
};
LabeledStatementSyntax.create1 = function (identifier, statement) {
return new LabeledStatementSyntax(identifier, TypeScript.Syntax.token(106 /* ColonToken */), statement, false);
};
LabeledStatementSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
LabeledStatementSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
LabeledStatementSyntax.prototype.withIdentifier = function (identifier) {
return this.update(identifier, this.colonToken, this.statement);
};
LabeledStatementSyntax.prototype.withColonToken = function (colonToken) {
return this.update(this.identifier, colonToken, this.statement);
};
LabeledStatementSyntax.prototype.withStatement = function (statement) {
return this.update(this.identifier, this.colonToken, statement);
};
LabeledStatementSyntax.prototype.isTypeScriptSpecific = function () {
if (this.statement.isTypeScriptSpecific()) {
return true;
}
return false;
};
return LabeledStatementSyntax;
})(TypeScript.SyntaxNode);
TypeScript.LabeledStatementSyntax = LabeledStatementSyntax;
var DoStatementSyntax = (function (_super) {
__extends(DoStatementSyntax, _super);
function DoStatementSyntax(doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.doKeyword = doKeyword;
this.statement = statement;
this.whileKeyword = whileKeyword;
this.openParenToken = openParenToken;
this.condition = condition;
this.closeParenToken = closeParenToken;
this.semicolonToken = semicolonToken;
}
DoStatementSyntax.prototype.accept = function (visitor) {
return visitor.visitDoStatement(this);
};
DoStatementSyntax.prototype.kind = function () {
return 161 /* DoStatement */;
};
DoStatementSyntax.prototype.childCount = function () {
return 7;
};
DoStatementSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.doKeyword;
case 1:
return this.statement;
case 2:
return this.whileKeyword;
case 3:
return this.openParenToken;
case 4:
return this.condition;
case 5:
return this.closeParenToken;
case 6:
return this.semicolonToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
DoStatementSyntax.prototype.isIterationStatement = function () {
return true;
};
DoStatementSyntax.prototype.isStatement = function () {
return true;
};
DoStatementSyntax.prototype.isModuleElement = function () {
return true;
};
DoStatementSyntax.prototype.update = function (doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken) {
if (this.doKeyword === doKeyword && this.statement === statement && this.whileKeyword === whileKeyword && this.openParenToken === openParenToken && this.condition === condition && this.closeParenToken === closeParenToken && this.semicolonToken === semicolonToken) {
return this;
}
return new DoStatementSyntax(doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken, this.parsedInStrictMode());
};
DoStatementSyntax.create1 = function (statement, condition) {
return new DoStatementSyntax(TypeScript.Syntax.token(22 /* DoKeyword */), statement, TypeScript.Syntax.token(42 /* WhileKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), condition, TypeScript.Syntax.token(73 /* CloseParenToken */), TypeScript.Syntax.token(78 /* SemicolonToken */), false);
};
DoStatementSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
DoStatementSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
DoStatementSyntax.prototype.withDoKeyword = function (doKeyword) {
return this.update(doKeyword, this.statement, this.whileKeyword, this.openParenToken, this.condition, this.closeParenToken, this.semicolonToken);
};
DoStatementSyntax.prototype.withStatement = function (statement) {
return this.update(this.doKeyword, statement, this.whileKeyword, this.openParenToken, this.condition, this.closeParenToken, this.semicolonToken);
};
DoStatementSyntax.prototype.withWhileKeyword = function (whileKeyword) {
return this.update(this.doKeyword, this.statement, whileKeyword, this.openParenToken, this.condition, this.closeParenToken, this.semicolonToken);
};
DoStatementSyntax.prototype.withOpenParenToken = function (openParenToken) {
return this.update(this.doKeyword, this.statement, this.whileKeyword, openParenToken, this.condition, this.closeParenToken, this.semicolonToken);
};
DoStatementSyntax.prototype.withCondition = function (condition) {
return this.update(this.doKeyword, this.statement, this.whileKeyword, this.openParenToken, condition, this.closeParenToken, this.semicolonToken);
};
DoStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) {
return this.update(this.doKeyword, this.statement, this.whileKeyword, this.openParenToken, this.condition, closeParenToken, this.semicolonToken);
};
DoStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) {
return this.update(this.doKeyword, this.statement, this.whileKeyword, this.openParenToken, this.condition, this.closeParenToken, semicolonToken);
};
DoStatementSyntax.prototype.isTypeScriptSpecific = function () {
if (this.statement.isTypeScriptSpecific()) {
return true;
}
if (this.condition.isTypeScriptSpecific()) {
return true;
}
return false;
};
return DoStatementSyntax;
})(TypeScript.SyntaxNode);
TypeScript.DoStatementSyntax = DoStatementSyntax;
var TypeOfExpressionSyntax = (function (_super) {
__extends(TypeOfExpressionSyntax, _super);
function TypeOfExpressionSyntax(typeOfKeyword, expression, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.typeOfKeyword = typeOfKeyword;
this.expression = expression;
}
TypeOfExpressionSyntax.prototype.accept = function (visitor) {
return visitor.visitTypeOfExpression(this);
};
TypeOfExpressionSyntax.prototype.kind = function () {
return 171 /* TypeOfExpression */;
};
TypeOfExpressionSyntax.prototype.childCount = function () {
return 2;
};
TypeOfExpressionSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.typeOfKeyword;
case 1:
return this.expression;
default:
throw TypeScript.Errors.invalidOperation();
}
};
TypeOfExpressionSyntax.prototype.isUnaryExpression = function () {
return true;
};
TypeOfExpressionSyntax.prototype.isExpression = function () {
return true;
};
TypeOfExpressionSyntax.prototype.update = function (typeOfKeyword, expression) {
if (this.typeOfKeyword === typeOfKeyword && this.expression === expression) {
return this;
}
return new TypeOfExpressionSyntax(typeOfKeyword, expression, this.parsedInStrictMode());
};
TypeOfExpressionSyntax.create1 = function (expression) {
return new TypeOfExpressionSyntax(TypeScript.Syntax.token(39 /* TypeOfKeyword */), expression, false);
};
TypeOfExpressionSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
TypeOfExpressionSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
TypeOfExpressionSyntax.prototype.withTypeOfKeyword = function (typeOfKeyword) {
return this.update(typeOfKeyword, this.expression);
};
TypeOfExpressionSyntax.prototype.withExpression = function (expression) {
return this.update(this.typeOfKeyword, expression);
};
TypeOfExpressionSyntax.prototype.isTypeScriptSpecific = function () {
if (this.expression.isTypeScriptSpecific()) {
return true;
}
return false;
};
return TypeOfExpressionSyntax;
})(TypeScript.SyntaxNode);
TypeScript.TypeOfExpressionSyntax = TypeOfExpressionSyntax;
var DeleteExpressionSyntax = (function (_super) {
__extends(DeleteExpressionSyntax, _super);
function DeleteExpressionSyntax(deleteKeyword, expression, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.deleteKeyword = deleteKeyword;
this.expression = expression;
}
DeleteExpressionSyntax.prototype.accept = function (visitor) {
return visitor.visitDeleteExpression(this);
};
DeleteExpressionSyntax.prototype.kind = function () {
return 170 /* DeleteExpression */;
};
DeleteExpressionSyntax.prototype.childCount = function () {
return 2;
};
DeleteExpressionSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.deleteKeyword;
case 1:
return this.expression;
default:
throw TypeScript.Errors.invalidOperation();
}
};
DeleteExpressionSyntax.prototype.isUnaryExpression = function () {
return true;
};
DeleteExpressionSyntax.prototype.isExpression = function () {
return true;
};
DeleteExpressionSyntax.prototype.update = function (deleteKeyword, expression) {
if (this.deleteKeyword === deleteKeyword && this.expression === expression) {
return this;
}
return new DeleteExpressionSyntax(deleteKeyword, expression, this.parsedInStrictMode());
};
DeleteExpressionSyntax.create1 = function (expression) {
return new DeleteExpressionSyntax(TypeScript.Syntax.token(21 /* DeleteKeyword */), expression, false);
};
DeleteExpressionSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
DeleteExpressionSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
DeleteExpressionSyntax.prototype.withDeleteKeyword = function (deleteKeyword) {
return this.update(deleteKeyword, this.expression);
};
DeleteExpressionSyntax.prototype.withExpression = function (expression) {
return this.update(this.deleteKeyword, expression);
};
DeleteExpressionSyntax.prototype.isTypeScriptSpecific = function () {
if (this.expression.isTypeScriptSpecific()) {
return true;
}
return false;
};
return DeleteExpressionSyntax;
})(TypeScript.SyntaxNode);
TypeScript.DeleteExpressionSyntax = DeleteExpressionSyntax;
var VoidExpressionSyntax = (function (_super) {
__extends(VoidExpressionSyntax, _super);
function VoidExpressionSyntax(voidKeyword, expression, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.voidKeyword = voidKeyword;
this.expression = expression;
}
VoidExpressionSyntax.prototype.accept = function (visitor) {
return visitor.visitVoidExpression(this);
};
VoidExpressionSyntax.prototype.kind = function () {
return 172 /* VoidExpression */;
};
VoidExpressionSyntax.prototype.childCount = function () {
return 2;
};
VoidExpressionSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.voidKeyword;
case 1:
return this.expression;
default:
throw TypeScript.Errors.invalidOperation();
}
};
VoidExpressionSyntax.prototype.isUnaryExpression = function () {
return true;
};
VoidExpressionSyntax.prototype.isExpression = function () {
return true;
};
VoidExpressionSyntax.prototype.update = function (voidKeyword, expression) {
if (this.voidKeyword === voidKeyword && this.expression === expression) {
return this;
}
return new VoidExpressionSyntax(voidKeyword, expression, this.parsedInStrictMode());
};
VoidExpressionSyntax.create1 = function (expression) {
return new VoidExpressionSyntax(TypeScript.Syntax.token(41 /* VoidKeyword */), expression, false);
};
VoidExpressionSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
VoidExpressionSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
VoidExpressionSyntax.prototype.withVoidKeyword = function (voidKeyword) {
return this.update(voidKeyword, this.expression);
};
VoidExpressionSyntax.prototype.withExpression = function (expression) {
return this.update(this.voidKeyword, expression);
};
VoidExpressionSyntax.prototype.isTypeScriptSpecific = function () {
if (this.expression.isTypeScriptSpecific()) {
return true;
}
return false;
};
return VoidExpressionSyntax;
})(TypeScript.SyntaxNode);
TypeScript.VoidExpressionSyntax = VoidExpressionSyntax;
var DebuggerStatementSyntax = (function (_super) {
__extends(DebuggerStatementSyntax, _super);
function DebuggerStatementSyntax(debuggerKeyword, semicolonToken, parsedInStrictMode) {
_super.call(this, parsedInStrictMode);
this.debuggerKeyword = debuggerKeyword;
this.semicolonToken = semicolonToken;
}
DebuggerStatementSyntax.prototype.accept = function (visitor) {
return visitor.visitDebuggerStatement(this);
};
DebuggerStatementSyntax.prototype.kind = function () {
return 162 /* DebuggerStatement */;
};
DebuggerStatementSyntax.prototype.childCount = function () {
return 2;
};
DebuggerStatementSyntax.prototype.childAt = function (slot) {
switch (slot) {
case 0:
return this.debuggerKeyword;
case 1:
return this.semicolonToken;
default:
throw TypeScript.Errors.invalidOperation();
}
};
DebuggerStatementSyntax.prototype.isStatement = function () {
return true;
};
DebuggerStatementSyntax.prototype.isModuleElement = function () {
return true;
};
DebuggerStatementSyntax.prototype.update = function (debuggerKeyword, semicolonToken) {
if (this.debuggerKeyword === debuggerKeyword && this.semicolonToken === semicolonToken) {
return this;
}
return new DebuggerStatementSyntax(debuggerKeyword, semicolonToken, this.parsedInStrictMode());
};
DebuggerStatementSyntax.create1 = function () {
return new DebuggerStatementSyntax(TypeScript.Syntax.token(19 /* DebuggerKeyword */), TypeScript.Syntax.token(78 /* SemicolonToken */), false);
};
DebuggerStatementSyntax.prototype.withLeadingTrivia = function (trivia) {
return _super.prototype.withLeadingTrivia.call(this, trivia);
};
DebuggerStatementSyntax.prototype.withTrailingTrivia = function (trivia) {
return _super.prototype.withTrailingTrivia.call(this, trivia);
};
DebuggerStatementSyntax.prototype.withDebuggerKeyword = function (debuggerKeyword) {
return this.update(debuggerKeyword, this.semicolonToken);
};
DebuggerStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) {
return this.update(this.debuggerKeyword, semicolonToken);
};
DebuggerStatementSyntax.prototype.isTypeScriptSpecific = function () {
return false;
};
return DebuggerStatementSyntax;
})(TypeScript.SyntaxNode);
TypeScript.DebuggerStatementSyntax = DebuggerStatementSyntax;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var SyntaxRewriter = (function () {
function SyntaxRewriter() {
}
SyntaxRewriter.prototype.visitToken = function (token) {
return token;
};
SyntaxRewriter.prototype.visitNode = function (node) {
return node.accept(this);
};
SyntaxRewriter.prototype.visitNodeOrToken = function (node) {
return node.isToken() ? this.visitToken(node) : this.visitNode(node);
};
SyntaxRewriter.prototype.visitList = function (list) {
var newItems = null;
for (var i = 0, n = list.childCount(); i < n; i++) {
var item = list.childAt(i);
var newItem = this.visitNodeOrToken(item);
if (item !== newItem && newItems === null) {
newItems = [];
for (var j = 0; j < i; j++) {
newItems.push(list.childAt(j));
}
}
if (newItems) {
newItems.push(newItem);
}
}
return newItems === null ? list : TypeScript.Syntax.list(newItems);
};
SyntaxRewriter.prototype.visitSeparatedList = function (list) {
var newItems = null;
for (var i = 0, n = list.childCount(); i < n; i++) {
var item = list.childAt(i);
var newItem = item.isToken() ? this.visitToken(item) : this.visitNode(item);
if (item !== newItem && newItems === null) {
newItems = [];
for (var j = 0; j < i; j++) {
newItems.push(list.childAt(j));
}
}
if (newItems) {
newItems.push(newItem);
}
}
return newItems === null ? list : TypeScript.Syntax.separatedList(newItems);
};
SyntaxRewriter.prototype.visitSourceUnit = function (node) {
return node.update(this.visitList(node.moduleElements), this.visitToken(node.endOfFileToken));
};
SyntaxRewriter.prototype.visitExternalModuleReference = function (node) {
return node.update(this.visitToken(node.requireKeyword), this.visitToken(node.openParenToken), this.visitToken(node.stringLiteral), this.visitToken(node.closeParenToken));
};
SyntaxRewriter.prototype.visitModuleNameModuleReference = function (node) {
return node.update(this.visitNodeOrToken(node.moduleName));
};
SyntaxRewriter.prototype.visitImportDeclaration = function (node) {
return node.update(this.visitList(node.modifiers), this.visitToken(node.importKeyword), this.visitToken(node.identifier), this.visitToken(node.equalsToken), this.visitNodeOrToken(node.moduleReference), this.visitToken(node.semicolonToken));
};
SyntaxRewriter.prototype.visitExportAssignment = function (node) {
return node.update(this.visitToken(node.exportKeyword), this.visitToken(node.equalsToken), this.visitToken(node.identifier), this.visitToken(node.semicolonToken));
};
SyntaxRewriter.prototype.visitClassDeclaration = function (node) {
return node.update(this.visitList(node.modifiers), this.visitToken(node.classKeyword), this.visitToken(node.identifier), node.typeParameterList === null ? null : this.visitNode(node.typeParameterList), this.visitList(node.heritageClauses), this.visitToken(node.openBraceToken), this.visitList(node.classElements), this.visitToken(node.closeBraceToken));
};
SyntaxRewriter.prototype.visitInterfaceDeclaration = function (node) {
return node.update(this.visitList(node.modifiers), this.visitToken(node.interfaceKeyword), this.visitToken(node.identifier), node.typeParameterList === null ? null : this.visitNode(node.typeParameterList), this.visitList(node.heritageClauses), this.visitNode(node.body));
};
SyntaxRewriter.prototype.visitHeritageClause = function (node) {
return node.update(node.kind(), this.visitToken(node.extendsOrImplementsKeyword), this.visitSeparatedList(node.typeNames));
};
SyntaxRewriter.prototype.visitModuleDeclaration = function (node) {
return node.update(this.visitList(node.modifiers), this.visitToken(node.moduleKeyword), node.name === null ? null : this.visitNodeOrToken(node.name), node.stringLiteral === null ? null : this.visitToken(node.stringLiteral), this.visitToken(node.openBraceToken), this.visitList(node.moduleElements), this.visitToken(node.closeBraceToken));
};
SyntaxRewriter.prototype.visitFunctionDeclaration = function (node) {
return node.update(this.visitList(node.modifiers), this.visitToken(node.functionKeyword), this.visitToken(node.identifier), this.visitNode(node.callSignature), node.block === null ? null : this.visitNode(node.block), node.semicolonToken === null ? null : this.visitToken(node.semicolonToken));
};
SyntaxRewriter.prototype.visitVariableStatement = function (node) {
return node.update(this.visitList(node.modifiers), this.visitNode(node.variableDeclaration), this.visitToken(node.semicolonToken));
};
SyntaxRewriter.prototype.visitVariableDeclaration = function (node) {
return node.update(this.visitToken(node.varKeyword), this.visitSeparatedList(node.variableDeclarators));
};
SyntaxRewriter.prototype.visitVariableDeclarator = function (node) {
return node.update(this.visitToken(node.propertyName), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation), node.equalsValueClause === null ? null : this.visitNode(node.equalsValueClause));
};
SyntaxRewriter.prototype.visitEqualsValueClause = function (node) {
return node.update(this.visitToken(node.equalsToken), this.visitNodeOrToken(node.value));
};
SyntaxRewriter.prototype.visitPrefixUnaryExpression = function (node) {
return node.update(node.kind(), this.visitToken(node.operatorToken), this.visitNodeOrToken(node.operand));
};
SyntaxRewriter.prototype.visitArrayLiteralExpression = function (node) {
return node.update(this.visitToken(node.openBracketToken), this.visitSeparatedList(node.expressions), this.visitToken(node.closeBracketToken));
};
SyntaxRewriter.prototype.visitOmittedExpression = function (node) {
return node;
};
SyntaxRewriter.prototype.visitParenthesizedExpression = function (node) {
return node.update(this.visitToken(node.openParenToken), this.visitNodeOrToken(node.expression), this.visitToken(node.closeParenToken));
};
SyntaxRewriter.prototype.visitSimpleArrowFunctionExpression = function (node) {
return node.update(this.visitToken(node.identifier), this.visitToken(node.equalsGreaterThanToken), node.block === null ? null : this.visitNode(node.block), node.expression === null ? null : this.visitNodeOrToken(node.expression));
};
SyntaxRewriter.prototype.visitParenthesizedArrowFunctionExpression = function (node) {
return node.update(this.visitNode(node.callSignature), this.visitToken(node.equalsGreaterThanToken), node.block === null ? null : this.visitNode(node.block), node.expression === null ? null : this.visitNodeOrToken(node.expression));
};
SyntaxRewriter.prototype.visitQualifiedName = function (node) {
return node.update(this.visitNodeOrToken(node.left), this.visitToken(node.dotToken), this.visitToken(node.right));
};
SyntaxRewriter.prototype.visitTypeArgumentList = function (node) {
return node.update(this.visitToken(node.lessThanToken), this.visitSeparatedList(node.typeArguments), this.visitToken(node.greaterThanToken));
};
SyntaxRewriter.prototype.visitConstructorType = function (node) {
return node.update(this.visitToken(node.newKeyword), node.typeParameterList === null ? null : this.visitNode(node.typeParameterList), this.visitNode(node.parameterList), this.visitToken(node.equalsGreaterThanToken), this.visitNodeOrToken(node.type));
};
SyntaxRewriter.prototype.visitFunctionType = function (node) {
return node.update(node.typeParameterList === null ? null : this.visitNode(node.typeParameterList), this.visitNode(node.parameterList), this.visitToken(node.equalsGreaterThanToken), this.visitNodeOrToken(node.type));
};
SyntaxRewriter.prototype.visitObjectType = function (node) {
return node.update(this.visitToken(node.openBraceToken), this.visitSeparatedList(node.typeMembers), this.visitToken(node.closeBraceToken));
};
SyntaxRewriter.prototype.visitArrayType = function (node) {
return node.update(this.visitNodeOrToken(node.type), this.visitToken(node.openBracketToken), this.visitToken(node.closeBracketToken));
};
SyntaxRewriter.prototype.visitGenericType = function (node) {
return node.update(this.visitNodeOrToken(node.name), this.visitNode(node.typeArgumentList));
};
SyntaxRewriter.prototype.visitTypeQuery = function (node) {
return node.update(this.visitToken(node.typeOfKeyword), this.visitNodeOrToken(node.name));
};
SyntaxRewriter.prototype.visitTypeAnnotation = function (node) {
return node.update(this.visitToken(node.colonToken), this.visitNodeOrToken(node.type));
};
SyntaxRewriter.prototype.visitBlock = function (node) {
return node.update(this.visitToken(node.openBraceToken), this.visitList(node.statements), this.visitToken(node.closeBraceToken));
};
SyntaxRewriter.prototype.visitParameter = function (node) {
return node.update(node.dotDotDotToken === null ? null : this.visitToken(node.dotDotDotToken), this.visitList(node.modifiers), this.visitToken(node.identifier), node.questionToken === null ? null : this.visitToken(node.questionToken), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation), node.equalsValueClause === null ? null : this.visitNode(node.equalsValueClause));
};
SyntaxRewriter.prototype.visitMemberAccessExpression = function (node) {
return node.update(this.visitNodeOrToken(node.expression), this.visitToken(node.dotToken), this.visitToken(node.name));
};
SyntaxRewriter.prototype.visitPostfixUnaryExpression = function (node) {
return node.update(node.kind(), this.visitNodeOrToken(node.operand), this.visitToken(node.operatorToken));
};
SyntaxRewriter.prototype.visitElementAccessExpression = function (node) {
return node.update(this.visitNodeOrToken(node.expression), this.visitToken(node.openBracketToken), this.visitNodeOrToken(node.argumentExpression), this.visitToken(node.closeBracketToken));
};
SyntaxRewriter.prototype.visitInvocationExpression = function (node) {
return node.update(this.visitNodeOrToken(node.expression), this.visitNode(node.argumentList));
};
SyntaxRewriter.prototype.visitArgumentList = function (node) {
return node.update(node.typeArgumentList === null ? null : this.visitNode(node.typeArgumentList), this.visitToken(node.openParenToken), this.visitSeparatedList(node.arguments), this.visitToken(node.closeParenToken));
};
SyntaxRewriter.prototype.visitBinaryExpression = function (node) {
return node.update(node.kind(), this.visitNodeOrToken(node.left), this.visitToken(node.operatorToken), this.visitNodeOrToken(node.right));
};
SyntaxRewriter.prototype.visitConditionalExpression = function (node) {
return node.update(this.visitNodeOrToken(node.condition), this.visitToken(node.questionToken), this.visitNodeOrToken(node.whenTrue), this.visitToken(node.colonToken), this.visitNodeOrToken(node.whenFalse));
};
SyntaxRewriter.prototype.visitConstructSignature = function (node) {
return node.update(this.visitToken(node.newKeyword), this.visitNode(node.callSignature));
};
SyntaxRewriter.prototype.visitMethodSignature = function (node) {
return node.update(this.visitToken(node.propertyName), node.questionToken === null ? null : this.visitToken(node.questionToken), this.visitNode(node.callSignature));
};
SyntaxRewriter.prototype.visitIndexSignature = function (node) {
return node.update(this.visitToken(node.openBracketToken), this.visitNode(node.parameter), this.visitToken(node.closeBracketToken), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation));
};
SyntaxRewriter.prototype.visitPropertySignature = function (node) {
return node.update(this.visitToken(node.propertyName), node.questionToken === null ? null : this.visitToken(node.questionToken), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation));
};
SyntaxRewriter.prototype.visitCallSignature = function (node) {
return node.update(node.typeParameterList === null ? null : this.visitNode(node.typeParameterList), this.visitNode(node.parameterList), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation));
};
SyntaxRewriter.prototype.visitParameterList = function (node) {
return node.update(this.visitToken(node.openParenToken), this.visitSeparatedList(node.parameters), this.visitToken(node.closeParenToken));
};
SyntaxRewriter.prototype.visitTypeParameterList = function (node) {
return node.update(this.visitToken(node.lessThanToken), this.visitSeparatedList(node.typeParameters), this.visitToken(node.greaterThanToken));
};
SyntaxRewriter.prototype.visitTypeParameter = function (node) {
return node.update(this.visitToken(node.identifier), node.constraint === null ? null : this.visitNode(node.constraint));
};
SyntaxRewriter.prototype.visitConstraint = function (node) {
return node.update(this.visitToken(node.extendsKeyword), this.visitNodeOrToken(node.type));
};
SyntaxRewriter.prototype.visitElseClause = function (node) {
return node.update(this.visitToken(node.elseKeyword), this.visitNodeOrToken(node.statement));
};
SyntaxRewriter.prototype.visitIfStatement = function (node) {
return node.update(this.visitToken(node.ifKeyword), this.visitToken(node.openParenToken), this.visitNodeOrToken(node.condition), this.visitToken(node.closeParenToken), this.visitNodeOrToken(node.statement), node.elseClause === null ? null : this.visitNode(node.elseClause));
};
SyntaxRewriter.prototype.visitExpressionStatement = function (node) {
return node.update(this.visitNodeOrToken(node.expression), this.visitToken(node.semicolonToken));
};
SyntaxRewriter.prototype.visitConstructorDeclaration = function (node) {
return node.update(this.visitList(node.modifiers), this.visitToken(node.constructorKeyword), this.visitNode(node.callSignature), node.block === null ? null : this.visitNode(node.block), node.semicolonToken === null ? null : this.visitToken(node.semicolonToken));
};
SyntaxRewriter.prototype.visitMemberFunctionDeclaration = function (node) {
return node.update(this.visitList(node.modifiers), this.visitToken(node.propertyName), this.visitNode(node.callSignature), node.block === null ? null : this.visitNode(node.block), node.semicolonToken === null ? null : this.visitToken(node.semicolonToken));
};
SyntaxRewriter.prototype.visitGetAccessor = function (node) {
return node.update(this.visitList(node.modifiers), this.visitToken(node.getKeyword), this.visitToken(node.propertyName), this.visitNode(node.parameterList), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation), this.visitNode(node.block));
};
SyntaxRewriter.prototype.visitSetAccessor = function (node) {
return node.update(this.visitList(node.modifiers), this.visitToken(node.setKeyword), this.visitToken(node.propertyName), this.visitNode(node.parameterList), this.visitNode(node.block));
};
SyntaxRewriter.prototype.visitMemberVariableDeclaration = function (node) {
return node.update(this.visitList(node.modifiers), this.visitNode(node.variableDeclarator), this.visitToken(node.semicolonToken));
};
SyntaxRewriter.prototype.visitIndexMemberDeclaration = function (node) {
return node.update(this.visitList(node.modifiers), this.visitNode(node.indexSignature), this.visitToken(node.semicolonToken));
};
SyntaxRewriter.prototype.visitThrowStatement = function (node) {
return node.update(this.visitToken(node.throwKeyword), this.visitNodeOrToken(node.expression), this.visitToken(node.semicolonToken));
};
SyntaxRewriter.prototype.visitReturnStatement = function (node) {
return node.update(this.visitToken(node.returnKeyword), node.expression === null ? null : this.visitNodeOrToken(node.expression), this.visitToken(node.semicolonToken));
};
SyntaxRewriter.prototype.visitObjectCreationExpression = function (node) {
return node.update(this.visitToken(node.newKeyword), this.visitNodeOrToken(node.expression), node.argumentList === null ? null : this.visitNode(node.argumentList));
};
SyntaxRewriter.prototype.visitSwitchStatement = function (node) {
return node.update(this.visitToken(node.switchKeyword), this.visitToken(node.openParenToken), this.visitNodeOrToken(node.expression), this.visitToken(node.closeParenToken), this.visitToken(node.openBraceToken), this.visitList(node.switchClauses), this.visitToken(node.closeBraceToken));
};
SyntaxRewriter.prototype.visitCaseSwitchClause = function (node) {
return node.update(this.visitToken(node.caseKeyword), this.visitNodeOrToken(node.expression), this.visitToken(node.colonToken), this.visitList(node.statements));
};
SyntaxRewriter.prototype.visitDefaultSwitchClause = function (node) {
return node.update(this.visitToken(node.defaultKeyword), this.visitToken(node.colonToken), this.visitList(node.statements));
};
SyntaxRewriter.prototype.visitBreakStatement = function (node) {
return node.update(this.visitToken(node.breakKeyword), node.identifier === null ? null : this.visitToken(node.identifier), this.visitToken(node.semicolonToken));
};
SyntaxRewriter.prototype.visitContinueStatement = function (node) {
return node.update(this.visitToken(node.continueKeyword), node.identifier === null ? null : this.visitToken(node.identifier), this.visitToken(node.semicolonToken));
};
SyntaxRewriter.prototype.visitForStatement = function (node) {
return node.update(this.visitToken(node.forKeyword), this.visitToken(node.openParenToken), node.variableDeclaration === null ? null : this.visitNode(node.variableDeclaration), node.initializer === null ? null : this.visitNodeOrToken(node.initializer), this.visitToken(node.firstSemicolonToken), node.condition === null ? null : this.visitNodeOrToken(node.condition), this.visitToken(node.secondSemicolonToken), node.incrementor === null ? null : this.visitNodeOrToken(node.incrementor), this.visitToken(node.closeParenToken), this.visitNodeOrToken(node.statement));
};
SyntaxRewriter.prototype.visitForInStatement = function (node) {
return node.update(this.visitToken(node.forKeyword), this.visitToken(node.openParenToken), node.variableDeclaration === null ? null : this.visitNode(node.variableDeclaration), node.left === null ? null : this.visitNodeOrToken(node.left), this.visitToken(node.inKeyword), this.visitNodeOrToken(node.expression), this.visitToken(node.closeParenToken), this.visitNodeOrToken(node.statement));
};
SyntaxRewriter.prototype.visitWhileStatement = function (node) {
return node.update(this.visitToken(node.whileKeyword), this.visitToken(node.openParenToken), this.visitNodeOrToken(node.condition), this.visitToken(node.closeParenToken), this.visitNodeOrToken(node.statement));
};
SyntaxRewriter.prototype.visitWithStatement = function (node) {
return node.update(this.visitToken(node.withKeyword), this.visitToken(node.openParenToken), this.visitNodeOrToken(node.condition), this.visitToken(node.closeParenToken), this.visitNodeOrToken(node.statement));
};
SyntaxRewriter.prototype.visitEnumDeclaration = function (node) {
return node.update(this.visitList(node.modifiers), this.visitToken(node.enumKeyword), this.visitToken(node.identifier), this.visitToken(node.openBraceToken), this.visitSeparatedList(node.enumElements), this.visitToken(node.closeBraceToken));
};
SyntaxRewriter.prototype.visitEnumElement = function (node) {
return node.update(this.visitToken(node.propertyName), node.equalsValueClause === null ? null : this.visitNode(node.equalsValueClause));
};
SyntaxRewriter.prototype.visitCastExpression = function (node) {
return node.update(this.visitToken(node.lessThanToken), this.visitNodeOrToken(node.type), this.visitToken(node.greaterThanToken), this.visitNodeOrToken(node.expression));
};
SyntaxRewriter.prototype.visitObjectLiteralExpression = function (node) {
return node.update(this.visitToken(node.openBraceToken), this.visitSeparatedList(node.propertyAssignments), this.visitToken(node.closeBraceToken));
};
SyntaxRewriter.prototype.visitSimplePropertyAssignment = function (node) {
return node.update(this.visitToken(node.propertyName), this.visitToken(node.colonToken), this.visitNodeOrToken(node.expression));
};
SyntaxRewriter.prototype.visitFunctionPropertyAssignment = function (node) {
return node.update(this.visitToken(node.propertyName), this.visitNode(node.callSignature), this.visitNode(node.block));
};
SyntaxRewriter.prototype.visitFunctionExpression = function (node) {
return node.update(this.visitToken(node.functionKeyword), node.identifier === null ? null : this.visitToken(node.identifier), this.visitNode(node.callSignature), this.visitNode(node.block));
};
SyntaxRewriter.prototype.visitEmptyStatement = function (node) {
return node.update(this.visitToken(node.semicolonToken));
};
SyntaxRewriter.prototype.visitTryStatement = function (node) {
return node.update(this.visitToken(node.tryKeyword), this.visitNode(node.block), node.catchClause === null ? null : this.visitNode(node.catchClause), node.finallyClause === null ? null : this.visitNode(node.finallyClause));
};
SyntaxRewriter.prototype.visitCatchClause = function (node) {
return node.update(this.visitToken(node.catchKeyword), this.visitToken(node.openParenToken), this.visitToken(node.identifier), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation), this.visitToken(node.closeParenToken), this.visitNode(node.block));
};
SyntaxRewriter.prototype.visitFinallyClause = function (node) {
return node.update(this.visitToken(node.finallyKeyword), this.visitNode(node.block));
};
SyntaxRewriter.prototype.visitLabeledStatement = function (node) {
return node.update(this.visitToken(node.identifier), this.visitToken(node.colonToken), this.visitNodeOrToken(node.statement));
};
SyntaxRewriter.prototype.visitDoStatement = function (node) {
return node.update(this.visitToken(node.doKeyword), this.visitNodeOrToken(node.statement), this.visitToken(node.whileKeyword), this.visitToken(node.openParenToken), this.visitNodeOrToken(node.condition), this.visitToken(node.closeParenToken), this.visitToken(node.semicolonToken));
};
SyntaxRewriter.prototype.visitTypeOfExpression = function (node) {
return node.update(this.visitToken(node.typeOfKeyword), this.visitNodeOrToken(node.expression));
};
SyntaxRewriter.prototype.visitDeleteExpression = function (node) {
return node.update(this.visitToken(node.deleteKeyword), this.visitNodeOrToken(node.expression));
};
SyntaxRewriter.prototype.visitVoidExpression = function (node) {
return node.update(this.visitToken(node.voidKeyword), this.visitNodeOrToken(node.expression));
};
SyntaxRewriter.prototype.visitDebuggerStatement = function (node) {
return node.update(this.visitToken(node.debuggerKeyword), this.visitToken(node.semicolonToken));
};
return SyntaxRewriter;
})();
TypeScript.SyntaxRewriter = SyntaxRewriter;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var SyntaxDedenter = (function (_super) {
__extends(SyntaxDedenter, _super);
function SyntaxDedenter(dedentFirstToken, dedentationAmount, minimumIndent, options) {
_super.call(this);
this.dedentationAmount = dedentationAmount;
this.minimumIndent = minimumIndent;
this.options = options;
this.lastTriviaWasNewLine = dedentFirstToken;
}
SyntaxDedenter.prototype.abort = function () {
this.lastTriviaWasNewLine = false;
this.dedentationAmount = 0;
};
SyntaxDedenter.prototype.isAborted = function () {
return this.dedentationAmount === 0;
};
SyntaxDedenter.prototype.visitToken = function (token) {
if (token.width() === 0) {
return token;
}
var result = token;
if (this.lastTriviaWasNewLine) {
result = token.withLeadingTrivia(this.dedentTriviaList(token.leadingTrivia()));
}
if (this.isAborted()) {
return token;
}
this.lastTriviaWasNewLine = token.hasTrailingNewLine();
return result;
};
SyntaxDedenter.prototype.dedentTriviaList = function (triviaList) {
var result = [];
var dedentNextWhitespace = true;
for (var i = 0, n = triviaList.count(); i < n && !this.isAborted(); i++) {
var trivia = triviaList.syntaxTriviaAt(i);
var dedentThisTrivia = dedentNextWhitespace;
dedentNextWhitespace = false;
if (dedentThisTrivia) {
if (trivia.kind() === 4 /* WhitespaceTrivia */) {
var hasFollowingNewLine = (i < triviaList.count() - 1) && triviaList.syntaxTriviaAt(i + 1).kind() === 5 /* NewLineTrivia */;
result.push(this.dedentWhitespace(trivia, hasFollowingNewLine));
continue;
} else if (trivia.kind() !== 5 /* NewLineTrivia */) {
this.abort();
break;
}
}
if (trivia.kind() === 6 /* MultiLineCommentTrivia */) {
result.push(this.dedentMultiLineComment(trivia));
continue;
}
result.push(trivia);
if (trivia.kind() === 5 /* NewLineTrivia */) {
dedentNextWhitespace = true;
}
}
if (dedentNextWhitespace) {
this.abort();
}
if (this.isAborted()) {
return triviaList;
}
return TypeScript.Syntax.triviaList(result);
};
SyntaxDedenter.prototype.dedentSegment = function (segment, hasFollowingNewLineTrivia) {
var firstNonWhitespacePosition = TypeScript.Indentation.firstNonWhitespacePosition(segment);
if (firstNonWhitespacePosition === segment.length) {
if (hasFollowingNewLineTrivia) {
return "";
}
} else if (TypeScript.CharacterInfo.isLineTerminator(segment.charCodeAt(firstNonWhitespacePosition))) {
return segment.substring(firstNonWhitespacePosition);
}
var firstNonWhitespaceColumn = TypeScript.Indentation.columnForPositionInString(segment, firstNonWhitespacePosition, this.options);
var newFirstNonWhitespaceColumn = TypeScript.MathPrototype.min(firstNonWhitespaceColumn, TypeScript.MathPrototype.max(firstNonWhitespaceColumn - this.dedentationAmount, this.minimumIndent));
if (newFirstNonWhitespaceColumn === firstNonWhitespaceColumn) {
this.abort();
return segment;
}
this.dedentationAmount = firstNonWhitespaceColumn - newFirstNonWhitespaceColumn;
TypeScript.Debug.assert(this.dedentationAmount >= 0);
var indentationString = TypeScript.Indentation.indentationString(newFirstNonWhitespaceColumn, this.options);
return indentationString + segment.substring(firstNonWhitespacePosition);
};
SyntaxDedenter.prototype.dedentWhitespace = function (trivia, hasFollowingNewLineTrivia) {
var newIndentation = this.dedentSegment(trivia.fullText(), hasFollowingNewLineTrivia);
return TypeScript.Syntax.whitespace(newIndentation);
};
SyntaxDedenter.prototype.dedentMultiLineComment = function (trivia) {
var segments = TypeScript.Syntax.splitMultiLineCommentTriviaIntoMultipleLines(trivia);
if (segments.length === 1) {
return trivia;
}
for (var i = 1; i < segments.length; i++) {
var segment = segments[i];
segments[i] = this.dedentSegment(segment, false);
}
var result = segments.join("");
return TypeScript.Syntax.multiLineComment(result);
};
SyntaxDedenter.dedentNode = function (node, dedentFirstToken, dedentAmount, minimumIndent, options) {
var dedenter = new SyntaxDedenter(dedentFirstToken, dedentAmount, minimumIndent, options);
var result = node.accept(dedenter);
if (dedenter.isAborted()) {
return node;
}
return result;
};
return SyntaxDedenter;
})(TypeScript.SyntaxRewriter);
TypeScript.SyntaxDedenter = SyntaxDedenter;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var SyntaxIndenter = (function (_super) {
__extends(SyntaxIndenter, _super);
function SyntaxIndenter(indentFirstToken, indentationAmount, options) {
_super.call(this);
this.indentationAmount = indentationAmount;
this.options = options;
this.lastTriviaWasNewLine = indentFirstToken;
this.indentationTrivia = TypeScript.Indentation.indentationTrivia(this.indentationAmount, this.options);
}
SyntaxIndenter.prototype.visitToken = function (token) {
if (token.width() === 0) {
return token;
}
var result = token;
if (this.lastTriviaWasNewLine) {
result = token.withLeadingTrivia(this.indentTriviaList(token.leadingTrivia()));
}
this.lastTriviaWasNewLine = token.hasTrailingNewLine();
return result;
};
SyntaxIndenter.prototype.indentTriviaList = function (triviaList) {
var result = [];
var indentNextTrivia = true;
for (var i = 0, n = triviaList.count(); i < n; i++) {
var trivia = triviaList.syntaxTriviaAt(i);
var indentThisTrivia = indentNextTrivia;
indentNextTrivia = false;
switch (trivia.kind()) {
case 6 /* MultiLineCommentTrivia */:
this.indentMultiLineComment(trivia, indentThisTrivia, result);
continue;
case 7 /* SingleLineCommentTrivia */:
case 8 /* SkippedTokenTrivia */:
this.indentSingleLineOrSkippedText(trivia, indentThisTrivia, result);
continue;
case 4 /* WhitespaceTrivia */:
this.indentWhitespace(trivia, indentThisTrivia, result);
continue;
case 5 /* NewLineTrivia */:
result.push(trivia);
indentNextTrivia = true;
continue;
default:
throw TypeScript.Errors.invalidOperation();
}
}
if (indentNextTrivia) {
result.push(this.indentationTrivia);
}
return TypeScript.Syntax.triviaList(result);
};
SyntaxIndenter.prototype.indentSegment = function (segment) {
var firstNonWhitespacePosition = TypeScript.Indentation.firstNonWhitespacePosition(segment);
if (firstNonWhitespacePosition < segment.length && TypeScript.CharacterInfo.isLineTerminator(segment.charCodeAt(firstNonWhitespacePosition))) {
return segment;
}
var firstNonWhitespaceColumn = TypeScript.Indentation.columnForPositionInString(segment, firstNonWhitespacePosition, this.options);
var newFirstNonWhitespaceColumn = firstNonWhitespaceColumn + this.indentationAmount;
var indentationString = TypeScript.Indentation.indentationString(newFirstNonWhitespaceColumn, this.options);
return indentationString + segment.substring(firstNonWhitespacePosition);
};
SyntaxIndenter.prototype.indentWhitespace = function (trivia, indentThisTrivia, result) {
if (!indentThisTrivia) {
result.push(trivia);
return;
}
var newIndentation = this.indentSegment(trivia.fullText());
result.push(TypeScript.Syntax.whitespace(newIndentation));
};
SyntaxIndenter.prototype.indentSingleLineOrSkippedText = function (trivia, indentThisTrivia, result) {
if (indentThisTrivia) {
result.push(this.indentationTrivia);
}
result.push(trivia);
};
SyntaxIndenter.prototype.indentMultiLineComment = function (trivia, indentThisTrivia, result) {
if (indentThisTrivia) {
result.push(this.indentationTrivia);
}
var segments = TypeScript.Syntax.splitMultiLineCommentTriviaIntoMultipleLines(trivia);
for (var i = 1; i < segments.length; i++) {
segments[i] = this.indentSegment(segments[i]);
}
var newText = segments.join("");
result.push(TypeScript.Syntax.multiLineComment(newText));
};
SyntaxIndenter.indentNode = function (node, indentFirstToken, indentAmount, options) {
var indenter = new SyntaxIndenter(indentFirstToken, indentAmount, options);
return node.accept(indenter);
};
SyntaxIndenter.indentNodes = function (nodes, indentFirstToken, indentAmount, options) {
var indenter = new SyntaxIndenter(indentFirstToken, indentAmount, options);
var result = TypeScript.ArrayUtilities.select(nodes, function (n) {
return n.accept(indenter);
});
return result;
};
return SyntaxIndenter;
})(TypeScript.SyntaxRewriter);
TypeScript.SyntaxIndenter = SyntaxIndenter;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (Syntax) {
var VariableWidthTokenWithNoTrivia = (function () {
function VariableWidthTokenWithNoTrivia(fullText, kind) {
this._fullText = fullText;
this.tokenKind = kind;
}
VariableWidthTokenWithNoTrivia.prototype.clone = function () {
return new VariableWidthTokenWithNoTrivia(this._fullText, this.tokenKind);
};
VariableWidthTokenWithNoTrivia.prototype.isNode = function () {
return false;
};
VariableWidthTokenWithNoTrivia.prototype.isToken = function () {
return true;
};
VariableWidthTokenWithNoTrivia.prototype.isList = function () {
return false;
};
VariableWidthTokenWithNoTrivia.prototype.isSeparatedList = function () {
return false;
};
VariableWidthTokenWithNoTrivia.prototype.kind = function () {
return this.tokenKind;
};
VariableWidthTokenWithNoTrivia.prototype.childCount = function () {
return 0;
};
VariableWidthTokenWithNoTrivia.prototype.childAt = function (index) {
throw TypeScript.Errors.argumentOutOfRange('index');
};
VariableWidthTokenWithNoTrivia.prototype.fullWidth = function () {
return this.fullText().length;
};
VariableWidthTokenWithNoTrivia.prototype.width = function () {
return this.fullWidth() - this.leadingTriviaWidth() - this.trailingTriviaWidth();
};
VariableWidthTokenWithNoTrivia.prototype.text = function () {
return this.fullText().substr(this.leadingTriviaWidth(), this.width());
};
VariableWidthTokenWithNoTrivia.prototype.fullText = function () {
return this._fullText;
};
VariableWidthTokenWithNoTrivia.prototype.value = function () {
if (this._value === undefined) {
this._value = TypeScript.Syntax.value(this);
}
return this._value;
};
VariableWidthTokenWithNoTrivia.prototype.valueText = function () {
if (this._valueText === undefined) {
this._valueText = TypeScript.Syntax.valueText(this);
}
return this._valueText;
};
VariableWidthTokenWithNoTrivia.prototype.hasLeadingTrivia = function () {
return false;
};
VariableWidthTokenWithNoTrivia.prototype.hasLeadingComment = function () {
return false;
};
VariableWidthTokenWithNoTrivia.prototype.hasLeadingNewLine = function () {
return false;
};
VariableWidthTokenWithNoTrivia.prototype.hasLeadingSkippedText = function () {
return false;
};
VariableWidthTokenWithNoTrivia.prototype.leadingTriviaWidth = function () {
return 0;
};
VariableWidthTokenWithNoTrivia.prototype.leadingTrivia = function () {
return TypeScript.Syntax.emptyTriviaList;
};
VariableWidthTokenWithNoTrivia.prototype.hasTrailingTrivia = function () {
return false;
};
VariableWidthTokenWithNoTrivia.prototype.hasTrailingComment = function () {
return false;
};
VariableWidthTokenWithNoTrivia.prototype.hasTrailingNewLine = function () {
return false;
};
VariableWidthTokenWithNoTrivia.prototype.hasTrailingSkippedText = function () {
return false;
};
VariableWidthTokenWithNoTrivia.prototype.trailingTriviaWidth = function () {
return 0;
};
VariableWidthTokenWithNoTrivia.prototype.trailingTrivia = function () {
return TypeScript.Syntax.emptyTriviaList;
};
VariableWidthTokenWithNoTrivia.prototype.hasSkippedToken = function () {
return false;
};
VariableWidthTokenWithNoTrivia.prototype.toJSON = function (key) {
return TypeScript.Syntax.tokenToJSON(this);
};
VariableWidthTokenWithNoTrivia.prototype.firstToken = function () {
return this;
};
VariableWidthTokenWithNoTrivia.prototype.lastToken = function () {
return this;
};
VariableWidthTokenWithNoTrivia.prototype.isTypeScriptSpecific = function () {
return false;
};
VariableWidthTokenWithNoTrivia.prototype.isIncrementallyUnusable = function () {
return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind);
};
VariableWidthTokenWithNoTrivia.prototype.accept = function (visitor) {
return visitor.visitToken(this);
};
VariableWidthTokenWithNoTrivia.prototype.realize = function () {
return TypeScript.Syntax.realizeToken(this);
};
VariableWidthTokenWithNoTrivia.prototype.collectTextElements = function (elements) {
collectTokenTextElements(this, elements);
};
VariableWidthTokenWithNoTrivia.prototype.findTokenInternal = function (parent, position, fullStart) {
return new TypeScript.PositionedToken(parent, this, fullStart);
};
VariableWidthTokenWithNoTrivia.prototype.withLeadingTrivia = function (leadingTrivia) {
return this.realize().withLeadingTrivia(leadingTrivia);
};
VariableWidthTokenWithNoTrivia.prototype.withTrailingTrivia = function (trailingTrivia) {
return this.realize().withTrailingTrivia(trailingTrivia);
};
VariableWidthTokenWithNoTrivia.prototype.isExpression = function () {
return TypeScript.Syntax.isExpression(this);
};
VariableWidthTokenWithNoTrivia.prototype.isPrimaryExpression = function () {
return this.isExpression();
};
VariableWidthTokenWithNoTrivia.prototype.isMemberExpression = function () {
return this.isExpression();
};
VariableWidthTokenWithNoTrivia.prototype.isPostfixExpression = function () {
return this.isExpression();
};
VariableWidthTokenWithNoTrivia.prototype.isUnaryExpression = function () {
return this.isExpression();
};
return VariableWidthTokenWithNoTrivia;
})();
Syntax.VariableWidthTokenWithNoTrivia = VariableWidthTokenWithNoTrivia;
var VariableWidthTokenWithLeadingTrivia = (function () {
function VariableWidthTokenWithLeadingTrivia(fullText, kind, leadingTriviaInfo) {
this._fullText = fullText;
this.tokenKind = kind;
this._leadingTriviaInfo = leadingTriviaInfo;
}
VariableWidthTokenWithLeadingTrivia.prototype.clone = function () {
return new VariableWidthTokenWithLeadingTrivia(this._fullText, this.tokenKind, this._leadingTriviaInfo);
};
VariableWidthTokenWithLeadingTrivia.prototype.isNode = function () {
return false;
};
VariableWidthTokenWithLeadingTrivia.prototype.isToken = function () {
return true;
};
VariableWidthTokenWithLeadingTrivia.prototype.isList = function () {
return false;
};
VariableWidthTokenWithLeadingTrivia.prototype.isSeparatedList = function () {
return false;
};
VariableWidthTokenWithLeadingTrivia.prototype.kind = function () {
return this.tokenKind;
};
VariableWidthTokenWithLeadingTrivia.prototype.childCount = function () {
return 0;
};
VariableWidthTokenWithLeadingTrivia.prototype.childAt = function (index) {
throw TypeScript.Errors.argumentOutOfRange('index');
};
VariableWidthTokenWithLeadingTrivia.prototype.fullWidth = function () {
return this.fullText().length;
};
VariableWidthTokenWithLeadingTrivia.prototype.width = function () {
return this.fullWidth() - this.leadingTriviaWidth() - this.trailingTriviaWidth();
};
VariableWidthTokenWithLeadingTrivia.prototype.text = function () {
return this.fullText().substr(this.leadingTriviaWidth(), this.width());
};
VariableWidthTokenWithLeadingTrivia.prototype.fullText = function () {
return this._fullText;
};
VariableWidthTokenWithLeadingTrivia.prototype.value = function () {
if (this._value === undefined) {
this._value = TypeScript.Syntax.value(this);
}
return this._value;
};
VariableWidthTokenWithLeadingTrivia.prototype.valueText = function () {
if (this._valueText === undefined) {
this._valueText = TypeScript.Syntax.valueText(this);
}
return this._valueText;
};
VariableWidthTokenWithLeadingTrivia.prototype.hasLeadingTrivia = function () {
return true;
};
VariableWidthTokenWithLeadingTrivia.prototype.hasLeadingComment = function () {
return hasTriviaComment(this._leadingTriviaInfo);
};
VariableWidthTokenWithLeadingTrivia.prototype.hasLeadingNewLine = function () {
return hasTriviaNewLine(this._leadingTriviaInfo);
};
VariableWidthTokenWithLeadingTrivia.prototype.hasLeadingSkippedText = function () {
return false;
};
VariableWidthTokenWithLeadingTrivia.prototype.leadingTriviaWidth = function () {
return getTriviaWidth(this._leadingTriviaInfo);
};
VariableWidthTokenWithLeadingTrivia.prototype.leadingTrivia = function () {
return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), 0, getTriviaWidth(this._leadingTriviaInfo), false);
};
VariableWidthTokenWithLeadingTrivia.prototype.hasTrailingTrivia = function () {
return false;
};
VariableWidthTokenWithLeadingTrivia.prototype.hasTrailingComment = function () {
return false;
};
VariableWidthTokenWithLeadingTrivia.prototype.hasTrailingNewLine = function () {
return false;
};
VariableWidthTokenWithLeadingTrivia.prototype.hasTrailingSkippedText = function () {
return false;
};
VariableWidthTokenWithLeadingTrivia.prototype.trailingTriviaWidth = function () {
return 0;
};
VariableWidthTokenWithLeadingTrivia.prototype.trailingTrivia = function () {
return TypeScript.Syntax.emptyTriviaList;
};
VariableWidthTokenWithLeadingTrivia.prototype.hasSkippedToken = function () {
return false;
};
VariableWidthTokenWithLeadingTrivia.prototype.toJSON = function (key) {
return TypeScript.Syntax.tokenToJSON(this);
};
VariableWidthTokenWithLeadingTrivia.prototype.firstToken = function () {
return this;
};
VariableWidthTokenWithLeadingTrivia.prototype.lastToken = function () {
return this;
};
VariableWidthTokenWithLeadingTrivia.prototype.isTypeScriptSpecific = function () {
return false;
};
VariableWidthTokenWithLeadingTrivia.prototype.isIncrementallyUnusable = function () {
return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind);
};
VariableWidthTokenWithLeadingTrivia.prototype.accept = function (visitor) {
return visitor.visitToken(this);
};
VariableWidthTokenWithLeadingTrivia.prototype.realize = function () {
return TypeScript.Syntax.realizeToken(this);
};
VariableWidthTokenWithLeadingTrivia.prototype.collectTextElements = function (elements) {
collectTokenTextElements(this, elements);
};
VariableWidthTokenWithLeadingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) {
return new TypeScript.PositionedToken(parent, this, fullStart);
};
VariableWidthTokenWithLeadingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) {
return this.realize().withLeadingTrivia(leadingTrivia);
};
VariableWidthTokenWithLeadingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) {
return this.realize().withTrailingTrivia(trailingTrivia);
};
VariableWidthTokenWithLeadingTrivia.prototype.isExpression = function () {
return TypeScript.Syntax.isExpression(this);
};
VariableWidthTokenWithLeadingTrivia.prototype.isPrimaryExpression = function () {
return this.isExpression();
};
VariableWidthTokenWithLeadingTrivia.prototype.isMemberExpression = function () {
return this.isExpression();
};
VariableWidthTokenWithLeadingTrivia.prototype.isPostfixExpression = function () {
return this.isExpression();
};
VariableWidthTokenWithLeadingTrivia.prototype.isUnaryExpression = function () {
return this.isExpression();
};
return VariableWidthTokenWithLeadingTrivia;
})();
Syntax.VariableWidthTokenWithLeadingTrivia = VariableWidthTokenWithLeadingTrivia;
var VariableWidthTokenWithTrailingTrivia = (function () {
function VariableWidthTokenWithTrailingTrivia(fullText, kind, trailingTriviaInfo) {
this._fullText = fullText;
this.tokenKind = kind;
this._trailingTriviaInfo = trailingTriviaInfo;
}
VariableWidthTokenWithTrailingTrivia.prototype.clone = function () {
return new VariableWidthTokenWithTrailingTrivia(this._fullText, this.tokenKind, this._trailingTriviaInfo);
};
VariableWidthTokenWithTrailingTrivia.prototype.isNode = function () {
return false;
};
VariableWidthTokenWithTrailingTrivia.prototype.isToken = function () {
return true;
};
VariableWidthTokenWithTrailingTrivia.prototype.isList = function () {
return false;
};
VariableWidthTokenWithTrailingTrivia.prototype.isSeparatedList = function () {
return false;
};
VariableWidthTokenWithTrailingTrivia.prototype.kind = function () {
return this.tokenKind;
};
VariableWidthTokenWithTrailingTrivia.prototype.childCount = function () {
return 0;
};
VariableWidthTokenWithTrailingTrivia.prototype.childAt = function (index) {
throw TypeScript.Errors.argumentOutOfRange('index');
};
VariableWidthTokenWithTrailingTrivia.prototype.fullWidth = function () {
return this.fullText().length;
};
VariableWidthTokenWithTrailingTrivia.prototype.width = function () {
return this.fullWidth() - this.leadingTriviaWidth() - this.trailingTriviaWidth();
};
VariableWidthTokenWithTrailingTrivia.prototype.text = function () {
return this.fullText().substr(this.leadingTriviaWidth(), this.width());
};
VariableWidthTokenWithTrailingTrivia.prototype.fullText = function () {
return this._fullText;
};
VariableWidthTokenWithTrailingTrivia.prototype.value = function () {
if (this._value === undefined) {
this._value = TypeScript.Syntax.value(this);
}
return this._value;
};
VariableWidthTokenWithTrailingTrivia.prototype.valueText = function () {
if (this._valueText === undefined) {
this._valueText = TypeScript.Syntax.valueText(this);
}
return this._valueText;
};
VariableWidthTokenWithTrailingTrivia.prototype.hasLeadingTrivia = function () {
return false;
};
VariableWidthTokenWithTrailingTrivia.prototype.hasLeadingComment = function () {
return false;
};
VariableWidthTokenWithTrailingTrivia.prototype.hasLeadingNewLine = function () {
return false;
};
VariableWidthTokenWithTrailingTrivia.prototype.hasLeadingSkippedText = function () {
return false;
};
VariableWidthTokenWithTrailingTrivia.prototype.leadingTriviaWidth = function () {
return 0;
};
VariableWidthTokenWithTrailingTrivia.prototype.leadingTrivia = function () {
return TypeScript.Syntax.emptyTriviaList;
};
VariableWidthTokenWithTrailingTrivia.prototype.hasTrailingTrivia = function () {
return true;
};
VariableWidthTokenWithTrailingTrivia.prototype.hasTrailingComment = function () {
return hasTriviaComment(this._trailingTriviaInfo);
};
VariableWidthTokenWithTrailingTrivia.prototype.hasTrailingNewLine = function () {
return hasTriviaNewLine(this._trailingTriviaInfo);
};
VariableWidthTokenWithTrailingTrivia.prototype.hasTrailingSkippedText = function () {
return false;
};
VariableWidthTokenWithTrailingTrivia.prototype.trailingTriviaWidth = function () {
return getTriviaWidth(this._trailingTriviaInfo);
};
VariableWidthTokenWithTrailingTrivia.prototype.trailingTrivia = function () {
return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), this.leadingTriviaWidth() + this.width(), getTriviaWidth(this._trailingTriviaInfo), true);
};
VariableWidthTokenWithTrailingTrivia.prototype.hasSkippedToken = function () {
return false;
};
VariableWidthTokenWithTrailingTrivia.prototype.toJSON = function (key) {
return TypeScript.Syntax.tokenToJSON(this);
};
VariableWidthTokenWithTrailingTrivia.prototype.firstToken = function () {
return this;
};
VariableWidthTokenWithTrailingTrivia.prototype.lastToken = function () {
return this;
};
VariableWidthTokenWithTrailingTrivia.prototype.isTypeScriptSpecific = function () {
return false;
};
VariableWidthTokenWithTrailingTrivia.prototype.isIncrementallyUnusable = function () {
return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind);
};
VariableWidthTokenWithTrailingTrivia.prototype.accept = function (visitor) {
return visitor.visitToken(this);
};
VariableWidthTokenWithTrailingTrivia.prototype.realize = function () {
return TypeScript.Syntax.realizeToken(this);
};
VariableWidthTokenWithTrailingTrivia.prototype.collectTextElements = function (elements) {
collectTokenTextElements(this, elements);
};
VariableWidthTokenWithTrailingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) {
return new TypeScript.PositionedToken(parent, this, fullStart);
};
VariableWidthTokenWithTrailingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) {
return this.realize().withLeadingTrivia(leadingTrivia);
};
VariableWidthTokenWithTrailingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) {
return this.realize().withTrailingTrivia(trailingTrivia);
};
VariableWidthTokenWithTrailingTrivia.prototype.isExpression = function () {
return TypeScript.Syntax.isExpression(this);
};
VariableWidthTokenWithTrailingTrivia.prototype.isPrimaryExpression = function () {
return this.isExpression();
};
VariableWidthTokenWithTrailingTrivia.prototype.isMemberExpression = function () {
return this.isExpression();
};
VariableWidthTokenWithTrailingTrivia.prototype.isPostfixExpression = function () {
return this.isExpression();
};
VariableWidthTokenWithTrailingTrivia.prototype.isUnaryExpression = function () {
return this.isExpression();
};
return VariableWidthTokenWithTrailingTrivia;
})();
Syntax.VariableWidthTokenWithTrailingTrivia = VariableWidthTokenWithTrailingTrivia;
var VariableWidthTokenWithLeadingAndTrailingTrivia = (function () {
function VariableWidthTokenWithLeadingAndTrailingTrivia(fullText, kind, leadingTriviaInfo, trailingTriviaInfo) {
this._fullText = fullText;
this.tokenKind = kind;
this._leadingTriviaInfo = leadingTriviaInfo;
this._trailingTriviaInfo = trailingTriviaInfo;
}
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.clone = function () {
return new VariableWidthTokenWithLeadingAndTrailingTrivia(this._fullText, this.tokenKind, this._leadingTriviaInfo, this._trailingTriviaInfo);
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isNode = function () {
return false;
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isToken = function () {
return true;
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isList = function () {
return false;
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isSeparatedList = function () {
return false;
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.kind = function () {
return this.tokenKind;
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.childCount = function () {
return 0;
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.childAt = function (index) {
throw TypeScript.Errors.argumentOutOfRange('index');
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.fullWidth = function () {
return this.fullText().length;
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.width = function () {
return this.fullWidth() - this.leadingTriviaWidth() - this.trailingTriviaWidth();
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.text = function () {
return this.fullText().substr(this.leadingTriviaWidth(), this.width());
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.fullText = function () {
return this._fullText;
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.value = function () {
if (this._value === undefined) {
this._value = TypeScript.Syntax.value(this);
}
return this._value;
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.valueText = function () {
if (this._valueText === undefined) {
this._valueText = TypeScript.Syntax.valueText(this);
}
return this._valueText;
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingTrivia = function () {
return true;
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingComment = function () {
return hasTriviaComment(this._leadingTriviaInfo);
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingNewLine = function () {
return hasTriviaNewLine(this._leadingTriviaInfo);
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingSkippedText = function () {
return false;
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.leadingTriviaWidth = function () {
return getTriviaWidth(this._leadingTriviaInfo);
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.leadingTrivia = function () {
return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), 0, getTriviaWidth(this._leadingTriviaInfo), false);
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingTrivia = function () {
return true;
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingComment = function () {
return hasTriviaComment(this._trailingTriviaInfo);
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingNewLine = function () {
return hasTriviaNewLine(this._trailingTriviaInfo);
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingSkippedText = function () {
return false;
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.trailingTriviaWidth = function () {
return getTriviaWidth(this._trailingTriviaInfo);
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.trailingTrivia = function () {
return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), this.leadingTriviaWidth() + this.width(), getTriviaWidth(this._trailingTriviaInfo), true);
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasSkippedToken = function () {
return false;
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.toJSON = function (key) {
return TypeScript.Syntax.tokenToJSON(this);
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.firstToken = function () {
return this;
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.lastToken = function () {
return this;
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isTypeScriptSpecific = function () {
return false;
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isIncrementallyUnusable = function () {
return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind);
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.accept = function (visitor) {
return visitor.visitToken(this);
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.realize = function () {
return TypeScript.Syntax.realizeToken(this);
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.collectTextElements = function (elements) {
collectTokenTextElements(this, elements);
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) {
return new TypeScript.PositionedToken(parent, this, fullStart);
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) {
return this.realize().withLeadingTrivia(leadingTrivia);
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) {
return this.realize().withTrailingTrivia(trailingTrivia);
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isExpression = function () {
return TypeScript.Syntax.isExpression(this);
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isPrimaryExpression = function () {
return this.isExpression();
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isMemberExpression = function () {
return this.isExpression();
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isPostfixExpression = function () {
return this.isExpression();
};
VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isUnaryExpression = function () {
return this.isExpression();
};
return VariableWidthTokenWithLeadingAndTrailingTrivia;
})();
Syntax.VariableWidthTokenWithLeadingAndTrailingTrivia = VariableWidthTokenWithLeadingAndTrailingTrivia;
var FixedWidthTokenWithNoTrivia = (function () {
function FixedWidthTokenWithNoTrivia(kind) {
this.tokenKind = kind;
}
FixedWidthTokenWithNoTrivia.prototype.clone = function () {
return new FixedWidthTokenWithNoTrivia(this.tokenKind);
};
FixedWidthTokenWithNoTrivia.prototype.isNode = function () {
return false;
};
FixedWidthTokenWithNoTrivia.prototype.isToken = function () {
return true;
};
FixedWidthTokenWithNoTrivia.prototype.isList = function () {
return false;
};
FixedWidthTokenWithNoTrivia.prototype.isSeparatedList = function () {
return false;
};
FixedWidthTokenWithNoTrivia.prototype.kind = function () {
return this.tokenKind;
};
FixedWidthTokenWithNoTrivia.prototype.childCount = function () {
return 0;
};
FixedWidthTokenWithNoTrivia.prototype.childAt = function (index) {
throw TypeScript.Errors.argumentOutOfRange('index');
};
FixedWidthTokenWithNoTrivia.prototype.fullWidth = function () {
return this.fullText().length;
};
FixedWidthTokenWithNoTrivia.prototype.width = function () {
return this.text().length;
};
FixedWidthTokenWithNoTrivia.prototype.text = function () {
return TypeScript.SyntaxFacts.getText(this.tokenKind);
};
FixedWidthTokenWithNoTrivia.prototype.fullText = function () {
return this.text();
};
FixedWidthTokenWithNoTrivia.prototype.value = function () {
return TypeScript.Syntax.value(this);
};
FixedWidthTokenWithNoTrivia.prototype.valueText = function () {
return TypeScript.Syntax.valueText(this);
};
FixedWidthTokenWithNoTrivia.prototype.hasLeadingTrivia = function () {
return false;
};
FixedWidthTokenWithNoTrivia.prototype.hasLeadingComment = function () {
return false;
};
FixedWidthTokenWithNoTrivia.prototype.hasLeadingNewLine = function () {
return false;
};
FixedWidthTokenWithNoTrivia.prototype.hasLeadingSkippedText = function () {
return false;
};
FixedWidthTokenWithNoTrivia.prototype.leadingTriviaWidth = function () {
return 0;
};
FixedWidthTokenWithNoTrivia.prototype.leadingTrivia = function () {
return TypeScript.Syntax.emptyTriviaList;
};
FixedWidthTokenWithNoTrivia.prototype.hasTrailingTrivia = function () {
return false;
};
FixedWidthTokenWithNoTrivia.prototype.hasTrailingComment = function () {
return false;
};
FixedWidthTokenWithNoTrivia.prototype.hasTrailingNewLine = function () {
return false;
};
FixedWidthTokenWithNoTrivia.prototype.hasTrailingSkippedText = function () {
return false;
};
FixedWidthTokenWithNoTrivia.prototype.trailingTriviaWidth = function () {
return 0;
};
FixedWidthTokenWithNoTrivia.prototype.trailingTrivia = function () {
return TypeScript.Syntax.emptyTriviaList;
};
FixedWidthTokenWithNoTrivia.prototype.hasSkippedToken = function () {
return false;
};
FixedWidthTokenWithNoTrivia.prototype.toJSON = function (key) {
return TypeScript.Syntax.tokenToJSON(this);
};
FixedWidthTokenWithNoTrivia.prototype.firstToken = function () {
return this;
};
FixedWidthTokenWithNoTrivia.prototype.lastToken = function () {
return this;
};
FixedWidthTokenWithNoTrivia.prototype.isTypeScriptSpecific = function () {
return false;
};
FixedWidthTokenWithNoTrivia.prototype.isIncrementallyUnusable = function () {
return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind);
};
FixedWidthTokenWithNoTrivia.prototype.accept = function (visitor) {
return visitor.visitToken(this);
};
FixedWidthTokenWithNoTrivia.prototype.realize = function () {
return TypeScript.Syntax.realizeToken(this);
};
FixedWidthTokenWithNoTrivia.prototype.collectTextElements = function (elements) {
collectTokenTextElements(this, elements);
};
FixedWidthTokenWithNoTrivia.prototype.findTokenInternal = function (parent, position, fullStart) {
return new TypeScript.PositionedToken(parent, this, fullStart);
};
FixedWidthTokenWithNoTrivia.prototype.withLeadingTrivia = function (leadingTrivia) {
return this.realize().withLeadingTrivia(leadingTrivia);
};
FixedWidthTokenWithNoTrivia.prototype.withTrailingTrivia = function (trailingTrivia) {
return this.realize().withTrailingTrivia(trailingTrivia);
};
FixedWidthTokenWithNoTrivia.prototype.isExpression = function () {
return TypeScript.Syntax.isExpression(this);
};
FixedWidthTokenWithNoTrivia.prototype.isPrimaryExpression = function () {
return this.isExpression();
};
FixedWidthTokenWithNoTrivia.prototype.isMemberExpression = function () {
return this.isExpression();
};
FixedWidthTokenWithNoTrivia.prototype.isPostfixExpression = function () {
return this.isExpression();
};
FixedWidthTokenWithNoTrivia.prototype.isUnaryExpression = function () {
return this.isExpression();
};
return FixedWidthTokenWithNoTrivia;
})();
Syntax.FixedWidthTokenWithNoTrivia = FixedWidthTokenWithNoTrivia;
var FixedWidthTokenWithLeadingTrivia = (function () {
function FixedWidthTokenWithLeadingTrivia(fullText, kind, leadingTriviaInfo) {
this._fullText = fullText;
this.tokenKind = kind;
this._leadingTriviaInfo = leadingTriviaInfo;
}
FixedWidthTokenWithLeadingTrivia.prototype.clone = function () {
return new FixedWidthTokenWithLeadingTrivia(this._fullText, this.tokenKind, this._leadingTriviaInfo);
};
FixedWidthTokenWithLeadingTrivia.prototype.isNode = function () {
return false;
};
FixedWidthTokenWithLeadingTrivia.prototype.isToken = function () {
return true;
};
FixedWidthTokenWithLeadingTrivia.prototype.isList = function () {
return false;
};
FixedWidthTokenWithLeadingTrivia.prototype.isSeparatedList = function () {
return false;
};
FixedWidthTokenWithLeadingTrivia.prototype.kind = function () {
return this.tokenKind;
};
FixedWidthTokenWithLeadingTrivia.prototype.childCount = function () {
return 0;
};
FixedWidthTokenWithLeadingTrivia.prototype.childAt = function (index) {
throw TypeScript.Errors.argumentOutOfRange('index');
};
FixedWidthTokenWithLeadingTrivia.prototype.fullWidth = function () {
return this.fullText().length;
};
FixedWidthTokenWithLeadingTrivia.prototype.width = function () {
return this.text().length;
};
FixedWidthTokenWithLeadingTrivia.prototype.text = function () {
return TypeScript.SyntaxFacts.getText(this.tokenKind);
};
FixedWidthTokenWithLeadingTrivia.prototype.fullText = function () {
return this._fullText;
};
FixedWidthTokenWithLeadingTrivia.prototype.value = function () {
return TypeScript.Syntax.value(this);
};
FixedWidthTokenWithLeadingTrivia.prototype.valueText = function () {
return TypeScript.Syntax.valueText(this);
};
FixedWidthTokenWithLeadingTrivia.prototype.hasLeadingTrivia = function () {
return true;
};
FixedWidthTokenWithLeadingTrivia.prototype.hasLeadingComment = function () {
return hasTriviaComment(this._leadingTriviaInfo);
};
FixedWidthTokenWithLeadingTrivia.prototype.hasLeadingNewLine = function () {
return hasTriviaNewLine(this._leadingTriviaInfo);
};
FixedWidthTokenWithLeadingTrivia.prototype.hasLeadingSkippedText = function () {
return false;
};
FixedWidthTokenWithLeadingTrivia.prototype.leadingTriviaWidth = function () {
return getTriviaWidth(this._leadingTriviaInfo);
};
FixedWidthTokenWithLeadingTrivia.prototype.leadingTrivia = function () {
return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), 0, getTriviaWidth(this._leadingTriviaInfo), false);
};
FixedWidthTokenWithLeadingTrivia.prototype.hasTrailingTrivia = function () {
return false;
};
FixedWidthTokenWithLeadingTrivia.prototype.hasTrailingComment = function () {
return false;
};
FixedWidthTokenWithLeadingTrivia.prototype.hasTrailingNewLine = function () {
return false;
};
FixedWidthTokenWithLeadingTrivia.prototype.hasTrailingSkippedText = function () {
return false;
};
FixedWidthTokenWithLeadingTrivia.prototype.trailingTriviaWidth = function () {
return 0;
};
FixedWidthTokenWithLeadingTrivia.prototype.trailingTrivia = function () {
return TypeScript.Syntax.emptyTriviaList;
};
FixedWidthTokenWithLeadingTrivia.prototype.hasSkippedToken = function () {
return false;
};
FixedWidthTokenWithLeadingTrivia.prototype.toJSON = function (key) {
return TypeScript.Syntax.tokenToJSON(this);
};
FixedWidthTokenWithLeadingTrivia.prototype.firstToken = function () {
return this;
};
FixedWidthTokenWithLeadingTrivia.prototype.lastToken = function () {
return this;
};
FixedWidthTokenWithLeadingTrivia.prototype.isTypeScriptSpecific = function () {
return false;
};
FixedWidthTokenWithLeadingTrivia.prototype.isIncrementallyUnusable = function () {
return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind);
};
FixedWidthTokenWithLeadingTrivia.prototype.accept = function (visitor) {
return visitor.visitToken(this);
};
FixedWidthTokenWithLeadingTrivia.prototype.realize = function () {
return TypeScript.Syntax.realizeToken(this);
};
FixedWidthTokenWithLeadingTrivia.prototype.collectTextElements = function (elements) {
collectTokenTextElements(this, elements);
};
FixedWidthTokenWithLeadingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) {
return new TypeScript.PositionedToken(parent, this, fullStart);
};
FixedWidthTokenWithLeadingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) {
return this.realize().withLeadingTrivia(leadingTrivia);
};
FixedWidthTokenWithLeadingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) {
return this.realize().withTrailingTrivia(trailingTrivia);
};
FixedWidthTokenWithLeadingTrivia.prototype.isExpression = function () {
return TypeScript.Syntax.isExpression(this);
};
FixedWidthTokenWithLeadingTrivia.prototype.isPrimaryExpression = function () {
return this.isExpression();
};
FixedWidthTokenWithLeadingTrivia.prototype.isMemberExpression = function () {
return this.isExpression();
};
FixedWidthTokenWithLeadingTrivia.prototype.isPostfixExpression = function () {
return this.isExpression();
};
FixedWidthTokenWithLeadingTrivia.prototype.isUnaryExpression = function () {
return this.isExpression();
};
return FixedWidthTokenWithLeadingTrivia;
})();
Syntax.FixedWidthTokenWithLeadingTrivia = FixedWidthTokenWithLeadingTrivia;
var FixedWidthTokenWithTrailingTrivia = (function () {
function FixedWidthTokenWithTrailingTrivia(fullText, kind, trailingTriviaInfo) {
this._fullText = fullText;
this.tokenKind = kind;
this._trailingTriviaInfo = trailingTriviaInfo;
}
FixedWidthTokenWithTrailingTrivia.prototype.clone = function () {
return new FixedWidthTokenWithTrailingTrivia(this._fullText, this.tokenKind, this._trailingTriviaInfo);
};
FixedWidthTokenWithTrailingTrivia.prototype.isNode = function () {
return false;
};
FixedWidthTokenWithTrailingTrivia.prototype.isToken = function () {
return true;
};
FixedWidthTokenWithTrailingTrivia.prototype.isList = function () {
return false;
};
FixedWidthTokenWithTrailingTrivia.prototype.isSeparatedList = function () {
return false;
};
FixedWidthTokenWithTrailingTrivia.prototype.kind = function () {
return this.tokenKind;
};
FixedWidthTokenWithTrailingTrivia.prototype.childCount = function () {
return 0;
};
FixedWidthTokenWithTrailingTrivia.prototype.childAt = function (index) {
throw TypeScript.Errors.argumentOutOfRange('index');
};
FixedWidthTokenWithTrailingTrivia.prototype.fullWidth = function () {
return this.fullText().length;
};
FixedWidthTokenWithTrailingTrivia.prototype.width = function () {
return this.text().length;
};
FixedWidthTokenWithTrailingTrivia.prototype.text = function () {
return TypeScript.SyntaxFacts.getText(this.tokenKind);
};
FixedWidthTokenWithTrailingTrivia.prototype.fullText = function () {
return this._fullText;
};
FixedWidthTokenWithTrailingTrivia.prototype.value = function () {
return TypeScript.Syntax.value(this);
};
FixedWidthTokenWithTrailingTrivia.prototype.valueText = function () {
return TypeScript.Syntax.valueText(this);
};
FixedWidthTokenWithTrailingTrivia.prototype.hasLeadingTrivia = function () {
return false;
};
FixedWidthTokenWithTrailingTrivia.prototype.hasLeadingComment = function () {
return false;
};
FixedWidthTokenWithTrailingTrivia.prototype.hasLeadingNewLine = function () {
return false;
};
FixedWidthTokenWithTrailingTrivia.prototype.hasLeadingSkippedText = function () {
return false;
};
FixedWidthTokenWithTrailingTrivia.prototype.leadingTriviaWidth = function () {
return 0;
};
FixedWidthTokenWithTrailingTrivia.prototype.leadingTrivia = function () {
return TypeScript.Syntax.emptyTriviaList;
};
FixedWidthTokenWithTrailingTrivia.prototype.hasTrailingTrivia = function () {
return true;
};
FixedWidthTokenWithTrailingTrivia.prototype.hasTrailingComment = function () {
return hasTriviaComment(this._trailingTriviaInfo);
};
FixedWidthTokenWithTrailingTrivia.prototype.hasTrailingNewLine = function () {
return hasTriviaNewLine(this._trailingTriviaInfo);
};
FixedWidthTokenWithTrailingTrivia.prototype.hasTrailingSkippedText = function () {
return false;
};
FixedWidthTokenWithTrailingTrivia.prototype.trailingTriviaWidth = function () {
return getTriviaWidth(this._trailingTriviaInfo);
};
FixedWidthTokenWithTrailingTrivia.prototype.trailingTrivia = function () {
return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), this.leadingTriviaWidth() + this.width(), getTriviaWidth(this._trailingTriviaInfo), true);
};
FixedWidthTokenWithTrailingTrivia.prototype.hasSkippedToken = function () {
return false;
};
FixedWidthTokenWithTrailingTrivia.prototype.toJSON = function (key) {
return TypeScript.Syntax.tokenToJSON(this);
};
FixedWidthTokenWithTrailingTrivia.prototype.firstToken = function () {
return this;
};
FixedWidthTokenWithTrailingTrivia.prototype.lastToken = function () {
return this;
};
FixedWidthTokenWithTrailingTrivia.prototype.isTypeScriptSpecific = function () {
return false;
};
FixedWidthTokenWithTrailingTrivia.prototype.isIncrementallyUnusable = function () {
return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind);
};
FixedWidthTokenWithTrailingTrivia.prototype.accept = function (visitor) {
return visitor.visitToken(this);
};
FixedWidthTokenWithTrailingTrivia.prototype.realize = function () {
return TypeScript.Syntax.realizeToken(this);
};
FixedWidthTokenWithTrailingTrivia.prototype.collectTextElements = function (elements) {
collectTokenTextElements(this, elements);
};
FixedWidthTokenWithTrailingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) {
return new TypeScript.PositionedToken(parent, this, fullStart);
};
FixedWidthTokenWithTrailingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) {
return this.realize().withLeadingTrivia(leadingTrivia);
};
FixedWidthTokenWithTrailingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) {
return this.realize().withTrailingTrivia(trailingTrivia);
};
FixedWidthTokenWithTrailingTrivia.prototype.isExpression = function () {
return TypeScript.Syntax.isExpression(this);
};
FixedWidthTokenWithTrailingTrivia.prototype.isPrimaryExpression = function () {
return this.isExpression();
};
FixedWidthTokenWithTrailingTrivia.prototype.isMemberExpression = function () {
return this.isExpression();
};
FixedWidthTokenWithTrailingTrivia.prototype.isPostfixExpression = function () {
return this.isExpression();
};
FixedWidthTokenWithTrailingTrivia.prototype.isUnaryExpression = function () {
return this.isExpression();
};
return FixedWidthTokenWithTrailingTrivia;
})();
Syntax.FixedWidthTokenWithTrailingTrivia = FixedWidthTokenWithTrailingTrivia;
var FixedWidthTokenWithLeadingAndTrailingTrivia = (function () {
function FixedWidthTokenWithLeadingAndTrailingTrivia(fullText, kind, leadingTriviaInfo, trailingTriviaInfo) {
this._fullText = fullText;
this.tokenKind = kind;
this._leadingTriviaInfo = leadingTriviaInfo;
this._trailingTriviaInfo = trailingTriviaInfo;
}
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.clone = function () {
return new FixedWidthTokenWithLeadingAndTrailingTrivia(this._fullText, this.tokenKind, this._leadingTriviaInfo, this._trailingTriviaInfo);
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isNode = function () {
return false;
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isToken = function () {
return true;
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isList = function () {
return false;
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isSeparatedList = function () {
return false;
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.kind = function () {
return this.tokenKind;
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.childCount = function () {
return 0;
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.childAt = function (index) {
throw TypeScript.Errors.argumentOutOfRange('index');
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.fullWidth = function () {
return this.fullText().length;
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.width = function () {
return this.text().length;
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.text = function () {
return TypeScript.SyntaxFacts.getText(this.tokenKind);
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.fullText = function () {
return this._fullText;
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.value = function () {
return TypeScript.Syntax.value(this);
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.valueText = function () {
return TypeScript.Syntax.valueText(this);
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingTrivia = function () {
return true;
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingComment = function () {
return hasTriviaComment(this._leadingTriviaInfo);
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingNewLine = function () {
return hasTriviaNewLine(this._leadingTriviaInfo);
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingSkippedText = function () {
return false;
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.leadingTriviaWidth = function () {
return getTriviaWidth(this._leadingTriviaInfo);
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.leadingTrivia = function () {
return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), 0, getTriviaWidth(this._leadingTriviaInfo), false);
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingTrivia = function () {
return true;
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingComment = function () {
return hasTriviaComment(this._trailingTriviaInfo);
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingNewLine = function () {
return hasTriviaNewLine(this._trailingTriviaInfo);
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingSkippedText = function () {
return false;
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.trailingTriviaWidth = function () {
return getTriviaWidth(this._trailingTriviaInfo);
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.trailingTrivia = function () {
return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), this.leadingTriviaWidth() + this.width(), getTriviaWidth(this._trailingTriviaInfo), true);
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasSkippedToken = function () {
return false;
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.toJSON = function (key) {
return TypeScript.Syntax.tokenToJSON(this);
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.firstToken = function () {
return this;
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.lastToken = function () {
return this;
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isTypeScriptSpecific = function () {
return false;
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isIncrementallyUnusable = function () {
return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind);
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.accept = function (visitor) {
return visitor.visitToken(this);
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.realize = function () {
return TypeScript.Syntax.realizeToken(this);
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.collectTextElements = function (elements) {
collectTokenTextElements(this, elements);
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) {
return new TypeScript.PositionedToken(parent, this, fullStart);
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) {
return this.realize().withLeadingTrivia(leadingTrivia);
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) {
return this.realize().withTrailingTrivia(trailingTrivia);
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isExpression = function () {
return TypeScript.Syntax.isExpression(this);
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isPrimaryExpression = function () {
return this.isExpression();
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isMemberExpression = function () {
return this.isExpression();
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isPostfixExpression = function () {
return this.isExpression();
};
FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isUnaryExpression = function () {
return this.isExpression();
};
return FixedWidthTokenWithLeadingAndTrailingTrivia;
})();
Syntax.FixedWidthTokenWithLeadingAndTrailingTrivia = FixedWidthTokenWithLeadingAndTrailingTrivia;
function collectTokenTextElements(token, elements) {
token.leadingTrivia().collectTextElements(elements);
elements.push(token.text());
token.trailingTrivia().collectTextElements(elements);
}
function getTriviaWidth(value) {
return value >>> 2 /* TriviaFullWidthShift */;
}
function hasTriviaComment(value) {
return (value & 2 /* TriviaCommentMask */) !== 0;
}
function hasTriviaNewLine(value) {
return (value & 1 /* TriviaNewLineMask */) !== 0;
}
})(TypeScript.Syntax || (TypeScript.Syntax = {}));
var Syntax = TypeScript.Syntax;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (Syntax) {
function isExpression(token) {
switch (token.tokenKind) {
case 11 /* IdentifierName */:
case 12 /* RegularExpressionLiteral */:
case 13 /* NumericLiteral */:
case 14 /* StringLiteral */:
case 24 /* FalseKeyword */:
case 32 /* NullKeyword */:
case 35 /* ThisKeyword */:
case 37 /* TrueKeyword */:
case 50 /* SuperKeyword */:
return true;
}
return false;
}
Syntax.isExpression = isExpression;
function realizeToken(token) {
return new RealizedToken(token.tokenKind, token.leadingTrivia(), token.text(), token.value(), token.valueText(), token.trailingTrivia());
}
Syntax.realizeToken = realizeToken;
function convertToIdentifierName(token) {
TypeScript.Debug.assert(TypeScript.SyntaxFacts.isAnyKeyword(token.tokenKind));
return new RealizedToken(11 /* IdentifierName */, token.leadingTrivia(), token.text(), token.text(), token.text(), token.trailingTrivia());
}
Syntax.convertToIdentifierName = convertToIdentifierName;
function tokenToJSON(token) {
var result = {};
for (var name in TypeScript.SyntaxKind) {
if (TypeScript.SyntaxKind[name] === token.kind()) {
result.kind = name;
break;
}
}
result.width = token.width();
if (token.fullWidth() !== token.width()) {
result.fullWidth = token.fullWidth();
}
result.text = token.text();
var value = token.value();
if (value !== null) {
result.value = value;
result.valueText = token.valueText();
}
if (token.hasLeadingTrivia()) {
result.hasLeadingTrivia = true;
}
if (token.hasLeadingComment()) {
result.hasLeadingComment = true;
}
if (token.hasLeadingNewLine()) {
result.hasLeadingNewLine = true;
}
if (token.hasLeadingSkippedText()) {
result.hasLeadingSkippedText = true;
}
if (token.hasTrailingTrivia()) {
result.hasTrailingTrivia = true;
}
if (token.hasTrailingComment()) {
result.hasTrailingComment = true;
}
if (token.hasTrailingNewLine()) {
result.hasTrailingNewLine = true;
}
if (token.hasTrailingSkippedText()) {
result.hasTrailingSkippedText = true;
}
var trivia = token.leadingTrivia();
if (trivia.count() > 0) {
result.leadingTrivia = trivia;
}
trivia = token.trailingTrivia();
if (trivia.count() > 0) {
result.trailingTrivia = trivia;
}
return result;
}
Syntax.tokenToJSON = tokenToJSON;
function value(token) {
return value1(token.tokenKind, token.text());
}
Syntax.value = value;
function hexValue(text, start, length) {
var intChar = 0;
for (var i = 0; i < length; i++) {
var ch2 = text.charCodeAt(start + i);
if (!TypeScript.CharacterInfo.isHexDigit(ch2)) {
break;
}
intChar = (intChar << 4) + TypeScript.CharacterInfo.hexValue(ch2);
}
return intChar;
}
var characterArray = [];
function convertEscapes(text) {
characterArray.length = 0;
var result = "";
for (var i = 0, n = text.length; i < n; i++) {
var ch = text.charCodeAt(i);
if (ch === 92 /* backslash */) {
i++;
if (i < n) {
ch = text.charCodeAt(i);
switch (ch) {
case 48 /* _0 */:
characterArray.push(0 /* nullCharacter */);
continue;
case 98 /* b */:
characterArray.push(8 /* backspace */);
continue;
case 102 /* f */:
characterArray.push(12 /* formFeed */);
continue;
case 110 /* n */:
characterArray.push(10 /* lineFeed */);
continue;
case 114 /* r */:
characterArray.push(13 /* carriageReturn */);
continue;
case 116 /* t */:
characterArray.push(9 /* tab */);
continue;
case 118 /* v */:
characterArray.push(11 /* verticalTab */);
continue;
case 120 /* x */:
characterArray.push(hexValue(text, i + 1, 2));
i += 2;
continue;
case 117 /* u */:
characterArray.push(hexValue(text, i + 1, 4));
i += 4;
continue;
case 13 /* carriageReturn */:
var nextIndex = i + 1;
if (nextIndex < text.length && text.charCodeAt(nextIndex) === 10 /* lineFeed */) {
i++;
}
continue;
case 10 /* lineFeed */:
case 8233 /* paragraphSeparator */:
case 8232 /* lineSeparator */:
continue;
default:
}
}
}
characterArray.push(ch);
if (i && !(i % 1024)) {
result = result.concat(String.fromCharCode.apply(null, characterArray));
characterArray.length = 0;
}
}
if (characterArray.length) {
result = result.concat(String.fromCharCode.apply(null, characterArray));
}
return result;
}
function massageEscapes(text) {
return text.indexOf("\\") >= 0 ? convertEscapes(text) : text;
}
Syntax.massageEscapes = massageEscapes;
function value1(kind, text) {
if (kind === 11 /* IdentifierName */) {
return massageEscapes(text);
}
switch (kind) {
case 37 /* TrueKeyword */:
return true;
case 24 /* FalseKeyword */:
return false;
case 32 /* NullKeyword */:
return null;
}
if (TypeScript.SyntaxFacts.isAnyKeyword(kind) || TypeScript.SyntaxFacts.isAnyPunctuation(kind)) {
return TypeScript.SyntaxFacts.getText(kind);
}
if (kind === 13 /* NumericLiteral */) {
return TypeScript.IntegerUtilities.isHexInteger(text) ? parseInt(text, 16) : parseFloat(text);
} else if (kind === 14 /* StringLiteral */) {
if (text.length > 1 && text.charCodeAt(text.length - 1) === text.charCodeAt(0)) {
return massageEscapes(text.substr(1, text.length - 2));
} else {
return massageEscapes(text.substr(1));
}
} else if (kind === 12 /* RegularExpressionLiteral */) {
return regularExpressionValue(text);
} else if (kind === 10 /* EndOfFileToken */ || kind === 9 /* ErrorToken */) {
return null;
} else {
throw TypeScript.Errors.invalidOperation();
}
}
function regularExpressionValue(text) {
try {
var lastSlash = text.lastIndexOf("/");
var body = text.substring(1, lastSlash);
var flags = text.substring(lastSlash + 1);
return new RegExp(body, flags);
} catch (e) {
return null;
}
}
function valueText1(kind, text) {
var value = value1(kind, text);
return value === null ? "" : value.toString();
}
function valueText(token) {
var value = token.value();
return value === null ? "" : value.toString();
}
Syntax.valueText = valueText;
var EmptyToken = (function () {
function EmptyToken(kind) {
this.tokenKind = kind;
}
EmptyToken.prototype.clone = function () {
return new EmptyToken(this.tokenKind);
};
EmptyToken.prototype.kind = function () {
return this.tokenKind;
};
EmptyToken.prototype.isToken = function () {
return true;
};
EmptyToken.prototype.isNode = function () {
return false;
};
EmptyToken.prototype.isList = function () {
return false;
};
EmptyToken.prototype.isSeparatedList = function () {
return false;
};
EmptyToken.prototype.childCount = function () {
return 0;
};
EmptyToken.prototype.childAt = function (index) {
throw TypeScript.Errors.argumentOutOfRange("index");
};
EmptyToken.prototype.toJSON = function (key) {
return tokenToJSON(this);
};
EmptyToken.prototype.accept = function (visitor) {
return visitor.visitToken(this);
};
EmptyToken.prototype.findTokenInternal = function (parent, position, fullStart) {
return new TypeScript.PositionedToken(parent, this, fullStart);
};
EmptyToken.prototype.firstToken = function () {
return this;
};
EmptyToken.prototype.lastToken = function () {
return this;
};
EmptyToken.prototype.isTypeScriptSpecific = function () {
return false;
};
EmptyToken.prototype.isIncrementallyUnusable = function () {
return true;
};
EmptyToken.prototype.fullWidth = function () {
return 0;
};
EmptyToken.prototype.width = function () {
return 0;
};
EmptyToken.prototype.text = function () {
return "";
};
EmptyToken.prototype.fullText = function () {
return "";
};
EmptyToken.prototype.value = function () {
return null;
};
EmptyToken.prototype.valueText = function () {
return "";
};
EmptyToken.prototype.hasLeadingTrivia = function () {
return false;
};
EmptyToken.prototype.hasLeadingComment = function () {
return false;
};
EmptyToken.prototype.hasLeadingNewLine = function () {
return false;
};
EmptyToken.prototype.hasLeadingSkippedText = function () {
return false;
};
EmptyToken.prototype.leadingTriviaWidth = function () {
return 0;
};
EmptyToken.prototype.hasTrailingTrivia = function () {
return false;
};
EmptyToken.prototype.hasTrailingComment = function () {
return false;
};
EmptyToken.prototype.hasTrailingNewLine = function () {
return false;
};
EmptyToken.prototype.hasTrailingSkippedText = function () {
return false;
};
EmptyToken.prototype.hasSkippedToken = function () {
return false;
};
EmptyToken.prototype.trailingTriviaWidth = function () {
return 0;
};
EmptyToken.prototype.leadingTrivia = function () {
return TypeScript.Syntax.emptyTriviaList;
};
EmptyToken.prototype.trailingTrivia = function () {
return TypeScript.Syntax.emptyTriviaList;
};
EmptyToken.prototype.realize = function () {
return realizeToken(this);
};
EmptyToken.prototype.collectTextElements = function (elements) {
};
EmptyToken.prototype.withLeadingTrivia = function (leadingTrivia) {
return this.realize().withLeadingTrivia(leadingTrivia);
};
EmptyToken.prototype.withTrailingTrivia = function (trailingTrivia) {
return this.realize().withTrailingTrivia(trailingTrivia);
};
EmptyToken.prototype.isExpression = function () {
return isExpression(this);
};
EmptyToken.prototype.isPrimaryExpression = function () {
return this.isExpression();
};
EmptyToken.prototype.isMemberExpression = function () {
return this.isExpression();
};
EmptyToken.prototype.isPostfixExpression = function () {
return this.isExpression();
};
EmptyToken.prototype.isUnaryExpression = function () {
return this.isExpression();
};
return EmptyToken;
})();
function emptyToken(kind) {
return new EmptyToken(kind);
}
Syntax.emptyToken = emptyToken;
var RealizedToken = (function () {
function RealizedToken(tokenKind, leadingTrivia, text, value, valueText, trailingTrivia) {
this.tokenKind = tokenKind;
this._leadingTrivia = leadingTrivia;
this._text = text;
this._value = value;
this._valueText = valueText;
this._trailingTrivia = trailingTrivia;
}
RealizedToken.prototype.clone = function () {
return new RealizedToken(this.tokenKind, this._leadingTrivia, this._text, this._value, this._valueText, this._trailingTrivia);
};
RealizedToken.prototype.kind = function () {
return this.tokenKind;
};
RealizedToken.prototype.toJSON = function (key) {
return tokenToJSON(this);
};
RealizedToken.prototype.firstToken = function () {
return this;
};
RealizedToken.prototype.lastToken = function () {
return this;
};
RealizedToken.prototype.isTypeScriptSpecific = function () {
return false;
};
RealizedToken.prototype.isIncrementallyUnusable = function () {
return true;
};
RealizedToken.prototype.accept = function (visitor) {
return visitor.visitToken(this);
};
RealizedToken.prototype.childCount = function () {
return 0;
};
RealizedToken.prototype.childAt = function (index) {
throw TypeScript.Errors.argumentOutOfRange("index");
};
RealizedToken.prototype.isToken = function () {
return true;
};
RealizedToken.prototype.isNode = function () {
return false;
};
RealizedToken.prototype.isList = function () {
return false;
};
RealizedToken.prototype.isSeparatedList = function () {
return false;
};
RealizedToken.prototype.isTrivia = function () {
return false;
};
RealizedToken.prototype.isTriviaList = function () {
return false;
};
RealizedToken.prototype.fullWidth = function () {
return this._leadingTrivia.fullWidth() + this.width() + this._trailingTrivia.fullWidth();
};
RealizedToken.prototype.width = function () {
return this.text().length;
};
RealizedToken.prototype.text = function () {
return this._text;
};
RealizedToken.prototype.fullText = function () {
return this._leadingTrivia.fullText() + this.text() + this._trailingTrivia.fullText();
};
RealizedToken.prototype.value = function () {
return this._value;
};
RealizedToken.prototype.valueText = function () {
return this._valueText;
};
RealizedToken.prototype.hasLeadingTrivia = function () {
return this._leadingTrivia.count() > 0;
};
RealizedToken.prototype.hasLeadingComment = function () {
return this._leadingTrivia.hasComment();
};
RealizedToken.prototype.hasLeadingNewLine = function () {
return this._leadingTrivia.hasNewLine();
};
RealizedToken.prototype.hasLeadingSkippedText = function () {
return this._leadingTrivia.hasSkippedToken();
};
RealizedToken.prototype.leadingTriviaWidth = function () {
return this._leadingTrivia.fullWidth();
};
RealizedToken.prototype.hasTrailingTrivia = function () {
return this._trailingTrivia.count() > 0;
};
RealizedToken.prototype.hasTrailingComment = function () {
return this._trailingTrivia.hasComment();
};
RealizedToken.prototype.hasTrailingNewLine = function () {
return this._trailingTrivia.hasNewLine();
};
RealizedToken.prototype.hasTrailingSkippedText = function () {
return this._trailingTrivia.hasSkippedToken();
};
RealizedToken.prototype.trailingTriviaWidth = function () {
return this._trailingTrivia.fullWidth();
};
RealizedToken.prototype.hasSkippedToken = function () {
return this.hasLeadingSkippedText() || this.hasTrailingSkippedText();
};
RealizedToken.prototype.leadingTrivia = function () {
return this._leadingTrivia;
};
RealizedToken.prototype.trailingTrivia = function () {
return this._trailingTrivia;
};
RealizedToken.prototype.findTokenInternal = function (parent, position, fullStart) {
return new TypeScript.PositionedToken(parent, this, fullStart);
};
RealizedToken.prototype.collectTextElements = function (elements) {
this.leadingTrivia().collectTextElements(elements);
elements.push(this.text());
this.trailingTrivia().collectTextElements(elements);
};
RealizedToken.prototype.withLeadingTrivia = function (leadingTrivia) {
return new RealizedToken(this.tokenKind, leadingTrivia, this._text, this._value, this._valueText, this._trailingTrivia);
};
RealizedToken.prototype.withTrailingTrivia = function (trailingTrivia) {
return new RealizedToken(this.tokenKind, this._leadingTrivia, this._text, this._value, this._valueText, trailingTrivia);
};
RealizedToken.prototype.isExpression = function () {
return isExpression(this);
};
RealizedToken.prototype.isPrimaryExpression = function () {
return this.isExpression();
};
RealizedToken.prototype.isMemberExpression = function () {
return this.isExpression();
};
RealizedToken.prototype.isPostfixExpression = function () {
return this.isExpression();
};
RealizedToken.prototype.isUnaryExpression = function () {
return this.isExpression();
};
return RealizedToken;
})();
function token(kind, info) {
if (typeof info === "undefined") { info = null; }
var text = (info !== null && info.text !== undefined) ? info.text : TypeScript.SyntaxFacts.getText(kind);
return new RealizedToken(kind, TypeScript.Syntax.triviaList(info === null ? null : info.leadingTrivia), text, value1(kind, text), valueText1(kind, text), TypeScript.Syntax.triviaList(info === null ? null : info.trailingTrivia));
}
Syntax.token = token;
function identifier(text, info) {
if (typeof info === "undefined") { info = null; }
info = info || {};
info.text = text;
return token(11 /* IdentifierName */, info);
}
Syntax.identifier = identifier;
})(TypeScript.Syntax || (TypeScript.Syntax = {}));
var Syntax = TypeScript.Syntax;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var SyntaxTokenReplacer = (function (_super) {
__extends(SyntaxTokenReplacer, _super);
function SyntaxTokenReplacer(token1, token2) {
_super.call(this);
this.token1 = token1;
this.token2 = token2;
}
SyntaxTokenReplacer.prototype.visitToken = function (token) {
if (token === this.token1) {
var result = this.token2;
this.token1 = null;
this.token2 = null;
return result;
}
return token;
};
SyntaxTokenReplacer.prototype.visitNode = function (node) {
if (this.token1 === null) {
return node;
}
return _super.prototype.visitNode.call(this, node);
};
SyntaxTokenReplacer.prototype.visitList = function (list) {
if (this.token1 === null) {
return list;
}
return _super.prototype.visitList.call(this, list);
};
SyntaxTokenReplacer.prototype.visitSeparatedList = function (list) {
if (this.token1 === null) {
return list;
}
return _super.prototype.visitSeparatedList.call(this, list);
};
return SyntaxTokenReplacer;
})(TypeScript.SyntaxRewriter);
TypeScript.SyntaxTokenReplacer = SyntaxTokenReplacer;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (Syntax) {
var AbstractTrivia = (function () {
function AbstractTrivia(_kind) {
this._kind = _kind;
}
AbstractTrivia.prototype.fullWidth = function () {
throw TypeScript.Errors.abstract();
};
AbstractTrivia.prototype.fullText = function () {
throw TypeScript.Errors.abstract();
};
AbstractTrivia.prototype.skippedToken = function () {
throw TypeScript.Errors.abstract();
};
AbstractTrivia.prototype.toJSON = function (key) {
var result = {};
for (var name in TypeScript.SyntaxKind) {
if (TypeScript.SyntaxKind[name] === this._kind) {
result.kind = name;
break;
}
}
if (this.isSkippedToken()) {
result.skippedToken = this.skippedToken();
} else {
result.text = this.fullText();
}
return result;
};
AbstractTrivia.prototype.kind = function () {
return this._kind;
};
AbstractTrivia.prototype.isWhitespace = function () {
return this.kind() === 4 /* WhitespaceTrivia */;
};
AbstractTrivia.prototype.isComment = function () {
return this.kind() === 7 /* SingleLineCommentTrivia */ || this.kind() === 6 /* MultiLineCommentTrivia */;
};
AbstractTrivia.prototype.isNewLine = function () {
return this.kind() === 5 /* NewLineTrivia */;
};
AbstractTrivia.prototype.isSkippedToken = function () {
return this.kind() === 8 /* SkippedTokenTrivia */;
};
AbstractTrivia.prototype.collectTextElements = function (elements) {
elements.push(this.fullText());
};
return AbstractTrivia;
})();
var NormalTrivia = (function (_super) {
__extends(NormalTrivia, _super);
function NormalTrivia(kind, _text) {
_super.call(this, kind);
this._text = _text;
}
NormalTrivia.prototype.fullWidth = function () {
return this.fullText().length;
};
NormalTrivia.prototype.fullText = function () {
return this._text;
};
NormalTrivia.prototype.skippedToken = function () {
throw TypeScript.Errors.invalidOperation();
};
return NormalTrivia;
})(AbstractTrivia);
var SkippedTokenTrivia = (function (_super) {
__extends(SkippedTokenTrivia, _super);
function SkippedTokenTrivia(_skippedToken) {
_super.call(this, 8 /* SkippedTokenTrivia */);
this._skippedToken = _skippedToken;
}
SkippedTokenTrivia.prototype.fullWidth = function () {
return this.fullText().length;
};
SkippedTokenTrivia.prototype.fullText = function () {
return this.skippedToken().fullText();
};
SkippedTokenTrivia.prototype.skippedToken = function () {
return this._skippedToken;
};
return SkippedTokenTrivia;
})(AbstractTrivia);
var DeferredTrivia = (function (_super) {
__extends(DeferredTrivia, _super);
function DeferredTrivia(kind, _text, _fullStart, _fullWidth) {
_super.call(this, kind);
this._text = _text;
this._fullStart = _fullStart;
this._fullWidth = _fullWidth;
this._fullText = null;
}
DeferredTrivia.prototype.fullWidth = function () {
return this._fullWidth;
};
DeferredTrivia.prototype.fullText = function () {
if (!this._fullText) {
this._fullText = this._text.substr(this._fullStart, this._fullWidth, false);
this._text = null;
}
return this._fullText;
};
DeferredTrivia.prototype.skippedToken = function () {
throw TypeScript.Errors.invalidOperation();
};
return DeferredTrivia;
})(AbstractTrivia);
function deferredTrivia(kind, text, fullStart, fullWidth) {
return new DeferredTrivia(kind, text, fullStart, fullWidth);
}
Syntax.deferredTrivia = deferredTrivia;
function trivia(kind, text) {
return new NormalTrivia(kind, text);
}
Syntax.trivia = trivia;
function skippedTokenTrivia(token) {
TypeScript.Debug.assert(!token.hasLeadingTrivia());
TypeScript.Debug.assert(!token.hasTrailingTrivia());
TypeScript.Debug.assert(token.fullWidth() > 0);
return new SkippedTokenTrivia(token);
}
Syntax.skippedTokenTrivia = skippedTokenTrivia;
function spaces(count) {
return trivia(4 /* WhitespaceTrivia */, TypeScript.StringUtilities.repeat(" ", count));
}
Syntax.spaces = spaces;
function whitespace(text) {
return trivia(4 /* WhitespaceTrivia */, text);
}
Syntax.whitespace = whitespace;
function multiLineComment(text) {
return trivia(6 /* MultiLineCommentTrivia */, text);
}
Syntax.multiLineComment = multiLineComment;
function singleLineComment(text) {
return trivia(7 /* SingleLineCommentTrivia */, text);
}
Syntax.singleLineComment = singleLineComment;
Syntax.spaceTrivia = spaces(1);
Syntax.lineFeedTrivia = trivia(5 /* NewLineTrivia */, "\n");
Syntax.carriageReturnTrivia = trivia(5 /* NewLineTrivia */, "\r");
Syntax.carriageReturnLineFeedTrivia = trivia(5 /* NewLineTrivia */, "\r\n");
function splitMultiLineCommentTriviaIntoMultipleLines(trivia) {
var result = [];
var triviaText = trivia.fullText();
var currentIndex = 0;
for (var i = 0; i < triviaText.length; i++) {
var ch = triviaText.charCodeAt(i);
var isCarriageReturnLineFeed = false;
switch (ch) {
case 13 /* carriageReturn */:
if (i < triviaText.length - 1 && triviaText.charCodeAt(i + 1) === 10 /* lineFeed */) {
i++;
}
case 10 /* lineFeed */:
case 8233 /* paragraphSeparator */:
case 8232 /* lineSeparator */:
result.push(triviaText.substring(currentIndex, i + 1));
currentIndex = i + 1;
continue;
}
}
result.push(triviaText.substring(currentIndex));
return result;
}
Syntax.splitMultiLineCommentTriviaIntoMultipleLines = splitMultiLineCommentTriviaIntoMultipleLines;
})(TypeScript.Syntax || (TypeScript.Syntax = {}));
var Syntax = TypeScript.Syntax;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (Syntax) {
Syntax.emptyTriviaList = {
kind: function () {
return 3 /* TriviaList */;
},
count: function () {
return 0;
},
syntaxTriviaAt: function (index) {
throw TypeScript.Errors.argumentOutOfRange("index");
},
last: function () {
throw TypeScript.Errors.argumentOutOfRange("index");
},
fullWidth: function () {
return 0;
},
fullText: function () {
return "";
},
hasComment: function () {
return false;
},
hasNewLine: function () {
return false;
},
hasSkippedToken: function () {
return false;
},
toJSON: function (key) {
return [];
},
collectTextElements: function (elements) {
},
toArray: function () {
return [];
},
concat: function (trivia) {
return trivia;
}
};
function concatTrivia(list1, list2) {
if (list1.count() === 0) {
return list2;
}
if (list2.count() === 0) {
return list1;
}
var trivia = list1.toArray();
trivia.push.apply(trivia, list2.toArray());
return triviaList(trivia);
}
function isComment(trivia) {
return trivia.kind() === 6 /* MultiLineCommentTrivia */ || trivia.kind() === 7 /* SingleLineCommentTrivia */;
}
var SingletonSyntaxTriviaList = (function () {
function SingletonSyntaxTriviaList(item) {
this.item = item;
}
SingletonSyntaxTriviaList.prototype.kind = function () {
return 3 /* TriviaList */;
};
SingletonSyntaxTriviaList.prototype.count = function () {
return 1;
};
SingletonSyntaxTriviaList.prototype.syntaxTriviaAt = function (index) {
if (index !== 0) {
throw TypeScript.Errors.argumentOutOfRange("index");
}
return this.item;
};
SingletonSyntaxTriviaList.prototype.last = function () {
return this.item;
};
SingletonSyntaxTriviaList.prototype.fullWidth = function () {
return this.item.fullWidth();
};
SingletonSyntaxTriviaList.prototype.fullText = function () {
return this.item.fullText();
};
SingletonSyntaxTriviaList.prototype.hasComment = function () {
return isComment(this.item);
};
SingletonSyntaxTriviaList.prototype.hasNewLine = function () {
return this.item.kind() === 5 /* NewLineTrivia */;
};
SingletonSyntaxTriviaList.prototype.hasSkippedToken = function () {
return this.item.kind() === 8 /* SkippedTokenTrivia */;
};
SingletonSyntaxTriviaList.prototype.toJSON = function (key) {
return [this.item];
};
SingletonSyntaxTriviaList.prototype.collectTextElements = function (elements) {
this.item.collectTextElements(elements);
};
SingletonSyntaxTriviaList.prototype.toArray = function () {
return [this.item];
};
SingletonSyntaxTriviaList.prototype.concat = function (trivia) {
return concatTrivia(this, trivia);
};
return SingletonSyntaxTriviaList;
})();
var NormalSyntaxTriviaList = (function () {
function NormalSyntaxTriviaList(trivia) {
this.trivia = trivia;
}
NormalSyntaxTriviaList.prototype.kind = function () {
return 3 /* TriviaList */;
};
NormalSyntaxTriviaList.prototype.count = function () {
return this.trivia.length;
};
NormalSyntaxTriviaList.prototype.syntaxTriviaAt = function (index) {
if (index < 0 || index >= this.trivia.length) {
throw TypeScript.Errors.argumentOutOfRange("index");
}
return this.trivia[index];
};
NormalSyntaxTriviaList.prototype.last = function () {
return this.trivia[this.trivia.length - 1];
};
NormalSyntaxTriviaList.prototype.fullWidth = function () {
return TypeScript.ArrayUtilities.sum(this.trivia, function (t) {
return t.fullWidth();
});
};
NormalSyntaxTriviaList.prototype.fullText = function () {
var result = "";
for (var i = 0, n = this.trivia.length; i < n; i++) {
result += this.trivia[i].fullText();
}
return result;
};
NormalSyntaxTriviaList.prototype.hasComment = function () {
for (var i = 0; i < this.trivia.length; i++) {
if (isComment(this.trivia[i])) {
return true;
}
}
return false;
};
NormalSyntaxTriviaList.prototype.hasNewLine = function () {
for (var i = 0; i < this.trivia.length; i++) {
if (this.trivia[i].kind() === 5 /* NewLineTrivia */) {
return true;
}
}
return false;
};
NormalSyntaxTriviaList.prototype.hasSkippedToken = function () {
for (var i = 0; i < this.trivia.length; i++) {
if (this.trivia[i].kind() === 8 /* SkippedTokenTrivia */) {
return true;
}
}
return false;
};
NormalSyntaxTriviaList.prototype.toJSON = function (key) {
return this.trivia;
};
NormalSyntaxTriviaList.prototype.collectTextElements = function (elements) {
for (var i = 0; i < this.trivia.length; i++) {
this.trivia[i].collectTextElements(elements);
}
};
NormalSyntaxTriviaList.prototype.toArray = function () {
return this.trivia.slice(0);
};
NormalSyntaxTriviaList.prototype.concat = function (trivia) {
return concatTrivia(this, trivia);
};
return NormalSyntaxTriviaList;
})();
function triviaList(trivia) {
if (trivia === undefined || trivia === null || trivia.length === 0) {
return Syntax.emptyTriviaList;
}
if (trivia.length === 1) {
return new SingletonSyntaxTriviaList(trivia[0]);
}
return new NormalSyntaxTriviaList(trivia);
}
Syntax.triviaList = triviaList;
Syntax.spaceTriviaList = triviaList([TypeScript.Syntax.spaceTrivia]);
})(TypeScript.Syntax || (TypeScript.Syntax = {}));
var Syntax = TypeScript.Syntax;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var SyntaxUtilities = (function () {
function SyntaxUtilities() {
}
SyntaxUtilities.isAngleBracket = function (positionedElement) {
var element = positionedElement.element();
var parent = positionedElement.parentElement();
if (parent !== null && (element.kind() === 80 /* LessThanToken */ || element.kind() === 81 /* GreaterThanToken */)) {
switch (parent.kind()) {
case 228 /* TypeArgumentList */:
case 229 /* TypeParameterList */:
case 220 /* CastExpression */:
return true;
}
}
return false;
};
SyntaxUtilities.getToken = function (list, kind) {
for (var i = 0, n = list.childCount(); i < n; i++) {
var token = list.childAt(i);
if (token.tokenKind === kind) {
return token;
}
}
return null;
};
SyntaxUtilities.containsToken = function (list, kind) {
return SyntaxUtilities.getToken(list, kind) !== null;
};
SyntaxUtilities.hasExportKeyword = function (moduleElement) {
return SyntaxUtilities.getExportKeyword(moduleElement) !== null;
};
SyntaxUtilities.getExportKeyword = function (moduleElement) {
switch (moduleElement.kind()) {
case 130 /* ModuleDeclaration */:
case 131 /* ClassDeclaration */:
case 129 /* FunctionDeclaration */:
case 148 /* VariableStatement */:
case 132 /* EnumDeclaration */:
case 128 /* InterfaceDeclaration */:
case 133 /* ImportDeclaration */:
return SyntaxUtilities.getToken(moduleElement.modifiers, 47 /* ExportKeyword */);
default:
return null;
}
};
SyntaxUtilities.isAmbientDeclarationSyntax = function (positionNode) {
if (!positionNode) {
return false;
}
var node = positionNode.node();
switch (node.kind()) {
case 130 /* ModuleDeclaration */:
case 131 /* ClassDeclaration */:
case 129 /* FunctionDeclaration */:
case 148 /* VariableStatement */:
case 132 /* EnumDeclaration */:
if (SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */)) {
return true;
}
case 133 /* ImportDeclaration */:
case 137 /* ConstructorDeclaration */:
case 135 /* MemberFunctionDeclaration */:
case 139 /* GetAccessor */:
case 140 /* SetAccessor */:
case 136 /* MemberVariableDeclaration */:
if (node.isClassElement() || node.isModuleElement()) {
return SyntaxUtilities.isAmbientDeclarationSyntax(positionNode.containingNode());
}
case 243 /* EnumElement */:
return SyntaxUtilities.isAmbientDeclarationSyntax(positionNode.containingNode().containingNode());
default:
return SyntaxUtilities.isAmbientDeclarationSyntax(positionNode.containingNode());
}
};
return SyntaxUtilities;
})();
TypeScript.SyntaxUtilities = SyntaxUtilities;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var SyntaxVisitor = (function () {
function SyntaxVisitor() {
}
SyntaxVisitor.prototype.defaultVisit = function (node) {
return null;
};
SyntaxVisitor.prototype.visitToken = function (token) {
return this.defaultVisit(token);
};
SyntaxVisitor.prototype.visitSourceUnit = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitExternalModuleReference = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitModuleNameModuleReference = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitImportDeclaration = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitExportAssignment = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitClassDeclaration = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitInterfaceDeclaration = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitHeritageClause = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitModuleDeclaration = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitFunctionDeclaration = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitVariableStatement = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitVariableDeclaration = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitVariableDeclarator = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitEqualsValueClause = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitPrefixUnaryExpression = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitArrayLiteralExpression = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitOmittedExpression = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitParenthesizedExpression = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitSimpleArrowFunctionExpression = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitParenthesizedArrowFunctionExpression = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitQualifiedName = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitTypeArgumentList = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitConstructorType = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitFunctionType = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitObjectType = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitArrayType = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitGenericType = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitTypeQuery = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitTypeAnnotation = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitBlock = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitParameter = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitMemberAccessExpression = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitPostfixUnaryExpression = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitElementAccessExpression = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitInvocationExpression = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitArgumentList = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitBinaryExpression = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitConditionalExpression = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitConstructSignature = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitMethodSignature = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitIndexSignature = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitPropertySignature = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitCallSignature = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitParameterList = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitTypeParameterList = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitTypeParameter = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitConstraint = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitElseClause = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitIfStatement = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitExpressionStatement = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitConstructorDeclaration = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitMemberFunctionDeclaration = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitGetAccessor = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitSetAccessor = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitMemberVariableDeclaration = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitIndexMemberDeclaration = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitThrowStatement = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitReturnStatement = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitObjectCreationExpression = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitSwitchStatement = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitCaseSwitchClause = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitDefaultSwitchClause = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitBreakStatement = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitContinueStatement = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitForStatement = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitForInStatement = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitWhileStatement = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitWithStatement = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitEnumDeclaration = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitEnumElement = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitCastExpression = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitObjectLiteralExpression = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitSimplePropertyAssignment = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitFunctionPropertyAssignment = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitFunctionExpression = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitEmptyStatement = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitTryStatement = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitCatchClause = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitFinallyClause = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitLabeledStatement = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitDoStatement = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitTypeOfExpression = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitDeleteExpression = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitVoidExpression = function (node) {
return this.defaultVisit(node);
};
SyntaxVisitor.prototype.visitDebuggerStatement = function (node) {
return this.defaultVisit(node);
};
return SyntaxVisitor;
})();
TypeScript.SyntaxVisitor = SyntaxVisitor;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var SyntaxWalker = (function () {
function SyntaxWalker() {
}
SyntaxWalker.prototype.visitToken = function (token) {
};
SyntaxWalker.prototype.visitNode = function (node) {
node.accept(this);
};
SyntaxWalker.prototype.visitNodeOrToken = function (nodeOrToken) {
if (nodeOrToken.isToken()) {
this.visitToken(nodeOrToken);
} else {
this.visitNode(nodeOrToken);
}
};
SyntaxWalker.prototype.visitOptionalToken = function (token) {
if (token === null) {
return;
}
this.visitToken(token);
};
SyntaxWalker.prototype.visitOptionalNode = function (node) {
if (node === null) {
return;
}
this.visitNode(node);
};
SyntaxWalker.prototype.visitOptionalNodeOrToken = function (nodeOrToken) {
if (nodeOrToken === null) {
return;
}
this.visitNodeOrToken(nodeOrToken);
};
SyntaxWalker.prototype.visitList = function (list) {
for (var i = 0, n = list.childCount(); i < n; i++) {
this.visitNodeOrToken(list.childAt(i));
}
};
SyntaxWalker.prototype.visitSeparatedList = function (list) {
for (var i = 0, n = list.childCount(); i < n; i++) {
var item = list.childAt(i);
this.visitNodeOrToken(item);
}
};
SyntaxWalker.prototype.visitSourceUnit = function (node) {
this.visitList(node.moduleElements);
this.visitToken(node.endOfFileToken);
};
SyntaxWalker.prototype.visitExternalModuleReference = function (node) {
this.visitToken(node.requireKeyword);
this.visitToken(node.openParenToken);
this.visitToken(node.stringLiteral);
this.visitToken(node.closeParenToken);
};
SyntaxWalker.prototype.visitModuleNameModuleReference = function (node) {
this.visitNodeOrToken(node.moduleName);
};
SyntaxWalker.prototype.visitImportDeclaration = function (node) {
this.visitList(node.modifiers);
this.visitToken(node.importKeyword);
this.visitToken(node.identifier);
this.visitToken(node.equalsToken);
this.visitNodeOrToken(node.moduleReference);
this.visitToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitExportAssignment = function (node) {
this.visitToken(node.exportKeyword);
this.visitToken(node.equalsToken);
this.visitToken(node.identifier);
this.visitToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitClassDeclaration = function (node) {
this.visitList(node.modifiers);
this.visitToken(node.classKeyword);
this.visitToken(node.identifier);
this.visitOptionalNode(node.typeParameterList);
this.visitList(node.heritageClauses);
this.visitToken(node.openBraceToken);
this.visitList(node.classElements);
this.visitToken(node.closeBraceToken);
};
SyntaxWalker.prototype.visitInterfaceDeclaration = function (node) {
this.visitList(node.modifiers);
this.visitToken(node.interfaceKeyword);
this.visitToken(node.identifier);
this.visitOptionalNode(node.typeParameterList);
this.visitList(node.heritageClauses);
this.visitNode(node.body);
};
SyntaxWalker.prototype.visitHeritageClause = function (node) {
this.visitToken(node.extendsOrImplementsKeyword);
this.visitSeparatedList(node.typeNames);
};
SyntaxWalker.prototype.visitModuleDeclaration = function (node) {
this.visitList(node.modifiers);
this.visitToken(node.moduleKeyword);
this.visitOptionalNodeOrToken(node.name);
this.visitOptionalToken(node.stringLiteral);
this.visitToken(node.openBraceToken);
this.visitList(node.moduleElements);
this.visitToken(node.closeBraceToken);
};
SyntaxWalker.prototype.visitFunctionDeclaration = function (node) {
this.visitList(node.modifiers);
this.visitToken(node.functionKeyword);
this.visitToken(node.identifier);
this.visitNode(node.callSignature);
this.visitOptionalNode(node.block);
this.visitOptionalToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitVariableStatement = function (node) {
this.visitList(node.modifiers);
this.visitNode(node.variableDeclaration);
this.visitToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitVariableDeclaration = function (node) {
this.visitToken(node.varKeyword);
this.visitSeparatedList(node.variableDeclarators);
};
SyntaxWalker.prototype.visitVariableDeclarator = function (node) {
this.visitToken(node.propertyName);
this.visitOptionalNode(node.typeAnnotation);
this.visitOptionalNode(node.equalsValueClause);
};
SyntaxWalker.prototype.visitEqualsValueClause = function (node) {
this.visitToken(node.equalsToken);
this.visitNodeOrToken(node.value);
};
SyntaxWalker.prototype.visitPrefixUnaryExpression = function (node) {
this.visitToken(node.operatorToken);
this.visitNodeOrToken(node.operand);
};
SyntaxWalker.prototype.visitArrayLiteralExpression = function (node) {
this.visitToken(node.openBracketToken);
this.visitSeparatedList(node.expressions);
this.visitToken(node.closeBracketToken);
};
SyntaxWalker.prototype.visitOmittedExpression = function (node) {
};
SyntaxWalker.prototype.visitParenthesizedExpression = function (node) {
this.visitToken(node.openParenToken);
this.visitNodeOrToken(node.expression);
this.visitToken(node.closeParenToken);
};
SyntaxWalker.prototype.visitSimpleArrowFunctionExpression = function (node) {
this.visitToken(node.identifier);
this.visitToken(node.equalsGreaterThanToken);
this.visitOptionalNode(node.block);
this.visitOptionalNodeOrToken(node.expression);
};
SyntaxWalker.prototype.visitParenthesizedArrowFunctionExpression = function (node) {
this.visitNode(node.callSignature);
this.visitToken(node.equalsGreaterThanToken);
this.visitOptionalNode(node.block);
this.visitOptionalNodeOrToken(node.expression);
};
SyntaxWalker.prototype.visitQualifiedName = function (node) {
this.visitNodeOrToken(node.left);
this.visitToken(node.dotToken);
this.visitToken(node.right);
};
SyntaxWalker.prototype.visitTypeArgumentList = function (node) {
this.visitToken(node.lessThanToken);
this.visitSeparatedList(node.typeArguments);
this.visitToken(node.greaterThanToken);
};
SyntaxWalker.prototype.visitConstructorType = function (node) {
this.visitToken(node.newKeyword);
this.visitOptionalNode(node.typeParameterList);
this.visitNode(node.parameterList);
this.visitToken(node.equalsGreaterThanToken);
this.visitNodeOrToken(node.type);
};
SyntaxWalker.prototype.visitFunctionType = function (node) {
this.visitOptionalNode(node.typeParameterList);
this.visitNode(node.parameterList);
this.visitToken(node.equalsGreaterThanToken);
this.visitNodeOrToken(node.type);
};
SyntaxWalker.prototype.visitObjectType = function (node) {
this.visitToken(node.openBraceToken);
this.visitSeparatedList(node.typeMembers);
this.visitToken(node.closeBraceToken);
};
SyntaxWalker.prototype.visitArrayType = function (node) {
this.visitNodeOrToken(node.type);
this.visitToken(node.openBracketToken);
this.visitToken(node.closeBracketToken);
};
SyntaxWalker.prototype.visitGenericType = function (node) {
this.visitNodeOrToken(node.name);
this.visitNode(node.typeArgumentList);
};
SyntaxWalker.prototype.visitTypeQuery = function (node) {
this.visitToken(node.typeOfKeyword);
this.visitNodeOrToken(node.name);
};
SyntaxWalker.prototype.visitTypeAnnotation = function (node) {
this.visitToken(node.colonToken);
this.visitNodeOrToken(node.type);
};
SyntaxWalker.prototype.visitBlock = function (node) {
this.visitToken(node.openBraceToken);
this.visitList(node.statements);
this.visitToken(node.closeBraceToken);
};
SyntaxWalker.prototype.visitParameter = function (node) {
this.visitOptionalToken(node.dotDotDotToken);
this.visitList(node.modifiers);
this.visitToken(node.identifier);
this.visitOptionalToken(node.questionToken);
this.visitOptionalNode(node.typeAnnotation);
this.visitOptionalNode(node.equalsValueClause);
};
SyntaxWalker.prototype.visitMemberAccessExpression = function (node) {
this.visitNodeOrToken(node.expression);
this.visitToken(node.dotToken);
this.visitToken(node.name);
};
SyntaxWalker.prototype.visitPostfixUnaryExpression = function (node) {
this.visitNodeOrToken(node.operand);
this.visitToken(node.operatorToken);
};
SyntaxWalker.prototype.visitElementAccessExpression = function (node) {
this.visitNodeOrToken(node.expression);
this.visitToken(node.openBracketToken);
this.visitNodeOrToken(node.argumentExpression);
this.visitToken(node.closeBracketToken);
};
SyntaxWalker.prototype.visitInvocationExpression = function (node) {
this.visitNodeOrToken(node.expression);
this.visitNode(node.argumentList);
};
SyntaxWalker.prototype.visitArgumentList = function (node) {
this.visitOptionalNode(node.typeArgumentList);
this.visitToken(node.openParenToken);
this.visitSeparatedList(node.arguments);
this.visitToken(node.closeParenToken);
};
SyntaxWalker.prototype.visitBinaryExpression = function (node) {
this.visitNodeOrToken(node.left);
this.visitToken(node.operatorToken);
this.visitNodeOrToken(node.right);
};
SyntaxWalker.prototype.visitConditionalExpression = function (node) {
this.visitNodeOrToken(node.condition);
this.visitToken(node.questionToken);
this.visitNodeOrToken(node.whenTrue);
this.visitToken(node.colonToken);
this.visitNodeOrToken(node.whenFalse);
};
SyntaxWalker.prototype.visitConstructSignature = function (node) {
this.visitToken(node.newKeyword);
this.visitNode(node.callSignature);
};
SyntaxWalker.prototype.visitMethodSignature = function (node) {
this.visitToken(node.propertyName);
this.visitOptionalToken(node.questionToken);
this.visitNode(node.callSignature);
};
SyntaxWalker.prototype.visitIndexSignature = function (node) {
this.visitToken(node.openBracketToken);
this.visitNode(node.parameter);
this.visitToken(node.closeBracketToken);
this.visitOptionalNode(node.typeAnnotation);
};
SyntaxWalker.prototype.visitPropertySignature = function (node) {
this.visitToken(node.propertyName);
this.visitOptionalToken(node.questionToken);
this.visitOptionalNode(node.typeAnnotation);
};
SyntaxWalker.prototype.visitCallSignature = function (node) {
this.visitOptionalNode(node.typeParameterList);
this.visitNode(node.parameterList);
this.visitOptionalNode(node.typeAnnotation);
};
SyntaxWalker.prototype.visitParameterList = function (node) {
this.visitToken(node.openParenToken);
this.visitSeparatedList(node.parameters);
this.visitToken(node.closeParenToken);
};
SyntaxWalker.prototype.visitTypeParameterList = function (node) {
this.visitToken(node.lessThanToken);
this.visitSeparatedList(node.typeParameters);
this.visitToken(node.greaterThanToken);
};
SyntaxWalker.prototype.visitTypeParameter = function (node) {
this.visitToken(node.identifier);
this.visitOptionalNode(node.constraint);
};
SyntaxWalker.prototype.visitConstraint = function (node) {
this.visitToken(node.extendsKeyword);
this.visitNodeOrToken(node.type);
};
SyntaxWalker.prototype.visitElseClause = function (node) {
this.visitToken(node.elseKeyword);
this.visitNodeOrToken(node.statement);
};
SyntaxWalker.prototype.visitIfStatement = function (node) {
this.visitToken(node.ifKeyword);
this.visitToken(node.openParenToken);
this.visitNodeOrToken(node.condition);
this.visitToken(node.closeParenToken);
this.visitNodeOrToken(node.statement);
this.visitOptionalNode(node.elseClause);
};
SyntaxWalker.prototype.visitExpressionStatement = function (node) {
this.visitNodeOrToken(node.expression);
this.visitToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitConstructorDeclaration = function (node) {
this.visitList(node.modifiers);
this.visitToken(node.constructorKeyword);
this.visitNode(node.callSignature);
this.visitOptionalNode(node.block);
this.visitOptionalToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitMemberFunctionDeclaration = function (node) {
this.visitList(node.modifiers);
this.visitToken(node.propertyName);
this.visitNode(node.callSignature);
this.visitOptionalNode(node.block);
this.visitOptionalToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitGetAccessor = function (node) {
this.visitList(node.modifiers);
this.visitToken(node.getKeyword);
this.visitToken(node.propertyName);
this.visitNode(node.parameterList);
this.visitOptionalNode(node.typeAnnotation);
this.visitNode(node.block);
};
SyntaxWalker.prototype.visitSetAccessor = function (node) {
this.visitList(node.modifiers);
this.visitToken(node.setKeyword);
this.visitToken(node.propertyName);
this.visitNode(node.parameterList);
this.visitNode(node.block);
};
SyntaxWalker.prototype.visitMemberVariableDeclaration = function (node) {
this.visitList(node.modifiers);
this.visitNode(node.variableDeclarator);
this.visitToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitIndexMemberDeclaration = function (node) {
this.visitList(node.modifiers);
this.visitNode(node.indexSignature);
this.visitToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitThrowStatement = function (node) {
this.visitToken(node.throwKeyword);
this.visitNodeOrToken(node.expression);
this.visitToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitReturnStatement = function (node) {
this.visitToken(node.returnKeyword);
this.visitOptionalNodeOrToken(node.expression);
this.visitToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitObjectCreationExpression = function (node) {
this.visitToken(node.newKeyword);
this.visitNodeOrToken(node.expression);
this.visitOptionalNode(node.argumentList);
};
SyntaxWalker.prototype.visitSwitchStatement = function (node) {
this.visitToken(node.switchKeyword);
this.visitToken(node.openParenToken);
this.visitNodeOrToken(node.expression);
this.visitToken(node.closeParenToken);
this.visitToken(node.openBraceToken);
this.visitList(node.switchClauses);
this.visitToken(node.closeBraceToken);
};
SyntaxWalker.prototype.visitCaseSwitchClause = function (node) {
this.visitToken(node.caseKeyword);
this.visitNodeOrToken(node.expression);
this.visitToken(node.colonToken);
this.visitList(node.statements);
};
SyntaxWalker.prototype.visitDefaultSwitchClause = function (node) {
this.visitToken(node.defaultKeyword);
this.visitToken(node.colonToken);
this.visitList(node.statements);
};
SyntaxWalker.prototype.visitBreakStatement = function (node) {
this.visitToken(node.breakKeyword);
this.visitOptionalToken(node.identifier);
this.visitToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitContinueStatement = function (node) {
this.visitToken(node.continueKeyword);
this.visitOptionalToken(node.identifier);
this.visitToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitForStatement = function (node) {
this.visitToken(node.forKeyword);
this.visitToken(node.openParenToken);
this.visitOptionalNode(node.variableDeclaration);
this.visitOptionalNodeOrToken(node.initializer);
this.visitToken(node.firstSemicolonToken);
this.visitOptionalNodeOrToken(node.condition);
this.visitToken(node.secondSemicolonToken);
this.visitOptionalNodeOrToken(node.incrementor);
this.visitToken(node.closeParenToken);
this.visitNodeOrToken(node.statement);
};
SyntaxWalker.prototype.visitForInStatement = function (node) {
this.visitToken(node.forKeyword);
this.visitToken(node.openParenToken);
this.visitOptionalNode(node.variableDeclaration);
this.visitOptionalNodeOrToken(node.left);
this.visitToken(node.inKeyword);
this.visitNodeOrToken(node.expression);
this.visitToken(node.closeParenToken);
this.visitNodeOrToken(node.statement);
};
SyntaxWalker.prototype.visitWhileStatement = function (node) {
this.visitToken(node.whileKeyword);
this.visitToken(node.openParenToken);
this.visitNodeOrToken(node.condition);
this.visitToken(node.closeParenToken);
this.visitNodeOrToken(node.statement);
};
SyntaxWalker.prototype.visitWithStatement = function (node) {
this.visitToken(node.withKeyword);
this.visitToken(node.openParenToken);
this.visitNodeOrToken(node.condition);
this.visitToken(node.closeParenToken);
this.visitNodeOrToken(node.statement);
};
SyntaxWalker.prototype.visitEnumDeclaration = function (node) {
this.visitList(node.modifiers);
this.visitToken(node.enumKeyword);
this.visitToken(node.identifier);
this.visitToken(node.openBraceToken);
this.visitSeparatedList(node.enumElements);
this.visitToken(node.closeBraceToken);
};
SyntaxWalker.prototype.visitEnumElement = function (node) {
this.visitToken(node.propertyName);
this.visitOptionalNode(node.equalsValueClause);
};
SyntaxWalker.prototype.visitCastExpression = function (node) {
this.visitToken(node.lessThanToken);
this.visitNodeOrToken(node.type);
this.visitToken(node.greaterThanToken);
this.visitNodeOrToken(node.expression);
};
SyntaxWalker.prototype.visitObjectLiteralExpression = function (node) {
this.visitToken(node.openBraceToken);
this.visitSeparatedList(node.propertyAssignments);
this.visitToken(node.closeBraceToken);
};
SyntaxWalker.prototype.visitSimplePropertyAssignment = function (node) {
this.visitToken(node.propertyName);
this.visitToken(node.colonToken);
this.visitNodeOrToken(node.expression);
};
SyntaxWalker.prototype.visitFunctionPropertyAssignment = function (node) {
this.visitToken(node.propertyName);
this.visitNode(node.callSignature);
this.visitNode(node.block);
};
SyntaxWalker.prototype.visitFunctionExpression = function (node) {
this.visitToken(node.functionKeyword);
this.visitOptionalToken(node.identifier);
this.visitNode(node.callSignature);
this.visitNode(node.block);
};
SyntaxWalker.prototype.visitEmptyStatement = function (node) {
this.visitToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitTryStatement = function (node) {
this.visitToken(node.tryKeyword);
this.visitNode(node.block);
this.visitOptionalNode(node.catchClause);
this.visitOptionalNode(node.finallyClause);
};
SyntaxWalker.prototype.visitCatchClause = function (node) {
this.visitToken(node.catchKeyword);
this.visitToken(node.openParenToken);
this.visitToken(node.identifier);
this.visitOptionalNode(node.typeAnnotation);
this.visitToken(node.closeParenToken);
this.visitNode(node.block);
};
SyntaxWalker.prototype.visitFinallyClause = function (node) {
this.visitToken(node.finallyKeyword);
this.visitNode(node.block);
};
SyntaxWalker.prototype.visitLabeledStatement = function (node) {
this.visitToken(node.identifier);
this.visitToken(node.colonToken);
this.visitNodeOrToken(node.statement);
};
SyntaxWalker.prototype.visitDoStatement = function (node) {
this.visitToken(node.doKeyword);
this.visitNodeOrToken(node.statement);
this.visitToken(node.whileKeyword);
this.visitToken(node.openParenToken);
this.visitNodeOrToken(node.condition);
this.visitToken(node.closeParenToken);
this.visitToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitTypeOfExpression = function (node) {
this.visitToken(node.typeOfKeyword);
this.visitNodeOrToken(node.expression);
};
SyntaxWalker.prototype.visitDeleteExpression = function (node) {
this.visitToken(node.deleteKeyword);
this.visitNodeOrToken(node.expression);
};
SyntaxWalker.prototype.visitVoidExpression = function (node) {
this.visitToken(node.voidKeyword);
this.visitNodeOrToken(node.expression);
};
SyntaxWalker.prototype.visitDebuggerStatement = function (node) {
this.visitToken(node.debuggerKeyword);
this.visitToken(node.semicolonToken);
};
return SyntaxWalker;
})();
TypeScript.SyntaxWalker = SyntaxWalker;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var PositionTrackingWalker = (function (_super) {
__extends(PositionTrackingWalker, _super);
function PositionTrackingWalker() {
_super.apply(this, arguments);
this._position = 0;
}
PositionTrackingWalker.prototype.visitToken = function (token) {
this._position += token.fullWidth();
};
PositionTrackingWalker.prototype.position = function () {
return this._position;
};
PositionTrackingWalker.prototype.skip = function (element) {
this._position += element.fullWidth();
};
return PositionTrackingWalker;
})(TypeScript.SyntaxWalker);
TypeScript.PositionTrackingWalker = PositionTrackingWalker;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var SyntaxInformationMap = (function (_super) {
__extends(SyntaxInformationMap, _super);
function SyntaxInformationMap(trackParents, trackPreviousToken) {
_super.call(this);
this.trackParents = trackParents;
this.trackPreviousToken = trackPreviousToken;
this.tokenToInformation = TypeScript.Collections.createHashTable(TypeScript.Collections.DefaultHashTableCapacity, TypeScript.Collections.identityHashCode);
this.elementToPosition = TypeScript.Collections.createHashTable(TypeScript.Collections.DefaultHashTableCapacity, TypeScript.Collections.identityHashCode);
this._previousToken = null;
this._previousTokenInformation = null;
this._currentPosition = 0;
this._elementToParent = TypeScript.Collections.createHashTable(TypeScript.Collections.DefaultHashTableCapacity, TypeScript.Collections.identityHashCode);
this._parentStack = [];
this._parentStack.push(null);
}
SyntaxInformationMap.create = function (node, trackParents, trackPreviousToken) {
var map = new SyntaxInformationMap(trackParents, trackPreviousToken);
map.visitNode(node);
return map;
};
SyntaxInformationMap.prototype.visitNode = function (node) {
this.trackParents && this._elementToParent.add(node, TypeScript.ArrayUtilities.last(this._parentStack));
this.elementToPosition.add(node, this._currentPosition);
this.trackParents && this._parentStack.push(node);
_super.prototype.visitNode.call(this, node);
this.trackParents && this._parentStack.pop();
};
SyntaxInformationMap.prototype.visitToken = function (token) {
this.trackParents && this._elementToParent.add(token, TypeScript.ArrayUtilities.last(this._parentStack));
if (this.trackPreviousToken) {
var tokenInformation = {
previousToken: this._previousToken,
nextToken: null
};
if (this._previousTokenInformation !== null) {
this._previousTokenInformation.nextToken = token;
}
this._previousToken = token;
this._previousTokenInformation = tokenInformation;
this.tokenToInformation.add(token, tokenInformation);
}
this.elementToPosition.add(token, this._currentPosition);
this._currentPosition += token.fullWidth();
};
SyntaxInformationMap.prototype.parent = function (element) {
return this._elementToParent.get(element);
};
SyntaxInformationMap.prototype.fullStart = function (element) {
return this.elementToPosition.get(element);
};
SyntaxInformationMap.prototype.start = function (element) {
return this.fullStart(element) + element.leadingTriviaWidth();
};
SyntaxInformationMap.prototype.end = function (element) {
return this.start(element) + element.width();
};
SyntaxInformationMap.prototype.previousToken = function (token) {
return this.tokenInformation(token).previousToken;
};
SyntaxInformationMap.prototype.tokenInformation = function (token) {
return this.tokenToInformation.get(token);
};
SyntaxInformationMap.prototype.firstTokenInLineContainingToken = function (token) {
var current = token;
while (true) {
var information = this.tokenInformation(current);
if (this.isFirstTokenInLineWorker(information)) {
break;
}
current = information.previousToken;
}
return current;
};
SyntaxInformationMap.prototype.isFirstTokenInLine = function (token) {
var information = this.tokenInformation(token);
return this.isFirstTokenInLineWorker(information);
};
SyntaxInformationMap.prototype.isFirstTokenInLineWorker = function (information) {
return information.previousToken === null || information.previousToken.hasTrailingNewLine();
};
return SyntaxInformationMap;
})(TypeScript.SyntaxWalker);
TypeScript.SyntaxInformationMap = SyntaxInformationMap;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var SyntaxNodeInvariantsChecker = (function (_super) {
__extends(SyntaxNodeInvariantsChecker, _super);
function SyntaxNodeInvariantsChecker() {
_super.apply(this, arguments);
this.tokenTable = TypeScript.Collections.createHashTable(TypeScript.Collections.DefaultHashTableCapacity, TypeScript.Collections.identityHashCode);
}
SyntaxNodeInvariantsChecker.checkInvariants = function (node) {
node.accept(new SyntaxNodeInvariantsChecker());
};
SyntaxNodeInvariantsChecker.prototype.visitToken = function (token) {
this.tokenTable.add(token, token);
};
return SyntaxNodeInvariantsChecker;
})(TypeScript.SyntaxWalker);
TypeScript.SyntaxNodeInvariantsChecker = SyntaxNodeInvariantsChecker;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var DepthLimitedWalker = (function (_super) {
__extends(DepthLimitedWalker, _super);
function DepthLimitedWalker(maximumDepth) {
_super.call(this);
this._depth = 0;
this._maximumDepth = 0;
this._maximumDepth = maximumDepth;
}
DepthLimitedWalker.prototype.visitNode = function (node) {
if (this._depth < this._maximumDepth) {
this._depth++;
_super.prototype.visitNode.call(this, node);
this._depth--;
} else {
this.skip(node);
}
};
return DepthLimitedWalker;
})(TypeScript.PositionTrackingWalker);
TypeScript.DepthLimitedWalker = DepthLimitedWalker;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (Parser) {
var ExpressionPrecedence;
(function (ExpressionPrecedence) {
ExpressionPrecedence[ExpressionPrecedence["CommaExpressionPrecedence"] = 1] = "CommaExpressionPrecedence";
ExpressionPrecedence[ExpressionPrecedence["AssignmentExpressionPrecedence"] = 2] = "AssignmentExpressionPrecedence";
ExpressionPrecedence[ExpressionPrecedence["ConditionalExpressionPrecedence"] = 3] = "ConditionalExpressionPrecedence";
ExpressionPrecedence[ExpressionPrecedence["ArrowFunctionPrecedence"] = 4] = "ArrowFunctionPrecedence";
ExpressionPrecedence[ExpressionPrecedence["LogicalOrExpressionPrecedence"] = 5] = "LogicalOrExpressionPrecedence";
ExpressionPrecedence[ExpressionPrecedence["LogicalAndExpressionPrecedence"] = 6] = "LogicalAndExpressionPrecedence";
ExpressionPrecedence[ExpressionPrecedence["BitwiseOrExpressionPrecedence"] = 7] = "BitwiseOrExpressionPrecedence";
ExpressionPrecedence[ExpressionPrecedence["BitwiseExclusiveOrExpressionPrecedence"] = 8] = "BitwiseExclusiveOrExpressionPrecedence";
ExpressionPrecedence[ExpressionPrecedence["BitwiseAndExpressionPrecedence"] = 9] = "BitwiseAndExpressionPrecedence";
ExpressionPrecedence[ExpressionPrecedence["EqualityExpressionPrecedence"] = 10] = "EqualityExpressionPrecedence";
ExpressionPrecedence[ExpressionPrecedence["RelationalExpressionPrecedence"] = 11] = "RelationalExpressionPrecedence";
ExpressionPrecedence[ExpressionPrecedence["ShiftExpressionPrecdence"] = 12] = "ShiftExpressionPrecdence";
ExpressionPrecedence[ExpressionPrecedence["AdditiveExpressionPrecedence"] = 13] = "AdditiveExpressionPrecedence";
ExpressionPrecedence[ExpressionPrecedence["MultiplicativeExpressionPrecedence"] = 14] = "MultiplicativeExpressionPrecedence";
ExpressionPrecedence[ExpressionPrecedence["UnaryExpressionPrecedence"] = 15] = "UnaryExpressionPrecedence";
})(ExpressionPrecedence || (ExpressionPrecedence = {}));
var ListParsingState;
(function (ListParsingState) {
ListParsingState[ListParsingState["SourceUnit_ModuleElements"] = 1 << 0] = "SourceUnit_ModuleElements";
ListParsingState[ListParsingState["ClassDeclaration_ClassElements"] = 1 << 1] = "ClassDeclaration_ClassElements";
ListParsingState[ListParsingState["ModuleDeclaration_ModuleElements"] = 1 << 2] = "ModuleDeclaration_ModuleElements";
ListParsingState[ListParsingState["SwitchStatement_SwitchClauses"] = 1 << 3] = "SwitchStatement_SwitchClauses";
ListParsingState[ListParsingState["SwitchClause_Statements"] = 1 << 4] = "SwitchClause_Statements";
ListParsingState[ListParsingState["Block_Statements"] = 1 << 5] = "Block_Statements";
ListParsingState[ListParsingState["TryBlock_Statements"] = 1 << 6] = "TryBlock_Statements";
ListParsingState[ListParsingState["CatchBlock_Statements"] = 1 << 7] = "CatchBlock_Statements";
ListParsingState[ListParsingState["EnumDeclaration_EnumElements"] = 1 << 8] = "EnumDeclaration_EnumElements";
ListParsingState[ListParsingState["ObjectType_TypeMembers"] = 1 << 9] = "ObjectType_TypeMembers";
ListParsingState[ListParsingState["ClassOrInterfaceDeclaration_HeritageClauses"] = 1 << 10] = "ClassOrInterfaceDeclaration_HeritageClauses";
ListParsingState[ListParsingState["HeritageClause_TypeNameList"] = 1 << 11] = "HeritageClause_TypeNameList";
ListParsingState[ListParsingState["VariableDeclaration_VariableDeclarators_AllowIn"] = 1 << 12] = "VariableDeclaration_VariableDeclarators_AllowIn";
ListParsingState[ListParsingState["VariableDeclaration_VariableDeclarators_DisallowIn"] = 1 << 13] = "VariableDeclaration_VariableDeclarators_DisallowIn";
ListParsingState[ListParsingState["ArgumentList_AssignmentExpressions"] = 1 << 14] = "ArgumentList_AssignmentExpressions";
ListParsingState[ListParsingState["ObjectLiteralExpression_PropertyAssignments"] = 1 << 15] = "ObjectLiteralExpression_PropertyAssignments";
ListParsingState[ListParsingState["ArrayLiteralExpression_AssignmentExpressions"] = 1 << 16] = "ArrayLiteralExpression_AssignmentExpressions";
ListParsingState[ListParsingState["ParameterList_Parameters"] = 1 << 17] = "ParameterList_Parameters";
ListParsingState[ListParsingState["TypeArgumentList_Types"] = 1 << 18] = "TypeArgumentList_Types";
ListParsingState[ListParsingState["TypeParameterList_TypeParameters"] = 1 << 19] = "TypeParameterList_TypeParameters";
ListParsingState[ListParsingState["FirstListParsingState"] = ListParsingState.SourceUnit_ModuleElements] = "FirstListParsingState";
ListParsingState[ListParsingState["LastListParsingState"] = ListParsingState.TypeParameterList_TypeParameters] = "LastListParsingState";
})(ListParsingState || (ListParsingState = {}));
var SyntaxCursor = (function () {
function SyntaxCursor(sourceUnit) {
this._elements = [];
this._index = 0;
this._pinCount = 0;
sourceUnit.insertChildrenInto(this._elements, 0);
}
SyntaxCursor.prototype.isFinished = function () {
return this._index === this._elements.length;
};
SyntaxCursor.prototype.currentElement = function () {
if (this.isFinished()) {
return null;
}
return this._elements[this._index];
};
SyntaxCursor.prototype.currentNode = function () {
var element = this.currentElement();
return element !== null && element.isNode() ? element : null;
};
SyntaxCursor.prototype.moveToFirstChild = function () {
if (this.isFinished()) {
return;
}
var element = this._elements[this._index];
if (element.isToken()) {
return;
}
var node = element;
this._elements.splice(this._index, 1);
node.insertChildrenInto(this._elements, this._index);
};
SyntaxCursor.prototype.moveToNextSibling = function () {
if (this.isFinished()) {
return;
}
if (this._pinCount > 0) {
this._index++;
return;
}
this._elements.shift();
};
SyntaxCursor.prototype.getAndPinCursorIndex = function () {
this._pinCount++;
return this._index;
};
SyntaxCursor.prototype.releaseAndUnpinCursorIndex = function (index) {
this._pinCount--;
if (this._pinCount === 0) {
}
};
SyntaxCursor.prototype.rewindToPinnedCursorIndex = function (index) {
this._index = index;
};
SyntaxCursor.prototype.pinCount = function () {
return this._pinCount;
};
SyntaxCursor.prototype.moveToFirstToken = function () {
var element;
while (!this.isFinished()) {
element = this.currentElement();
if (element.isNode()) {
this.moveToFirstChild();
continue;
}
return;
}
};
SyntaxCursor.prototype.currentToken = function () {
this.moveToFirstToken();
if (this.isFinished()) {
return null;
}
var element = this.currentElement();
return element;
};
SyntaxCursor.prototype.peekToken = function (n) {
this.moveToFirstToken();
var pin = this.getAndPinCursorIndex();
for (var i = 0; i < n; i++) {
this.moveToNextSibling();
this.moveToFirstToken();
}
var result = this.currentToken();
this.rewindToPinnedCursorIndex(pin);
this.releaseAndUnpinCursorIndex(pin);
return result;
};
return SyntaxCursor;
})();
var NormalParserSource = (function () {
function NormalParserSource(fileName, text, languageVersion) {
this._previousToken = null;
this._absolutePosition = 0;
this._tokenDiagnostics = [];
this.rewindPointPool = [];
this.rewindPointPoolCount = 0;
this.slidingWindow = new TypeScript.SlidingWindow(this, TypeScript.ArrayUtilities.createArray(32, null), null);
this.scanner = new TypeScript.Scanner(fileName, text, languageVersion);
}
NormalParserSource.prototype.currentNode = function () {
return null;
};
NormalParserSource.prototype.moveToNextNode = function () {
throw TypeScript.Errors.invalidOperation();
};
NormalParserSource.prototype.absolutePosition = function () {
return this._absolutePosition;
};
NormalParserSource.prototype.previousToken = function () {
return this._previousToken;
};
NormalParserSource.prototype.tokenDiagnostics = function () {
return this._tokenDiagnostics;
};
NormalParserSource.prototype.getOrCreateRewindPoint = function () {
if (this.rewindPointPoolCount === 0) {
return {};
}
this.rewindPointPoolCount--;
var result = this.rewindPointPool[this.rewindPointPoolCount];
this.rewindPointPool[this.rewindPointPoolCount] = null;
return result;
};
NormalParserSource.prototype.getRewindPoint = function () {
var slidingWindowIndex = this.slidingWindow.getAndPinAbsoluteIndex();
var rewindPoint = this.getOrCreateRewindPoint();
rewindPoint.slidingWindowIndex = slidingWindowIndex;
rewindPoint.previousToken = this._previousToken;
rewindPoint.absolutePosition = this._absolutePosition;
rewindPoint.pinCount = this.slidingWindow.pinCount();
return rewindPoint;
};
NormalParserSource.prototype.isPinned = function () {
return this.slidingWindow.pinCount() > 0;
};
NormalParserSource.prototype.rewind = function (rewindPoint) {
this.slidingWindow.rewindToPinnedIndex(rewindPoint.slidingWindowIndex);
this._previousToken = rewindPoint.previousToken;
this._absolutePosition = rewindPoint.absolutePosition;
};
NormalParserSource.prototype.releaseRewindPoint = function (rewindPoint) {
this.slidingWindow.releaseAndUnpinAbsoluteIndex(rewindPoint.absoluteIndex);
this.rewindPointPool[this.rewindPointPoolCount] = rewindPoint;
this.rewindPointPoolCount++;
};
NormalParserSource.prototype.fetchMoreItems = function (allowRegularExpression, sourceIndex, window, destinationIndex, spaceAvailable) {
window[destinationIndex] = this.scanner.scan(this._tokenDiagnostics, allowRegularExpression);
return 1;
};
NormalParserSource.prototype.peekToken = function (n) {
return this.slidingWindow.peekItemN(n);
};
NormalParserSource.prototype.moveToNextToken = function () {
var currentToken = this.currentToken();
this._absolutePosition += currentToken.fullWidth();
this._previousToken = currentToken;
this.slidingWindow.moveToNextItem();
};
NormalParserSource.prototype.currentToken = function () {
return this.slidingWindow.currentItem(false);
};
NormalParserSource.prototype.removeDiagnosticsOnOrAfterPosition = function (position) {
var tokenDiagnosticsLength = this._tokenDiagnostics.length;
while (tokenDiagnosticsLength > 0) {
var diagnostic = this._tokenDiagnostics[tokenDiagnosticsLength - 1];
if (diagnostic.start() >= position) {
tokenDiagnosticsLength--;
} else {
break;
}
}
this._tokenDiagnostics.length = tokenDiagnosticsLength;
};
NormalParserSource.prototype.resetToPosition = function (absolutePosition, previousToken) {
this._absolutePosition = absolutePosition;
this._previousToken = previousToken;
this.removeDiagnosticsOnOrAfterPosition(absolutePosition);
this.slidingWindow.disgardAllItemsFromCurrentIndexOnwards();
this.scanner.setAbsoluteIndex(absolutePosition);
};
NormalParserSource.prototype.currentTokenAllowingRegularExpression = function () {
this.resetToPosition(this._absolutePosition, this._previousToken);
var token = this.slidingWindow.currentItem(true);
return token;
};
return NormalParserSource;
})();
var IncrementalParserSource = (function () {
function IncrementalParserSource(oldSyntaxTree, textChangeRange, newText) {
this._changeDelta = 0;
var oldSourceUnit = oldSyntaxTree.sourceUnit();
this._oldSourceUnitCursor = new SyntaxCursor(oldSourceUnit);
this._changeRange = IncrementalParserSource.extendToAffectedRange(textChangeRange, oldSourceUnit);
if (TypeScript.Debug.shouldAssert(2 /* Aggressive */)) {
TypeScript.Debug.assert((oldSourceUnit.fullWidth() - this._changeRange.span().length() + this._changeRange.newLength()) === newText.length());
}
this._normalParserSource = new NormalParserSource(oldSyntaxTree.fileName(), newText, oldSyntaxTree.parseOptions().languageVersion());
}
IncrementalParserSource.extendToAffectedRange = function (changeRange, sourceUnit) {
var maxLookahead = 1;
var start = changeRange.span().start();
for (var i = 0; start > 0 && i <= maxLookahead; i++) {
var token = sourceUnit.findToken(start);
var position = token.fullStart();
start = TypeScript.MathPrototype.max(0, position - 1);
}
var finalSpan = TypeScript.TextSpan.fromBounds(start, changeRange.span().end());
var finalLength = changeRange.newLength() + (changeRange.span().start() - start);
return new TypeScript.TextChangeRange(finalSpan, finalLength);
};
IncrementalParserSource.prototype.absolutePosition = function () {
return this._normalParserSource.absolutePosition();
};
IncrementalParserSource.prototype.previousToken = function () {
return this._normalParserSource.previousToken();
};
IncrementalParserSource.prototype.tokenDiagnostics = function () {
return this._normalParserSource.tokenDiagnostics();
};
IncrementalParserSource.prototype.getRewindPoint = function () {
var rewindPoint = this._normalParserSource.getRewindPoint();
var oldSourceUnitCursorIndex = this._oldSourceUnitCursor.getAndPinCursorIndex();
rewindPoint.changeDelta = this._changeDelta;
rewindPoint.changeRange = this._changeRange;
rewindPoint.oldSourceUnitCursorIndex = oldSourceUnitCursorIndex;
return rewindPoint;
};
IncrementalParserSource.prototype.rewind = function (rewindPoint) {
this._changeRange = rewindPoint.changeRange;
this._changeDelta = rewindPoint.changeDelta;
this._oldSourceUnitCursor.rewindToPinnedCursorIndex(rewindPoint.oldSourceUnitCursorIndex);
this._normalParserSource.rewind(rewindPoint);
};
IncrementalParserSource.prototype.releaseRewindPoint = function (rewindPoint) {
this._oldSourceUnitCursor.releaseAndUnpinCursorIndex(rewindPoint.oldSourceUnitCursorIndex);
this._normalParserSource.releaseRewindPoint(rewindPoint);
};
IncrementalParserSource.prototype.canReadFromOldSourceUnit = function () {
if (this._normalParserSource.isPinned()) {
return false;
}
if (this._changeRange !== null && this._changeRange.newSpan().intersectsWithPosition(this.absolutePosition())) {
return false;
}
this.syncCursorToNewTextIfBehind();
return this._changeDelta === 0 && !this._oldSourceUnitCursor.isFinished();
};
IncrementalParserSource.prototype.currentNode = function () {
if (this.canReadFromOldSourceUnit()) {
return this.tryGetNodeFromOldSourceUnit();
}
return null;
};
IncrementalParserSource.prototype.currentToken = function () {
if (this.canReadFromOldSourceUnit()) {
var token = this.tryGetTokenFromOldSourceUnit();
if (token !== null) {
return token;
}
}
return this._normalParserSource.currentToken();
};
IncrementalParserSource.prototype.currentTokenAllowingRegularExpression = function () {
return this._normalParserSource.currentTokenAllowingRegularExpression();
};
IncrementalParserSource.prototype.syncCursorToNewTextIfBehind = function () {
while (true) {
if (this._oldSourceUnitCursor.isFinished()) {
break;
}
if (this._changeDelta >= 0) {
break;
}
var currentElement = this._oldSourceUnitCursor.currentElement();
if (currentElement.isNode() && (currentElement.fullWidth() > Math.abs(this._changeDelta))) {
this._oldSourceUnitCursor.moveToFirstChild();
} else {
this._oldSourceUnitCursor.moveToNextSibling();
this._changeDelta += currentElement.fullWidth();
}
}
};
IncrementalParserSource.prototype.intersectsWithChangeRangeSpanInOriginalText = function (start, length) {
return this._changeRange !== null && this._changeRange.span().intersectsWith(start, length);
};
IncrementalParserSource.prototype.tryGetNodeFromOldSourceUnit = function () {
while (true) {
var node = this._oldSourceUnitCursor.currentNode();
if (node === null) {
return null;
}
if (!this.intersectsWithChangeRangeSpanInOriginalText(this.absolutePosition(), node.fullWidth())) {
if (!node.isIncrementallyUnusable()) {
return node;
}
}
this._oldSourceUnitCursor.moveToFirstChild();
}
};
IncrementalParserSource.prototype.canReuseTokenFromOldSourceUnit = function (position, token) {
if (token !== null) {
if (!this.intersectsWithChangeRangeSpanInOriginalText(position, token.fullWidth())) {
if (!token.isIncrementallyUnusable()) {
return true;
}
}
}
return false;
};
IncrementalParserSource.prototype.tryGetTokenFromOldSourceUnit = function () {
var token = this._oldSourceUnitCursor.currentToken();
return this.canReuseTokenFromOldSourceUnit(this.absolutePosition(), token) ? token : null;
};
IncrementalParserSource.prototype.peekToken = function (n) {
if (this.canReadFromOldSourceUnit()) {
var token = this.tryPeekTokenFromOldSourceUnit(n);
if (token !== null) {
return token;
}
}
return this._normalParserSource.peekToken(n);
};
IncrementalParserSource.prototype.tryPeekTokenFromOldSourceUnit = function (n) {
var currentPosition = this.absolutePosition();
for (var i = 0; i < n; i++) {
var interimToken = this._oldSourceUnitCursor.peekToken(i);
if (!this.canReuseTokenFromOldSourceUnit(currentPosition, interimToken)) {
return null;
}
currentPosition += interimToken.fullWidth();
}
var token = this._oldSourceUnitCursor.peekToken(n);
return this.canReuseTokenFromOldSourceUnit(currentPosition, token) ? token : null;
};
IncrementalParserSource.prototype.moveToNextNode = function () {
var currentElement = this._oldSourceUnitCursor.currentElement();
var currentNode = this._oldSourceUnitCursor.currentNode();
this._oldSourceUnitCursor.moveToNextSibling();
var absolutePosition = this.absolutePosition() + currentNode.fullWidth();
var previousToken = currentNode.lastToken();
this._normalParserSource.resetToPosition(absolutePosition, previousToken);
if (this._changeRange !== null) {
}
};
IncrementalParserSource.prototype.moveToNextToken = function () {
var currentToken = this.currentToken();
if (this._oldSourceUnitCursor.currentToken() === currentToken) {
this._oldSourceUnitCursor.moveToNextSibling();
var absolutePosition = this.absolutePosition() + currentToken.fullWidth();
var previousToken = currentToken;
this._normalParserSource.resetToPosition(absolutePosition, previousToken);
if (this._changeRange !== null) {
}
} else {
this._changeDelta -= currentToken.fullWidth();
this._normalParserSource.moveToNextToken();
if (this._changeRange !== null) {
var changeRangeSpanInNewText = this._changeRange.newSpan();
if (this.absolutePosition() >= changeRangeSpanInNewText.end()) {
this._changeDelta += this._changeRange.newLength() - this._changeRange.span().length();
this._changeRange = null;
}
}
}
};
return IncrementalParserSource;
})();
var ParserImpl = (function () {
function ParserImpl(fileName, lineMap, source, parseOptions, newText_forDebuggingPurposesOnly) {
this.newText_forDebuggingPurposesOnly = newText_forDebuggingPurposesOnly;
this.listParsingState = 0;
this.isInStrictMode = false;
this.diagnostics = [];
this.factory = TypeScript.Syntax.normalModeFactory;
this.mergeTokensStorage = [];
this.arrayPool = [];
this.fileName = fileName;
this.lineMap = lineMap;
this.source = source;
this.parseOptions = parseOptions;
}
ParserImpl.prototype.getRewindPoint = function () {
var rewindPoint = this.source.getRewindPoint();
rewindPoint.diagnosticsCount = this.diagnostics.length;
rewindPoint.isInStrictMode = this.isInStrictMode;
rewindPoint.listParsingState = this.listParsingState;
return rewindPoint;
};
ParserImpl.prototype.rewind = function (rewindPoint) {
this.source.rewind(rewindPoint);
this.diagnostics.length = rewindPoint.diagnosticsCount;
};
ParserImpl.prototype.releaseRewindPoint = function (rewindPoint) {
this.source.releaseRewindPoint(rewindPoint);
};
ParserImpl.prototype.currentTokenStart = function () {
return this.source.absolutePosition() + this.currentToken().leadingTriviaWidth();
};
ParserImpl.prototype.previousTokenStart = function () {
if (this.previousToken() === null) {
return 0;
}
return this.source.absolutePosition() - this.previousToken().fullWidth() + this.previousToken().leadingTriviaWidth();
};
ParserImpl.prototype.previousTokenEnd = function () {
if (this.previousToken() === null) {
return 0;
}
return this.previousTokenStart() + this.previousToken().width();
};
ParserImpl.prototype.currentNode = function () {
var node = this.source.currentNode();
if (node === null || node.parsedInStrictMode() !== this.isInStrictMode) {
return null;
}
return node;
};
ParserImpl.prototype.currentToken = function () {
return this.source.currentToken();
};
ParserImpl.prototype.currentTokenAllowingRegularExpression = function () {
return this.source.currentTokenAllowingRegularExpression();
};
ParserImpl.prototype.peekToken = function (n) {
return this.source.peekToken(n);
};
ParserImpl.prototype.eatAnyToken = function () {
var token = this.currentToken();
this.moveToNextToken();
return token;
};
ParserImpl.prototype.moveToNextToken = function () {
this.source.moveToNextToken();
};
ParserImpl.prototype.previousToken = function () {
return this.source.previousToken();
};
ParserImpl.prototype.eatNode = function () {
var node = this.source.currentNode();
this.source.moveToNextNode();
return node;
};
ParserImpl.prototype.eatToken = function (kind) {
var token = this.currentToken();
if (token.tokenKind === kind) {
this.moveToNextToken();
return token;
}
return this.createMissingToken(kind, token);
};
ParserImpl.prototype.tryEatToken = function (kind) {
if (this.currentToken().tokenKind === kind) {
return this.eatToken(kind);
}
return null;
};
ParserImpl.prototype.eatKeyword = function (kind) {
var token = this.currentToken();
if (token.tokenKind === kind) {
this.moveToNextToken();
return token;
}
return this.createMissingToken(kind, token);
};
ParserImpl.prototype.isIdentifier = function (token) {
var tokenKind = token.tokenKind;
if (tokenKind === 11 /* IdentifierName */) {
return true;
}
if (tokenKind >= 51 /* FirstFutureReservedStrictKeyword */) {
if (tokenKind <= 59 /* LastFutureReservedStrictKeyword */) {
return !this.isInStrictMode;
}
return tokenKind <= 69 /* LastTypeScriptKeyword */;
}
return false;
};
ParserImpl.prototype.eatIdentifierNameToken = function () {
var token = this.currentToken();
if (token.tokenKind === 11 /* IdentifierName */) {
this.moveToNextToken();
return token;
}
if (TypeScript.SyntaxFacts.isAnyKeyword(token.tokenKind)) {
this.moveToNextToken();
return TypeScript.Syntax.convertToIdentifierName(token);
}
return this.createMissingToken(11 /* IdentifierName */, token);
};
ParserImpl.prototype.eatIdentifierToken = function () {
var token = this.currentToken();
if (this.isIdentifier(token)) {
this.moveToNextToken();
if (token.tokenKind === 11 /* IdentifierName */) {
return token;
}
return TypeScript.Syntax.convertToIdentifierName(token);
}
return this.createMissingToken(11 /* IdentifierName */, token);
};
ParserImpl.prototype.canEatAutomaticSemicolon = function (allowWithoutNewLine) {
var token = this.currentToken();
if (token.tokenKind === 10 /* EndOfFileToken */) {
return true;
}
if (token.tokenKind === 71 /* CloseBraceToken */) {
return true;
}
if (allowWithoutNewLine) {
return true;
}
if (this.previousToken() !== null && this.previousToken().hasTrailingNewLine()) {
return true;
}
return false;
};
ParserImpl.prototype.canEatExplicitOrAutomaticSemicolon = function (allowWithoutNewline) {
var token = this.currentToken();
if (token.tokenKind === 78 /* SemicolonToken */) {
return true;
}
return this.canEatAutomaticSemicolon(allowWithoutNewline);
};
ParserImpl.prototype.eatExplicitOrAutomaticSemicolon = function (allowWithoutNewline) {
var token = this.currentToken();
if (token.tokenKind === 78 /* SemicolonToken */) {
return this.eatToken(78 /* SemicolonToken */);
}
if (this.canEatAutomaticSemicolon(allowWithoutNewline)) {
var semicolonToken = TypeScript.Syntax.emptyToken(78 /* SemicolonToken */);
if (!this.parseOptions.allowAutomaticSemicolonInsertion()) {
this.addDiagnostic(new TypeScript.Diagnostic(this.fileName, this.lineMap, this.previousTokenEnd(), 0, TypeScript.DiagnosticCode.Automatic_semicolon_insertion_not_allowed, null));
}
return semicolonToken;
}
return this.eatToken(78 /* SemicolonToken */);
};
ParserImpl.prototype.isKeyword = function (kind) {
if (kind >= 15 /* FirstKeyword */) {
if (kind <= 50 /* LastFutureReservedKeyword */) {
return true;
}
if (this.isInStrictMode) {
return kind <= 59 /* LastFutureReservedStrictKeyword */;
}
}
return false;
};
ParserImpl.prototype.createMissingToken = function (expectedKind, actual) {
var diagnostic = this.getExpectedTokenDiagnostic(expectedKind, actual);
this.addDiagnostic(diagnostic);
return TypeScript.Syntax.emptyToken(expectedKind);
};
ParserImpl.prototype.getExpectedTokenDiagnostic = function (expectedKind, actual) {
var token = this.currentToken();
if (TypeScript.SyntaxFacts.isAnyKeyword(expectedKind) || TypeScript.SyntaxFacts.isAnyPunctuation(expectedKind)) {
return new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token.width(), TypeScript.DiagnosticCode._0_expected, [TypeScript.SyntaxFacts.getText(expectedKind)]);
} else {
if (actual !== null && TypeScript.SyntaxFacts.isAnyKeyword(actual.tokenKind)) {
return new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token.width(), TypeScript.DiagnosticCode.Identifier_expected_0_is_a_keyword, [TypeScript.SyntaxFacts.getText(actual.tokenKind)]);
} else {
return new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token.width(), TypeScript.DiagnosticCode.Identifier_expected, null);
}
}
};
ParserImpl.getPrecedence = function (expressionKind) {
switch (expressionKind) {
case 173 /* CommaExpression */:
return 1 /* CommaExpressionPrecedence */;
case 174 /* AssignmentExpression */:
case 175 /* AddAssignmentExpression */:
case 176 /* SubtractAssignmentExpression */:
case 177 /* MultiplyAssignmentExpression */:
case 178 /* DivideAssignmentExpression */:
case 179 /* ModuloAssignmentExpression */:
case 180 /* AndAssignmentExpression */:
case 181 /* ExclusiveOrAssignmentExpression */:
case 182 /* OrAssignmentExpression */:
case 183 /* LeftShiftAssignmentExpression */:
case 184 /* SignedRightShiftAssignmentExpression */:
case 185 /* UnsignedRightShiftAssignmentExpression */:
return 2 /* AssignmentExpressionPrecedence */;
case 186 /* ConditionalExpression */:
return 3 /* ConditionalExpressionPrecedence */;
case 187 /* LogicalOrExpression */:
return 5 /* LogicalOrExpressionPrecedence */;
case 188 /* LogicalAndExpression */:
return 6 /* LogicalAndExpressionPrecedence */;
case 189 /* BitwiseOrExpression */:
return 7 /* BitwiseOrExpressionPrecedence */;
case 190 /* BitwiseExclusiveOrExpression */:
return 8 /* BitwiseExclusiveOrExpressionPrecedence */;
case 191 /* BitwiseAndExpression */:
return 9 /* BitwiseAndExpressionPrecedence */;
case 192 /* EqualsWithTypeConversionExpression */:
case 193 /* NotEqualsWithTypeConversionExpression */:
case 194 /* EqualsExpression */:
case 195 /* NotEqualsExpression */:
return 10 /* EqualityExpressionPrecedence */;
case 196 /* LessThanExpression */:
case 197 /* GreaterThanExpression */:
case 198 /* LessThanOrEqualExpression */:
case 199 /* GreaterThanOrEqualExpression */:
case 200 /* InstanceOfExpression */:
case 201 /* InExpression */:
return 11 /* RelationalExpressionPrecedence */;
case 202 /* LeftShiftExpression */:
case 203 /* SignedRightShiftExpression */:
case 204 /* UnsignedRightShiftExpression */:
return 12 /* ShiftExpressionPrecdence */;
case 208 /* AddExpression */:
case 209 /* SubtractExpression */:
return 13 /* AdditiveExpressionPrecedence */;
case 205 /* MultiplyExpression */:
case 206 /* DivideExpression */:
case 207 /* ModuloExpression */:
return 14 /* MultiplicativeExpressionPrecedence */;
case 164 /* PlusExpression */:
case 165 /* NegateExpression */:
case 166 /* BitwiseNotExpression */:
case 167 /* LogicalNotExpression */:
case 170 /* DeleteExpression */:
case 171 /* TypeOfExpression */:
case 172 /* VoidExpression */:
case 168 /* PreIncrementExpression */:
case 169 /* PreDecrementExpression */:
return 15 /* UnaryExpressionPrecedence */;
}
throw TypeScript.Errors.invalidOperation();
};
ParserImpl.prototype.addSkippedTokenAfterNodeOrToken = function (nodeOrToken, skippedToken) {
if (nodeOrToken.isToken()) {
return this.addSkippedTokenAfterToken(nodeOrToken, skippedToken);
} else if (nodeOrToken.isNode()) {
return this.addSkippedTokenAfterNode(nodeOrToken, skippedToken);
} else {
throw TypeScript.Errors.invalidOperation();
}
};
ParserImpl.prototype.addSkippedTokenAfterNode = function (node, skippedToken) {
var oldToken = node.lastToken();
var newToken = this.addSkippedTokenAfterToken(oldToken, skippedToken);
return node.replaceToken(oldToken, newToken);
};
ParserImpl.prototype.addSkippedTokensBeforeNode = function (node, skippedTokens) {
if (skippedTokens.length > 0) {
var oldToken = node.firstToken();
var newToken = this.addSkippedTokensBeforeToken(oldToken, skippedTokens);
return node.replaceToken(oldToken, newToken);
}
return node;
};
ParserImpl.prototype.addSkippedTokensBeforeToken = function (token, skippedTokens) {
var leadingTrivia = [];
for (var i = 0, n = skippedTokens.length; i < n; i++) {
this.addSkippedTokenToTriviaArray(leadingTrivia, skippedTokens[i]);
}
this.addTriviaTo(token.leadingTrivia(), leadingTrivia);
this.returnArray(skippedTokens);
return token.withLeadingTrivia(TypeScript.Syntax.triviaList(leadingTrivia));
};
ParserImpl.prototype.addSkippedTokensAfterToken = function (token, skippedTokens) {
if (skippedTokens.length === 0) {
this.returnArray(skippedTokens);
return token;
}
var trailingTrivia = token.trailingTrivia().toArray();
for (var i = 0, n = skippedTokens.length; i < n; i++) {
this.addSkippedTokenToTriviaArray(trailingTrivia, skippedTokens[i]);
}
this.returnArray(skippedTokens);
return token.withTrailingTrivia(TypeScript.Syntax.triviaList(trailingTrivia));
};
ParserImpl.prototype.addSkippedTokenAfterToken = function (token, skippedToken) {
var trailingTrivia = token.trailingTrivia().toArray();
this.addSkippedTokenToTriviaArray(trailingTrivia, skippedToken);
return token.withTrailingTrivia(TypeScript.Syntax.triviaList(trailingTrivia));
};
ParserImpl.prototype.addSkippedTokenToTriviaArray = function (array, skippedToken) {
this.addTriviaTo(skippedToken.leadingTrivia(), array);
var trimmedToken = skippedToken.withLeadingTrivia(TypeScript.Syntax.emptyTriviaList).withTrailingTrivia(TypeScript.Syntax.emptyTriviaList);
array.push(TypeScript.Syntax.skippedTokenTrivia(trimmedToken));
this.addTriviaTo(skippedToken.trailingTrivia(), array);
};
ParserImpl.prototype.addTriviaTo = function (list, array) {
for (var i = 0, n = list.count(); i < n; i++) {
array.push(list.syntaxTriviaAt(i));
}
};
ParserImpl.prototype.parseSyntaxTree = function (isDeclaration) {
var sourceUnit = this.parseSourceUnit();
var allDiagnostics = this.source.tokenDiagnostics().concat(this.diagnostics);
allDiagnostics.sort(function (a, b) {
return a.start() - b.start();
});
return new TypeScript.SyntaxTree(sourceUnit, isDeclaration, allDiagnostics, this.fileName, this.lineMap, this.parseOptions);
};
ParserImpl.prototype.setStrictMode = function (isInStrictMode) {
this.isInStrictMode = isInStrictMode;
this.factory = isInStrictMode ? TypeScript.Syntax.strictModeFactory : TypeScript.Syntax.normalModeFactory;
};
ParserImpl.prototype.parseSourceUnit = function () {
var savedIsInStrictMode = this.isInStrictMode;
var result = this.parseSyntaxList(1 /* SourceUnit_ModuleElements */, ParserImpl.updateStrictModeState);
var moduleElements = result.list;
this.setStrictMode(savedIsInStrictMode);
var sourceUnit = this.factory.sourceUnit(moduleElements, this.currentToken());
sourceUnit = this.addSkippedTokensBeforeNode(sourceUnit, result.skippedTokens);
if (TypeScript.Debug.shouldAssert(2 /* Aggressive */)) {
TypeScript.Debug.assert(sourceUnit.fullWidth() === this.newText_forDebuggingPurposesOnly.length());
if (TypeScript.Debug.shouldAssert(3 /* VeryAggressive */)) {
TypeScript.Debug.assert(sourceUnit.fullText() === this.newText_forDebuggingPurposesOnly.substr(0, this.newText_forDebuggingPurposesOnly.length(), false));
}
}
return sourceUnit;
};
ParserImpl.updateStrictModeState = function (parser, items) {
if (!parser.isInStrictMode) {
for (var i = 0; i < items.length; i++) {
var item = items[i];
if (!TypeScript.SyntaxFacts.isDirectivePrologueElement(item)) {
return;
}
}
parser.setStrictMode(TypeScript.SyntaxFacts.isUseStrictDirective(items[items.length - 1]));
}
};
ParserImpl.prototype.isModuleElement = function (inErrorRecovery) {
if (this.currentNode() !== null && this.currentNode().isModuleElement()) {
return true;
}
var modifierCount = this.modifierCount();
return this.isImportDeclaration(modifierCount) || this.isExportAssignment() || this.isModuleDeclaration(modifierCount) || this.isInterfaceDeclaration(modifierCount) || this.isClassDeclaration(modifierCount) || this.isEnumDeclaration(modifierCount) || this.isStatement(inErrorRecovery);
};
ParserImpl.prototype.parseModuleElement = function (inErrorRecovery) {
if (this.currentNode() !== null && this.currentNode().isModuleElement()) {
return this.eatNode();
}
var modifierCount = this.modifierCount();
if (this.isImportDeclaration(modifierCount)) {
return this.parseImportDeclaration();
} else if (this.isExportAssignment()) {
return this.parseExportAssignment();
} else if (this.isModuleDeclaration(modifierCount)) {
return this.parseModuleDeclaration();
} else if (this.isInterfaceDeclaration(modifierCount)) {
return this.parseInterfaceDeclaration();
} else if (this.isClassDeclaration(modifierCount)) {
return this.parseClassDeclaration();
} else if (this.isEnumDeclaration(modifierCount)) {
return this.parseEnumDeclaration();
} else if (this.isStatement(inErrorRecovery)) {
return this.parseStatement(inErrorRecovery);
} else {
throw TypeScript.Errors.invalidOperation();
}
};
ParserImpl.prototype.isImportDeclaration = function (modifierCount) {
if (modifierCount > 0 && this.peekToken(modifierCount).tokenKind === 49 /* ImportKeyword */) {
return true;
}
return this.currentToken().tokenKind === 49 /* ImportKeyword */ && this.isIdentifier(this.peekToken(1));
};
ParserImpl.prototype.parseImportDeclaration = function () {
var modifiers = this.parseModifiers();
var importKeyword = this.eatKeyword(49 /* ImportKeyword */);
var identifier = this.eatIdentifierToken();
var equalsToken = this.eatToken(107 /* EqualsToken */);
var moduleReference = this.parseModuleReference();
var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false);
return this.factory.importDeclaration(modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken);
};
ParserImpl.prototype.isExportAssignment = function () {
return this.currentToken().tokenKind === 47 /* ExportKeyword */ && this.peekToken(1).tokenKind === 107 /* EqualsToken */;
};
ParserImpl.prototype.parseExportAssignment = function () {
var exportKeyword = this.eatKeyword(47 /* ExportKeyword */);
var equalsToken = this.eatToken(107 /* EqualsToken */);
var identifier = this.eatIdentifierToken();
var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false);
return this.factory.exportAssignment(exportKeyword, equalsToken, identifier, semicolonToken);
};
ParserImpl.prototype.parseModuleReference = function () {
if (this.isExternalModuleReference()) {
return this.parseExternalModuleReference();
} else {
return this.parseModuleNameModuleReference();
}
};
ParserImpl.prototype.isExternalModuleReference = function () {
var token0 = this.currentToken();
if (token0.tokenKind === 66 /* RequireKeyword */) {
return this.peekToken(1).tokenKind === 72 /* OpenParenToken */;
}
return false;
};
ParserImpl.prototype.parseExternalModuleReference = function () {
var requireKeyword = this.eatKeyword(66 /* RequireKeyword */);
var openParenToken = this.eatToken(72 /* OpenParenToken */);
var stringLiteral = this.eatToken(14 /* StringLiteral */);
var closeParenToken = this.eatToken(73 /* CloseParenToken */);
return this.factory.externalModuleReference(requireKeyword, openParenToken, stringLiteral, closeParenToken);
};
ParserImpl.prototype.parseModuleNameModuleReference = function () {
var name = this.parseName();
return this.factory.moduleNameModuleReference(name);
};
ParserImpl.prototype.parseIdentifierName = function () {
var identifierName = this.eatIdentifierNameToken();
return identifierName;
};
ParserImpl.prototype.tryParseTypeArgumentList = function (inExpression) {
if (this.currentToken().kind() !== 80 /* LessThanToken */) {
return null;
}
var lessThanToken;
var greaterThanToken;
var result;
var typeArguments;
if (!inExpression) {
lessThanToken = this.eatToken(80 /* LessThanToken */);
result = this.parseSeparatedSyntaxList(262144 /* TypeArgumentList_Types */);
typeArguments = result.list;
lessThanToken = this.addSkippedTokensAfterToken(lessThanToken, result.skippedTokens);
greaterThanToken = this.eatToken(81 /* GreaterThanToken */);
return this.factory.typeArgumentList(lessThanToken, typeArguments, greaterThanToken);
}
var rewindPoint = this.getRewindPoint();
lessThanToken = this.eatToken(80 /* LessThanToken */);
result = this.parseSeparatedSyntaxList(262144 /* TypeArgumentList_Types */);
typeArguments = result.list;
lessThanToken = this.addSkippedTokensAfterToken(lessThanToken, result.skippedTokens);
greaterThanToken = this.eatToken(81 /* GreaterThanToken */);
if (greaterThanToken.fullWidth() === 0 || !this.canFollowTypeArgumentListInExpression(this.currentToken().kind())) {
this.rewind(rewindPoint);
this.releaseRewindPoint(rewindPoint);
return null;
} else {
this.releaseRewindPoint(rewindPoint);
var typeArgumentList = this.factory.typeArgumentList(lessThanToken, typeArguments, greaterThanToken);
return typeArgumentList;
}
};
ParserImpl.prototype.canFollowTypeArgumentListInExpression = function (kind) {
switch (kind) {
case 72 /* OpenParenToken */:
case 76 /* DotToken */:
case 73 /* CloseParenToken */:
case 75 /* CloseBracketToken */:
case 106 /* ColonToken */:
case 78 /* SemicolonToken */:
case 79 /* CommaToken */:
case 105 /* QuestionToken */:
case 84 /* EqualsEqualsToken */:
case 87 /* EqualsEqualsEqualsToken */:
case 86 /* ExclamationEqualsToken */:
case 88 /* ExclamationEqualsEqualsToken */:
case 103 /* AmpersandAmpersandToken */:
case 104 /* BarBarToken */:
case 100 /* CaretToken */:
case 98 /* AmpersandToken */:
case 99 /* BarToken */:
case 71 /* CloseBraceToken */:
case 10 /* EndOfFileToken */:
return true;
default:
return false;
}
};
ParserImpl.prototype.parseName = function () {
var shouldContinue = this.isIdentifier(this.currentToken());
var current = this.eatIdentifierToken();
while (shouldContinue && this.currentToken().tokenKind === 76 /* DotToken */) {
var dotToken = this.eatToken(76 /* DotToken */);
var currentToken = this.currentToken();
var identifierName;
if (TypeScript.SyntaxFacts.isAnyKeyword(currentToken.tokenKind) && this.previousToken().hasTrailingNewLine() && !currentToken.hasTrailingNewLine() && TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(this.peekToken(1))) {
identifierName = this.createMissingToken(11 /* IdentifierName */, currentToken);
} else {
identifierName = this.eatIdentifierNameToken();
}
current = this.factory.qualifiedName(current, dotToken, identifierName);
shouldContinue = identifierName.fullWidth() > 0;
}
return current;
};
ParserImpl.prototype.isEnumDeclaration = function (modifierCount) {
if (modifierCount > 0 && this.peekToken(modifierCount).tokenKind === 46 /* EnumKeyword */) {
return true;
}
return this.currentToken().tokenKind === 46 /* EnumKeyword */ && this.isIdentifier(this.peekToken(1));
};
ParserImpl.prototype.parseEnumDeclaration = function () {
var modifiers = this.parseModifiers();
var enumKeyword = this.eatKeyword(46 /* EnumKeyword */);
var identifier = this.eatIdentifierToken();
var openBraceToken = this.eatToken(70 /* OpenBraceToken */);
var enumElements = TypeScript.Syntax.emptySeparatedList;
if (openBraceToken.width() > 0) {
var result = this.parseSeparatedSyntaxList(256 /* EnumDeclaration_EnumElements */);
enumElements = result.list;
openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens);
}
var closeBraceToken = this.eatToken(71 /* CloseBraceToken */);
return this.factory.enumDeclaration(modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken);
};
ParserImpl.prototype.isEnumElement = function (inErrorRecovery) {
if (this.currentNode() !== null && this.currentNode().kind() === 243 /* EnumElement */) {
return true;
}
return this.isPropertyName(this.currentToken(), inErrorRecovery);
};
ParserImpl.prototype.parseEnumElement = function () {
if (this.currentNode() !== null && this.currentNode().kind() === 243 /* EnumElement */) {
return this.eatNode();
}
var propertyName = this.eatPropertyName();
var equalsValueClause = null;
if (this.isEqualsValueClause(false)) {
equalsValueClause = this.parseEqualsValueClause(true);
}
return this.factory.enumElement(propertyName, equalsValueClause);
};
ParserImpl.isModifier = function (token) {
switch (token.tokenKind) {
case 57 /* PublicKeyword */:
case 55 /* PrivateKeyword */:
case 58 /* StaticKeyword */:
case 47 /* ExportKeyword */:
case 63 /* DeclareKeyword */:
return true;
default:
return false;
}
};
ParserImpl.prototype.modifierCount = function () {
var modifierCount = 0;
while (true) {
if (ParserImpl.isModifier(this.peekToken(modifierCount))) {
modifierCount++;
continue;
}
break;
}
return modifierCount;
};
ParserImpl.prototype.parseModifiers = function () {
var tokens = this.getArray();
while (true) {
if (ParserImpl.isModifier(this.currentToken())) {
tokens.push(this.eatAnyToken());
continue;
}
break;
}
var result = TypeScript.Syntax.list(tokens);
this.returnZeroOrOneLengthArray(tokens);
return result;
};
ParserImpl.prototype.isClassDeclaration = function (modifierCount) {
if (modifierCount > 0 && this.peekToken(modifierCount).tokenKind === 44 /* ClassKeyword */) {
return true;
}
return this.currentToken().tokenKind === 44 /* ClassKeyword */ && this.isIdentifier(this.peekToken(1));
};
ParserImpl.prototype.parseHeritageClauses = function () {
var heritageClauses = TypeScript.Syntax.emptyList;
if (this.isHeritageClause()) {
var result = this.parseSyntaxList(1024 /* ClassOrInterfaceDeclaration_HeritageClauses */);
heritageClauses = result.list;
TypeScript.Debug.assert(result.skippedTokens.length === 0);
}
return heritageClauses;
};
ParserImpl.prototype.parseClassDeclaration = function () {
var modifiers = this.parseModifiers();
var classKeyword = this.eatKeyword(44 /* ClassKeyword */);
var identifier = this.eatIdentifierToken();
var typeParameterList = this.parseOptionalTypeParameterList(false);
var heritageClauses = this.parseHeritageClauses();
var openBraceToken = this.eatToken(70 /* OpenBraceToken */);
var classElements = TypeScript.Syntax.emptyList;
if (openBraceToken.width() > 0) {
var result = this.parseSyntaxList(2 /* ClassDeclaration_ClassElements */);
classElements = result.list;
openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens);
}
var closeBraceToken = this.eatToken(71 /* CloseBraceToken */);
return this.factory.classDeclaration(modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken);
};
ParserImpl.isPublicOrPrivateKeyword = function (token) {
return token.tokenKind === 57 /* PublicKeyword */ || token.tokenKind === 55 /* PrivateKeyword */;
};
ParserImpl.prototype.isAccessor = function (inErrorRecovery) {
var index = this.modifierCount();
if (this.peekToken(index).tokenKind !== 64 /* GetKeyword */ && this.peekToken(index).tokenKind !== 68 /* SetKeyword */) {
return false;
}
index++;
return this.isPropertyName(this.peekToken(index), inErrorRecovery);
};
ParserImpl.prototype.parseAccessor = function (checkForStrictMode) {
var modifiers = this.parseModifiers();
if (this.currentToken().tokenKind === 64 /* GetKeyword */) {
return this.parseGetMemberAccessorDeclaration(modifiers, checkForStrictMode);
} else if (this.currentToken().tokenKind === 68 /* SetKeyword */) {
return this.parseSetMemberAccessorDeclaration(modifiers, checkForStrictMode);
} else {
throw TypeScript.Errors.invalidOperation();
}
};
ParserImpl.prototype.parseGetMemberAccessorDeclaration = function (modifiers, checkForStrictMode) {
var getKeyword = this.eatKeyword(64 /* GetKeyword */);
var propertyName = this.eatPropertyName();
var parameterList = this.parseParameterList();
var typeAnnotation = this.parseOptionalTypeAnnotation(false);
var block = this.parseBlock(false, checkForStrictMode);
return this.factory.getAccessor(modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block);
};
ParserImpl.prototype.parseSetMemberAccessorDeclaration = function (modifiers, checkForStrictMode) {
var setKeyword = this.eatKeyword(68 /* SetKeyword */);
var propertyName = this.eatPropertyName();
var parameterList = this.parseParameterList();
var block = this.parseBlock(false, checkForStrictMode);
return this.factory.setAccessor(modifiers, setKeyword, propertyName, parameterList, block);
};
ParserImpl.prototype.isClassElement = function (inErrorRecovery) {
if (this.currentNode() !== null && this.currentNode().isClassElement()) {
return true;
}
return this.isConstructorDeclaration() || this.isMemberFunctionDeclaration(inErrorRecovery) || this.isAccessor(inErrorRecovery) || this.isMemberVariableDeclaration(inErrorRecovery) || this.isIndexMemberDeclaration();
};
ParserImpl.prototype.parseClassElement = function (inErrorRecovery) {
if (this.currentNode() !== null && this.currentNode().isClassElement()) {
return this.eatNode();
}
if (this.isConstructorDeclaration()) {
return this.parseConstructorDeclaration();
} else if (this.isMemberFunctionDeclaration(inErrorRecovery)) {
return this.parseMemberFunctionDeclaration();
} else if (this.isAccessor(inErrorRecovery)) {
return this.parseAccessor(false);
} else if (this.isMemberVariableDeclaration(inErrorRecovery)) {
return this.parseMemberVariableDeclaration();
} else if (this.isIndexMemberDeclaration()) {
return this.parseIndexMemberDeclaration();
} else {
throw TypeScript.Errors.invalidOperation();
}
};
ParserImpl.prototype.isConstructorDeclaration = function () {
var index = this.modifierCount();
return this.peekToken(index).tokenKind === 62 /* ConstructorKeyword */;
};
ParserImpl.prototype.parseConstructorDeclaration = function () {
var modifiers = this.parseModifiers();
var constructorKeyword = this.eatKeyword(62 /* ConstructorKeyword */);
var callSignature = this.parseCallSignature(false);
var semicolonToken = null;
var block = null;
if (this.isBlock()) {
block = this.parseBlock(false, true);
} else {
semicolonToken = this.eatExplicitOrAutomaticSemicolon(false);
}
return this.factory.constructorDeclaration(modifiers, constructorKeyword, callSignature, block, semicolonToken);
};
ParserImpl.prototype.isMemberFunctionDeclaration = function (inErrorRecovery) {
var index = 0;
while (true) {
var token = this.peekToken(index);
if (this.isPropertyName(token, inErrorRecovery) && this.isCallSignature(index + 1)) {
return true;
}
if (ParserImpl.isModifier(token)) {
index++;
continue;
}
return false;
}
};
ParserImpl.prototype.parseMemberFunctionDeclaration = function () {
var modifierArray = this.getArray();
while (true) {
var currentToken = this.currentToken();
if (this.isPropertyName(currentToken, false) && this.isCallSignature(1)) {
break;
}
TypeScript.Debug.assert(ParserImpl.isModifier(currentToken));
modifierArray.push(this.eatAnyToken());
}
var modifiers = TypeScript.Syntax.list(modifierArray);
this.returnZeroOrOneLengthArray(modifierArray);
var propertyName = this.eatPropertyName();
var callSignature = this.parseCallSignature(false);
var parseBlockEvenWithNoOpenBrace = false;
var newCallSignature = this.tryAddUnexpectedEqualsGreaterThanToken(callSignature);
if (newCallSignature !== callSignature) {
parseBlockEvenWithNoOpenBrace = true;
callSignature = newCallSignature;
}
var block = null;
var semicolon = null;
if (parseBlockEvenWithNoOpenBrace || this.isBlock()) {
block = this.parseBlock(parseBlockEvenWithNoOpenBrace, true);
} else {
semicolon = this.eatExplicitOrAutomaticSemicolon(false);
}
return this.factory.memberFunctionDeclaration(modifiers, propertyName, callSignature, block, semicolon);
};
ParserImpl.prototype.isDefinitelyMemberVariablePropertyName = function (index) {
if (TypeScript.SyntaxFacts.isAnyKeyword(this.peekToken(index).tokenKind)) {
switch (this.peekToken(index + 1).tokenKind) {
case 78 /* SemicolonToken */:
case 107 /* EqualsToken */:
case 106 /* ColonToken */:
case 71 /* CloseBraceToken */:
case 10 /* EndOfFileToken */:
return true;
default:
return false;
}
} else {
return true;
}
};
ParserImpl.prototype.isMemberVariableDeclaration = function (inErrorRecovery) {
var index = 0;
while (true) {
var token = this.peekToken(index);
if (this.isPropertyName(token, inErrorRecovery) && this.isDefinitelyMemberVariablePropertyName(index)) {
return true;
}
if (ParserImpl.isModifier(this.peekToken(index))) {
index++;
continue;
}
return false;
}
};
ParserImpl.prototype.parseMemberVariableDeclaration = function () {
var modifierArray = this.getArray();
while (true) {
var currentToken = this.currentToken();
if (this.isPropertyName(currentToken, false) && this.isDefinitelyMemberVariablePropertyName(0)) {
break;
}
TypeScript.Debug.assert(ParserImpl.isModifier(currentToken));
modifierArray.push(this.eatAnyToken());
}
var modifiers = TypeScript.Syntax.list(modifierArray);
this.returnZeroOrOneLengthArray(modifierArray);
var variableDeclarator = this.parseVariableDeclarator(true, true);
var semicolon = this.eatExplicitOrAutomaticSemicolon(false);
return this.factory.memberVariableDeclaration(modifiers, variableDeclarator, semicolon);
};
ParserImpl.prototype.isIndexMemberDeclaration = function () {
var index = this.modifierCount();
return this.isIndexSignature(index);
};
ParserImpl.prototype.parseIndexMemberDeclaration = function () {
var modifiers = this.parseModifiers();
var indexSignature = this.parseIndexSignature();
var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false);
return this.factory.indexMemberDeclaration(modifiers, indexSignature, semicolonToken);
};
ParserImpl.prototype.tryAddUnexpectedEqualsGreaterThanToken = function (callSignature) {
var token0 = this.currentToken();
var hasEqualsGreaterThanToken = token0.tokenKind === 85 /* EqualsGreaterThanToken */;
if (hasEqualsGreaterThanToken) {
if (callSignature.lastToken()) {
var diagnostic = new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token0.width(), TypeScript.DiagnosticCode.Unexpected_token_0_expected, [TypeScript.SyntaxFacts.getText(70 /* OpenBraceToken */)]);
this.addDiagnostic(diagnostic);
var token = this.eatAnyToken();
return this.addSkippedTokenAfterNode(callSignature, token0);
}
}
return callSignature;
};
ParserImpl.prototype.isFunctionDeclaration = function () {
var index = this.modifierCount();
return this.peekToken(index).tokenKind === 27 /* FunctionKeyword */;
};
ParserImpl.prototype.parseFunctionDeclaration = function () {
var modifiers = this.parseModifiers();
var functionKeyword = this.eatKeyword(27 /* FunctionKeyword */);
var identifier = this.eatIdentifierToken();
var callSignature = this.parseCallSignature(false);
var parseBlockEvenWithNoOpenBrace = false;
var newCallSignature = this.tryAddUnexpectedEqualsGreaterThanToken(callSignature);
if (newCallSignature !== callSignature) {
parseBlockEvenWithNoOpenBrace = true;
callSignature = newCallSignature;
}
var semicolonToken = null;
var block = null;
if (parseBlockEvenWithNoOpenBrace || this.isBlock()) {
block = this.parseBlock(parseBlockEvenWithNoOpenBrace, true);
} else {
semicolonToken = this.eatExplicitOrAutomaticSemicolon(false);
}
return this.factory.functionDeclaration(modifiers, functionKeyword, identifier, callSignature, block, semicolonToken);
};
ParserImpl.prototype.isModuleDeclaration = function (modifierCount) {
if (modifierCount > 0 && this.peekToken(modifierCount).tokenKind === 65 /* ModuleKeyword */) {
return true;
}
if (this.currentToken().tokenKind === 65 /* ModuleKeyword */) {
var token1 = this.peekToken(1);
return this.isIdentifier(token1) || token1.tokenKind === 14 /* StringLiteral */;
}
return false;
};
ParserImpl.prototype.parseModuleDeclaration = function () {
var modifiers = this.parseModifiers();
var moduleKeyword = this.eatKeyword(65 /* ModuleKeyword */);
var moduleName = null;
var stringLiteral = null;
if (this.currentToken().tokenKind === 14 /* StringLiteral */) {
stringLiteral = this.eatToken(14 /* StringLiteral */);
} else {
moduleName = this.parseName();
}
var openBraceToken = this.eatToken(70 /* OpenBraceToken */);
var moduleElements = TypeScript.Syntax.emptyList;
if (openBraceToken.width() > 0) {
var result = this.parseSyntaxList(4 /* ModuleDeclaration_ModuleElements */);
moduleElements = result.list;
openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens);
}
var closeBraceToken = this.eatToken(71 /* CloseBraceToken */);
return this.factory.moduleDeclaration(modifiers, moduleKeyword, moduleName, stringLiteral, openBraceToken, moduleElements, closeBraceToken);
};
ParserImpl.prototype.isInterfaceDeclaration = function (modifierCount) {
if (modifierCount > 0 && this.peekToken(modifierCount).tokenKind === 52 /* InterfaceKeyword */) {
return true;
}
return this.currentToken().tokenKind === 52 /* InterfaceKeyword */ && this.isIdentifier(this.peekToken(1));
};
ParserImpl.prototype.parseInterfaceDeclaration = function () {
var modifiers = this.parseModifiers();
var interfaceKeyword = this.eatKeyword(52 /* InterfaceKeyword */);
var identifier = this.eatIdentifierToken();
var typeParameterList = this.parseOptionalTypeParameterList(false);
var heritageClauses = this.parseHeritageClauses();
var objectType = this.parseObjectType();
return this.factory.interfaceDeclaration(modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, objectType);
};
ParserImpl.prototype.parseObjectType = function () {
var openBraceToken = this.eatToken(70 /* OpenBraceToken */);
var typeMembers = TypeScript.Syntax.emptySeparatedList;
if (openBraceToken.width() > 0) {
var result = this.parseSeparatedSyntaxList(512 /* ObjectType_TypeMembers */);
typeMembers = result.list;
openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens);
}
var closeBraceToken = this.eatToken(71 /* CloseBraceToken */);
return this.factory.objectType(openBraceToken, typeMembers, closeBraceToken);
};
ParserImpl.prototype.isTypeMember = function (inErrorRecovery) {
if (this.currentNode() !== null && this.currentNode().isTypeMember()) {
return true;
}
return this.isCallSignature(0) || this.isConstructSignature() || this.isIndexSignature(0) || this.isMethodSignature(inErrorRecovery) || this.isPropertySignature(inErrorRecovery);
};
ParserImpl.prototype.parseTypeMember = function (inErrorRecovery) {
if (this.currentNode() !== null && this.currentNode().isTypeMember()) {
return this.eatNode();
}
if (this.isCallSignature(0)) {
return this.parseCallSignature(false);
} else if (this.isConstructSignature()) {
return this.parseConstructSignature();
} else if (this.isIndexSignature(0)) {
return this.parseIndexSignature();
} else if (this.isMethodSignature(inErrorRecovery)) {
return this.parseMethodSignature();
} else if (this.isPropertySignature(inErrorRecovery)) {
return this.parsePropertySignature();
} else {
throw TypeScript.Errors.invalidOperation();
}
};
ParserImpl.prototype.parseConstructSignature = function () {
var newKeyword = this.eatKeyword(31 /* NewKeyword */);
var callSignature = this.parseCallSignature(false);
return this.factory.constructSignature(newKeyword, callSignature);
};
ParserImpl.prototype.parseIndexSignature = function () {
var openBracketToken = this.eatToken(74 /* OpenBracketToken */);
var parameter = this.parseParameter();
var closeBracketToken = this.eatToken(75 /* CloseBracketToken */);
var typeAnnotation = this.parseOptionalTypeAnnotation(false);
return this.factory.indexSignature(openBracketToken, parameter, closeBracketToken, typeAnnotation);
};
ParserImpl.prototype.parseMethodSignature = function () {
var propertyName = this.eatPropertyName();
var questionToken = this.tryEatToken(105 /* QuestionToken */);
var callSignature = this.parseCallSignature(false);
return this.factory.methodSignature(propertyName, questionToken, callSignature);
};
ParserImpl.prototype.parsePropertySignature = function () {
var propertyName = this.eatPropertyName();
var questionToken = this.tryEatToken(105 /* QuestionToken */);
var typeAnnotation = this.parseOptionalTypeAnnotation(false);
return this.factory.propertySignature(propertyName, questionToken, typeAnnotation);
};
ParserImpl.prototype.isCallSignature = function (tokenIndex) {
var tokenKind = this.peekToken(tokenIndex).tokenKind;
return tokenKind === 72 /* OpenParenToken */ || tokenKind === 80 /* LessThanToken */;
};
ParserImpl.prototype.isConstructSignature = function () {
if (this.currentToken().tokenKind !== 31 /* NewKeyword */) {
return false;
}
var token1 = this.peekToken(1);
return token1.tokenKind === 80 /* LessThanToken */ || token1.tokenKind === 72 /* OpenParenToken */;
};
ParserImpl.prototype.isIndexSignature = function (tokenIndex) {
return this.peekToken(tokenIndex).tokenKind === 74 /* OpenBracketToken */;
};
ParserImpl.prototype.isMethodSignature = function (inErrorRecovery) {
if (this.isPropertyName(this.currentToken(), inErrorRecovery)) {
if (this.isCallSignature(1)) {
return true;
}
if (this.peekToken(1).tokenKind === 105 /* QuestionToken */ && this.isCallSignature(2)) {
return true;
}
}
return false;
};
ParserImpl.prototype.isPropertySignature = function (inErrorRecovery) {
var currentToken = this.currentToken();
if (ParserImpl.isModifier(currentToken) && !currentToken.hasTrailingNewLine() && this.isPropertyName(this.peekToken(1), inErrorRecovery)) {
return false;
}
return this.isPropertyName(currentToken, inErrorRecovery);
};
ParserImpl.prototype.isHeritageClause = function () {
var token0 = this.currentToken();
return token0.tokenKind === 48 /* ExtendsKeyword */ || token0.tokenKind === 51 /* ImplementsKeyword */;
};
ParserImpl.prototype.isNotHeritageClauseTypeName = function () {
if (this.currentToken().tokenKind === 51 /* ImplementsKeyword */ || this.currentToken().tokenKind === 48 /* ExtendsKeyword */) {
return this.isIdentifier(this.peekToken(1));
}
return false;
};
ParserImpl.prototype.isHeritageClauseTypeName = function () {
if (this.isIdentifier(this.currentToken())) {
return !this.isNotHeritageClauseTypeName();
}
return false;
};
ParserImpl.prototype.parseHeritageClause = function () {
var extendsOrImplementsKeyword = this.eatAnyToken();
TypeScript.Debug.assert(extendsOrImplementsKeyword.tokenKind === 48 /* ExtendsKeyword */ || extendsOrImplementsKeyword.tokenKind === 51 /* ImplementsKeyword */);
var result = this.parseSeparatedSyntaxList(2048 /* HeritageClause_TypeNameList */);
var typeNames = result.list;
extendsOrImplementsKeyword = this.addSkippedTokensAfterToken(extendsOrImplementsKeyword, result.skippedTokens);
return this.factory.heritageClause(extendsOrImplementsKeyword.tokenKind === 48 /* ExtendsKeyword */ ? 230 /* ExtendsHeritageClause */ : 231 /* ImplementsHeritageClause */, extendsOrImplementsKeyword, typeNames);
};
ParserImpl.prototype.isStatement = function (inErrorRecovery) {
if (this.currentNode() !== null && this.currentNode().isStatement()) {
return true;
}
var currentToken = this.currentToken();
var currentTokenKind = currentToken.tokenKind;
switch (currentTokenKind) {
case 57 /* PublicKeyword */:
case 55 /* PrivateKeyword */:
case 58 /* StaticKeyword */:
var token1 = this.peekToken(1);
if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token1)) {
return false;
}
break;
case 28 /* IfKeyword */:
case 70 /* OpenBraceToken */:
case 33 /* ReturnKeyword */:
case 34 /* SwitchKeyword */:
case 36 /* ThrowKeyword */:
case 15 /* BreakKeyword */:
case 18 /* ContinueKeyword */:
case 26 /* ForKeyword */:
case 42 /* WhileKeyword */:
case 43 /* WithKeyword */:
case 22 /* DoKeyword */:
case 38 /* TryKeyword */:
case 19 /* DebuggerKeyword */:
return true;
}
if (this.isInterfaceDeclaration(0) || this.isClassDeclaration(0) || this.isEnumDeclaration(0) || this.isModuleDeclaration(0)) {
return false;
}
return this.isLabeledStatement(currentToken) || this.isVariableStatement() || this.isFunctionDeclaration() || this.isEmptyStatement(currentToken, inErrorRecovery) || this.isExpressionStatement(currentToken);
};
ParserImpl.prototype.parseStatement = function (inErrorRecovery) {
if (this.currentNode() !== null && this.currentNode().isStatement()) {
return this.eatNode();
}
var currentToken = this.currentToken();
var currentTokenKind = currentToken.tokenKind;
switch (currentTokenKind) {
case 28 /* IfKeyword */:
return this.parseIfStatement();
case 70 /* OpenBraceToken */:
return this.parseBlock(false, false);
case 33 /* ReturnKeyword */:
return this.parseReturnStatement();
case 34 /* SwitchKeyword */:
return this.parseSwitchStatement();
case 36 /* ThrowKeyword */:
return this.parseThrowStatement();
case 15 /* BreakKeyword */:
return this.parseBreakStatement();
case 18 /* ContinueKeyword */:
return this.parseContinueStatement();
case 26 /* ForKeyword */:
return this.parseForOrForInStatement();
case 42 /* WhileKeyword */:
return this.parseWhileStatement();
case 43 /* WithKeyword */:
return this.parseWithStatement();
case 22 /* DoKeyword */:
return this.parseDoStatement();
case 38 /* TryKeyword */:
return this.parseTryStatement();
case 19 /* DebuggerKeyword */:
return this.parseDebuggerStatement();
}
if (this.isVariableStatement()) {
return this.parseVariableStatement();
} else if (this.isLabeledStatement(currentToken)) {
return this.parseLabeledStatement();
} else if (this.isFunctionDeclaration()) {
return this.parseFunctionDeclaration();
} else if (this.isEmptyStatement(currentToken, inErrorRecovery)) {
return this.parseEmptyStatement();
} else {
return this.parseExpressionStatement();
}
};
ParserImpl.prototype.parseDebuggerStatement = function () {
var debuggerKeyword = this.eatKeyword(19 /* DebuggerKeyword */);
var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false);
return this.factory.debuggerStatement(debuggerKeyword, semicolonToken);
};
ParserImpl.prototype.parseDoStatement = function () {
var doKeyword = this.eatKeyword(22 /* DoKeyword */);
var statement = this.parseStatement(false);
var whileKeyword = this.eatKeyword(42 /* WhileKeyword */);
var openParenToken = this.eatToken(72 /* OpenParenToken */);
var condition = this.parseExpression(true);
var closeParenToken = this.eatToken(73 /* CloseParenToken */);
var semicolonToken = this.eatExplicitOrAutomaticSemicolon(true);
return this.factory.doStatement(doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken);
};
ParserImpl.prototype.isLabeledStatement = function (currentToken) {
return this.isIdentifier(currentToken) && this.peekToken(1).tokenKind === 106 /* ColonToken */;
};
ParserImpl.prototype.parseLabeledStatement = function () {
var identifier = this.eatIdentifierToken();
var colonToken = this.eatToken(106 /* ColonToken */);
var statement = this.parseStatement(false);
return this.factory.labeledStatement(identifier, colonToken, statement);
};
ParserImpl.prototype.parseTryStatement = function () {
var tryKeyword = this.eatKeyword(38 /* TryKeyword */);
var savedListParsingState = this.listParsingState;
this.listParsingState |= 64 /* TryBlock_Statements */;
var block = this.parseBlock(false, false);
this.listParsingState = savedListParsingState;
var catchClause = null;
if (this.isCatchClause()) {
catchClause = this.parseCatchClause();
}
var finallyClause = null;
if (catchClause === null || this.isFinallyClause()) {
finallyClause = this.parseFinallyClause();
}
return this.factory.tryStatement(tryKeyword, block, catchClause, finallyClause);
};
ParserImpl.prototype.isCatchClause = function () {
return this.currentToken().tokenKind === 17 /* CatchKeyword */;
};
ParserImpl.prototype.parseCatchClause = function () {
var catchKeyword = this.eatKeyword(17 /* CatchKeyword */);
var openParenToken = this.eatToken(72 /* OpenParenToken */);
var identifier = this.eatIdentifierToken();
var typeAnnotation = this.parseOptionalTypeAnnotation(false);
var closeParenToken = this.eatToken(73 /* CloseParenToken */);
var savedListParsingState = this.listParsingState;
this.listParsingState |= 128 /* CatchBlock_Statements */;
var block = this.parseBlock(false, false);
this.listParsingState = savedListParsingState;
return this.factory.catchClause(catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block);
};
ParserImpl.prototype.isFinallyClause = function () {
return this.currentToken().tokenKind === 25 /* FinallyKeyword */;
};
ParserImpl.prototype.parseFinallyClause = function () {
var finallyKeyword = this.eatKeyword(25 /* FinallyKeyword */);
var block = this.parseBlock(false, false);
return this.factory.finallyClause(finallyKeyword, block);
};
ParserImpl.prototype.parseWithStatement = function () {
var withKeyword = this.eatKeyword(43 /* WithKeyword */);
var openParenToken = this.eatToken(72 /* OpenParenToken */);
var condition = this.parseExpression(true);
var closeParenToken = this.eatToken(73 /* CloseParenToken */);
var statement = this.parseStatement(false);
return this.factory.withStatement(withKeyword, openParenToken, condition, closeParenToken, statement);
};
ParserImpl.prototype.parseWhileStatement = function () {
var whileKeyword = this.eatKeyword(42 /* WhileKeyword */);
var openParenToken = this.eatToken(72 /* OpenParenToken */);
var condition = this.parseExpression(true);
var closeParenToken = this.eatToken(73 /* CloseParenToken */);
var statement = this.parseStatement(false);
return this.factory.whileStatement(whileKeyword, openParenToken, condition, closeParenToken, statement);
};
ParserImpl.prototype.isEmptyStatement = function (currentToken, inErrorRecovery) {
if (inErrorRecovery) {
return false;
}
return currentToken.tokenKind === 78 /* SemicolonToken */;
};
ParserImpl.prototype.parseEmptyStatement = function () {
var semicolonToken = this.eatToken(78 /* SemicolonToken */);
return this.factory.emptyStatement(semicolonToken);
};
ParserImpl.prototype.parseForOrForInStatement = function () {
var forKeyword = this.eatKeyword(26 /* ForKeyword */);
var openParenToken = this.eatToken(72 /* OpenParenToken */);
var currentToken = this.currentToken();
if (currentToken.tokenKind === 40 /* VarKeyword */) {
return this.parseForOrForInStatementWithVariableDeclaration(forKeyword, openParenToken);
} else if (currentToken.tokenKind === 78 /* SemicolonToken */) {
return this.parseForStatementWithNoVariableDeclarationOrInitializer(forKeyword, openParenToken);
} else {
return this.parseForOrForInStatementWithInitializer(forKeyword, openParenToken);
}
};
ParserImpl.prototype.parseForOrForInStatementWithVariableDeclaration = function (forKeyword, openParenToken) {
var variableDeclaration = this.parseVariableDeclaration(false);
if (this.currentToken().tokenKind === 29 /* InKeyword */) {
return this.parseForInStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, variableDeclaration, null);
}
return this.parseForStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, variableDeclaration, null);
};
ParserImpl.prototype.parseForInStatementWithVariableDeclarationOrInitializer = function (forKeyword, openParenToken, variableDeclaration, initializer) {
var inKeyword = this.eatKeyword(29 /* InKeyword */);
var expression = this.parseExpression(true);
var closeParenToken = this.eatToken(73 /* CloseParenToken */);
var statement = this.parseStatement(false);
return this.factory.forInStatement(forKeyword, openParenToken, variableDeclaration, initializer, inKeyword, expression, closeParenToken, statement);
};
ParserImpl.prototype.parseForOrForInStatementWithInitializer = function (forKeyword, openParenToken) {
var initializer = this.parseExpression(false);
if (this.currentToken().tokenKind === 29 /* InKeyword */) {
return this.parseForInStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, null, initializer);
} else {
return this.parseForStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, null, initializer);
}
};
ParserImpl.prototype.parseForStatementWithNoVariableDeclarationOrInitializer = function (forKeyword, openParenToken) {
return this.parseForStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, null, null);
};
ParserImpl.prototype.parseForStatementWithVariableDeclarationOrInitializer = function (forKeyword, openParenToken, variableDeclaration, initializer) {
var firstSemicolonToken = this.eatToken(78 /* SemicolonToken */);
var condition = null;
if (this.currentToken().tokenKind !== 78 /* SemicolonToken */ && this.currentToken().tokenKind !== 73 /* CloseParenToken */ && this.currentToken().tokenKind !== 10 /* EndOfFileToken */) {
condition = this.parseExpression(true);
}
var secondSemicolonToken = this.eatToken(78 /* SemicolonToken */);
var incrementor = null;
if (this.currentToken().tokenKind !== 73 /* CloseParenToken */ && this.currentToken().tokenKind !== 10 /* EndOfFileToken */) {
incrementor = this.parseExpression(true);
}
var closeParenToken = this.eatToken(73 /* CloseParenToken */);
var statement = this.parseStatement(false);
return this.factory.forStatement(forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement);
};
ParserImpl.prototype.parseBreakStatement = function () {
var breakKeyword = this.eatKeyword(15 /* BreakKeyword */);
var identifier = null;
if (!this.canEatExplicitOrAutomaticSemicolon(false)) {
if (this.isIdentifier(this.currentToken())) {
identifier = this.eatIdentifierToken();
}
}
var semicolon = this.eatExplicitOrAutomaticSemicolon(false);
return this.factory.breakStatement(breakKeyword, identifier, semicolon);
};
ParserImpl.prototype.parseContinueStatement = function () {
var continueKeyword = this.eatKeyword(18 /* ContinueKeyword */);
var identifier = null;
if (!this.canEatExplicitOrAutomaticSemicolon(false)) {
if (this.isIdentifier(this.currentToken())) {
identifier = this.eatIdentifierToken();
}
}
var semicolon = this.eatExplicitOrAutomaticSemicolon(false);
return this.factory.continueStatement(continueKeyword, identifier, semicolon);
};
ParserImpl.prototype.parseSwitchStatement = function () {
var switchKeyword = this.eatKeyword(34 /* SwitchKeyword */);
var openParenToken = this.eatToken(72 /* OpenParenToken */);
var expression = this.parseExpression(true);
var closeParenToken = this.eatToken(73 /* CloseParenToken */);
var openBraceToken = this.eatToken(70 /* OpenBraceToken */);
var switchClauses = TypeScript.Syntax.emptyList;
if (openBraceToken.width() > 0) {
var result = this.parseSyntaxList(8 /* SwitchStatement_SwitchClauses */);
switchClauses = result.list;
openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens);
}
var closeBraceToken = this.eatToken(71 /* CloseBraceToken */);
return this.factory.switchStatement(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken);
};
ParserImpl.prototype.isCaseSwitchClause = function () {
return this.currentToken().tokenKind === 16 /* CaseKeyword */;
};
ParserImpl.prototype.isDefaultSwitchClause = function () {
return this.currentToken().tokenKind === 20 /* DefaultKeyword */;
};
ParserImpl.prototype.isSwitchClause = function () {
if (this.currentNode() !== null && this.currentNode().isSwitchClause()) {
return true;
}
return this.isCaseSwitchClause() || this.isDefaultSwitchClause();
};
ParserImpl.prototype.parseSwitchClause = function () {
if (this.currentNode() !== null && this.currentNode().isSwitchClause()) {
return this.eatNode();
}
if (this.isCaseSwitchClause()) {
return this.parseCaseSwitchClause();
} else if (this.isDefaultSwitchClause()) {
return this.parseDefaultSwitchClause();
} else {
throw TypeScript.Errors.invalidOperation();
}
};
ParserImpl.prototype.parseCaseSwitchClause = function () {
var caseKeyword = this.eatKeyword(16 /* CaseKeyword */);
var expression = this.parseExpression(true);
var colonToken = this.eatToken(106 /* ColonToken */);
var statements = TypeScript.Syntax.emptyList;
if (colonToken.fullWidth() > 0) {
var result = this.parseSyntaxList(16 /* SwitchClause_Statements */);
statements = result.list;
colonToken = this.addSkippedTokensAfterToken(colonToken, result.skippedTokens);
}
return this.factory.caseSwitchClause(caseKeyword, expression, colonToken, statements);
};
ParserImpl.prototype.parseDefaultSwitchClause = function () {
var defaultKeyword = this.eatKeyword(20 /* DefaultKeyword */);
var colonToken = this.eatToken(106 /* ColonToken */);
var statements = TypeScript.Syntax.emptyList;
if (colonToken.fullWidth() > 0) {
var result = this.parseSyntaxList(16 /* SwitchClause_Statements */);
statements = result.list;
colonToken = this.addSkippedTokensAfterToken(colonToken, result.skippedTokens);
}
return this.factory.defaultSwitchClause(defaultKeyword, colonToken, statements);
};
ParserImpl.prototype.parseThrowStatement = function () {
var throwKeyword = this.eatKeyword(36 /* ThrowKeyword */);
var expression = null;
if (this.canEatExplicitOrAutomaticSemicolon(false)) {
var token = this.createMissingToken(11 /* IdentifierName */, null);
expression = token;
} else {
expression = this.parseExpression(true);
}
var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false);
return this.factory.throwStatement(throwKeyword, expression, semicolonToken);
};
ParserImpl.prototype.parseReturnStatement = function () {
var returnKeyword = this.eatKeyword(33 /* ReturnKeyword */);
var expression = null;
if (!this.canEatExplicitOrAutomaticSemicolon(false)) {
expression = this.parseExpression(true);
}
var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false);
return this.factory.returnStatement(returnKeyword, expression, semicolonToken);
};
ParserImpl.prototype.isExpressionStatement = function (currentToken) {
var kind = currentToken.tokenKind;
if (kind === 70 /* OpenBraceToken */ || kind === 27 /* FunctionKeyword */) {
return false;
}
return this.isExpression(currentToken);
};
ParserImpl.prototype.isAssignmentOrOmittedExpression = function () {
var currentToken = this.currentToken();
if (currentToken.tokenKind === 79 /* CommaToken */) {
return true;
}
return this.isExpression(currentToken);
};
ParserImpl.prototype.parseAssignmentOrOmittedExpression = function () {
if (this.currentToken().tokenKind === 79 /* CommaToken */) {
return this.factory.omittedExpression();
}
return this.parseAssignmentExpression(true);
};
ParserImpl.prototype.isExpression = function (currentToken) {
switch (currentToken.tokenKind) {
case 13 /* NumericLiteral */:
case 14 /* StringLiteral */:
case 12 /* RegularExpressionLiteral */:
case 74 /* OpenBracketToken */:
case 72 /* OpenParenToken */:
case 80 /* LessThanToken */:
case 93 /* PlusPlusToken */:
case 94 /* MinusMinusToken */:
case 89 /* PlusToken */:
case 90 /* MinusToken */:
case 102 /* TildeToken */:
case 101 /* ExclamationToken */:
case 70 /* OpenBraceToken */:
case 85 /* EqualsGreaterThanToken */:
case 118 /* SlashToken */:
case 119 /* SlashEqualsToken */:
case 50 /* SuperKeyword */:
case 35 /* ThisKeyword */:
case 37 /* TrueKeyword */:
case 24 /* FalseKeyword */:
case 32 /* NullKeyword */:
case 31 /* NewKeyword */:
case 21 /* DeleteKeyword */:
case 41 /* VoidKeyword */:
case 39 /* TypeOfKeyword */:
case 27 /* FunctionKeyword */:
return true;
}
return this.isIdentifier(currentToken);
};
ParserImpl.prototype.parseExpressionStatement = function () {
var expression = this.parseExpression(true);
var semicolon = this.eatExplicitOrAutomaticSemicolon(false);
return this.factory.expressionStatement(expression, semicolon);
};
ParserImpl.prototype.parseIfStatement = function () {
var ifKeyword = this.eatKeyword(28 /* IfKeyword */);
var openParenToken = this.eatToken(72 /* OpenParenToken */);
var condition = this.parseExpression(true);
var closeParenToken = this.eatToken(73 /* CloseParenToken */);
var statement = this.parseStatement(false);
var elseClause = null;
if (this.isElseClause()) {
elseClause = this.parseElseClause();
}
return this.factory.ifStatement(ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause);
};
ParserImpl.prototype.isElseClause = function () {
return this.currentToken().tokenKind === 23 /* ElseKeyword */;
};
ParserImpl.prototype.parseElseClause = function () {
var elseKeyword = this.eatKeyword(23 /* ElseKeyword */);
var statement = this.parseStatement(false);
return this.factory.elseClause(elseKeyword, statement);
};
ParserImpl.prototype.isVariableStatement = function () {
var index = this.modifierCount();
return this.peekToken(index).tokenKind === 40 /* VarKeyword */;
};
ParserImpl.prototype.parseVariableStatement = function () {
var modifiers = this.parseModifiers();
var variableDeclaration = this.parseVariableDeclaration(true);
var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false);
return this.factory.variableStatement(modifiers, variableDeclaration, semicolonToken);
};
ParserImpl.prototype.parseVariableDeclaration = function (allowIn) {
var varKeyword = this.eatKeyword(40 /* VarKeyword */);
var listParsingState = allowIn ? 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */ : 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */;
var result = this.parseSeparatedSyntaxList(listParsingState);
var variableDeclarators = result.list;
varKeyword = this.addSkippedTokensAfterToken(varKeyword, result.skippedTokens);
return this.factory.variableDeclaration(varKeyword, variableDeclarators);
};
ParserImpl.prototype.isVariableDeclarator = function () {
if (this.currentNode() !== null && this.currentNode().kind() === 225 /* VariableDeclarator */) {
return true;
}
return this.isIdentifier(this.currentToken());
};
ParserImpl.prototype.canReuseVariableDeclaratorNode = function (node) {
if (node === null || node.kind() !== 225 /* VariableDeclarator */) {
return false;
}
var variableDeclarator = node;
return variableDeclarator.equalsValueClause === null;
};
ParserImpl.prototype.parseVariableDeclarator = function (allowIn, allowPropertyName) {
if (this.canReuseVariableDeclaratorNode(this.currentNode())) {
return this.eatNode();
}
var propertyName = allowPropertyName ? this.eatPropertyName() : this.eatIdentifierToken();
var equalsValueClause = null;
var typeAnnotation = null;
if (propertyName.width() > 0) {
typeAnnotation = this.parseOptionalTypeAnnotation(false);
if (this.isEqualsValueClause(false)) {
equalsValueClause = this.parseEqualsValueClause(allowIn);
}
}
return this.factory.variableDeclarator(propertyName, typeAnnotation, equalsValueClause);
};
ParserImpl.prototype.isColonValueClause = function () {
return this.currentToken().tokenKind === 106 /* ColonToken */;
};
ParserImpl.prototype.isEqualsValueClause = function (inParameter) {
var token0 = this.currentToken();
if (token0.tokenKind === 107 /* EqualsToken */) {
return true;
}
if (!this.previousToken().hasTrailingNewLine()) {
if (token0.tokenKind === 85 /* EqualsGreaterThanToken */) {
return false;
}
if (token0.tokenKind === 70 /* OpenBraceToken */ && inParameter) {
return false;
}
return this.isExpression(token0);
}
return false;
};
ParserImpl.prototype.parseEqualsValueClause = function (allowIn) {
var equalsToken = this.eatToken(107 /* EqualsToken */);
var value = this.parseAssignmentExpression(allowIn);
return this.factory.equalsValueClause(equalsToken, value);
};
ParserImpl.prototype.parseExpression = function (allowIn) {
return this.parseSubExpression(0, allowIn);
};
ParserImpl.prototype.parseAssignmentExpression = function (allowIn) {
return this.parseSubExpression(2 /* AssignmentExpressionPrecedence */, allowIn);
};
ParserImpl.prototype.parseUnaryExpressionOrLower = function () {
var currentTokenKind = this.currentToken().tokenKind;
if (TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken(currentTokenKind)) {
var operatorKind = TypeScript.SyntaxFacts.getPrefixUnaryExpressionFromOperatorToken(currentTokenKind);
var operatorToken = this.eatAnyToken();
var operand = this.parseUnaryExpressionOrLower();
return this.factory.prefixUnaryExpression(operatorKind, operatorToken, operand);
} else if (currentTokenKind === 39 /* TypeOfKeyword */) {
return this.parseTypeOfExpression();
} else if (currentTokenKind === 41 /* VoidKeyword */) {
return this.parseVoidExpression();
} else if (currentTokenKind === 21 /* DeleteKeyword */) {
return this.parseDeleteExpression();
} else if (currentTokenKind === 80 /* LessThanToken */) {
return this.parseCastExpression();
} else {
return this.parsePostfixExpressionOrLower();
}
};
ParserImpl.prototype.parseSubExpression = function (precedence, allowIn) {
if (precedence <= 2 /* AssignmentExpressionPrecedence */) {
if (this.isSimpleArrowFunctionExpression()) {
return this.parseSimpleArrowFunctionExpression();
}
var parethesizedArrowFunction = this.tryParseParenthesizedArrowFunctionExpression();
if (parethesizedArrowFunction !== null) {
return parethesizedArrowFunction;
}
}
var leftOperand = this.parseUnaryExpressionOrLower();
return this.parseBinaryOrConditionalExpressions(precedence, allowIn, leftOperand);
};
ParserImpl.prototype.parseBinaryOrConditionalExpressions = function (precedence, allowIn, leftOperand) {
while (true) {
var token0 = this.currentToken();
var token0Kind = token0.tokenKind;
if (TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken(token0Kind)) {
if (token0Kind === 29 /* InKeyword */ && !allowIn) {
break;
}
var mergedToken = this.tryMergeBinaryExpressionTokens();
var tokenKind = mergedToken === null ? token0Kind : mergedToken.syntaxKind;
var binaryExpressionKind = TypeScript.SyntaxFacts.getBinaryExpressionFromOperatorToken(tokenKind);
var newPrecedence = ParserImpl.getPrecedence(binaryExpressionKind);
if (newPrecedence < precedence) {
break;
}
if (newPrecedence === precedence && !this.isRightAssociative(binaryExpressionKind)) {
break;
}
var operatorToken = mergedToken === null ? token0 : TypeScript.Syntax.token(mergedToken.syntaxKind).withLeadingTrivia(token0.leadingTrivia()).withTrailingTrivia(this.peekToken(mergedToken.tokenCount - 1).trailingTrivia());
var skipCount = mergedToken === null ? 1 : mergedToken.tokenCount;
for (var i = 0; i < skipCount; i++) {
this.eatAnyToken();
}
leftOperand = this.factory.binaryExpression(binaryExpressionKind, leftOperand, operatorToken, this.parseSubExpression(newPrecedence, allowIn));
continue;
}
if (token0Kind === 105 /* QuestionToken */ && precedence <= 3 /* ConditionalExpressionPrecedence */) {
var questionToken = this.eatToken(105 /* QuestionToken */);
var whenTrueExpression = this.parseAssignmentExpression(allowIn);
var colon = this.eatToken(106 /* ColonToken */);
var whenFalseExpression = this.parseAssignmentExpression(allowIn);
leftOperand = this.factory.conditionalExpression(leftOperand, questionToken, whenTrueExpression, colon, whenFalseExpression);
continue;
}
break;
}
return leftOperand;
};
ParserImpl.prototype.tryMergeBinaryExpressionTokens = function () {
var token0 = this.currentToken();
if (token0.tokenKind === 81 /* GreaterThanToken */ && !token0.hasTrailingTrivia()) {
var storage = this.mergeTokensStorage;
storage[0] = 0 /* None */;
storage[1] = 0 /* None */;
storage[2] = 0 /* None */;
for (var i = 0; i < storage.length; i++) {
var nextToken = this.peekToken(i + 1);
if (!nextToken.hasLeadingTrivia()) {
storage[i] = nextToken.tokenKind;
}
if (nextToken.hasTrailingTrivia()) {
break;
}
}
if (storage[0] === 81 /* GreaterThanToken */) {
if (storage[1] === 81 /* GreaterThanToken */) {
if (storage[2] === 107 /* EqualsToken */) {
return { tokenCount: 4, syntaxKind: 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */ };
} else {
return { tokenCount: 3, syntaxKind: 97 /* GreaterThanGreaterThanGreaterThanToken */ };
}
} else if (storage[1] === 107 /* EqualsToken */) {
return { tokenCount: 3, syntaxKind: 113 /* GreaterThanGreaterThanEqualsToken */ };
} else {
return { tokenCount: 2, syntaxKind: 96 /* GreaterThanGreaterThanToken */ };
}
} else if (storage[0] === 107 /* EqualsToken */) {
return { tokenCount: 2, syntaxKind: 83 /* GreaterThanEqualsToken */ };
}
}
return null;
};
ParserImpl.prototype.isRightAssociative = function (expressionKind) {
switch (expressionKind) {
case 174 /* AssignmentExpression */:
case 175 /* AddAssignmentExpression */:
case 176 /* SubtractAssignmentExpression */:
case 177 /* MultiplyAssignmentExpression */:
case 178 /* DivideAssignmentExpression */:
case 179 /* ModuloAssignmentExpression */:
case 180 /* AndAssignmentExpression */:
case 181 /* ExclusiveOrAssignmentExpression */:
case 182 /* OrAssignmentExpression */:
case 183 /* LeftShiftAssignmentExpression */:
case 184 /* SignedRightShiftAssignmentExpression */:
case 185 /* UnsignedRightShiftAssignmentExpression */:
return true;
default:
return false;
}
};
ParserImpl.prototype.parseMemberExpressionOrLower = function (inObjectCreation) {
if (this.currentToken().tokenKind === 31 /* NewKeyword */) {
return this.parseObjectCreationExpression();
}
var expression = this.parsePrimaryExpression();
if (expression === null) {
return this.eatIdentifierToken();
}
return this.parseMemberExpressionRest(expression, false, inObjectCreation);
};
ParserImpl.prototype.parseCallExpressionOrLower = function () {
var expression;
if (this.currentToken().tokenKind === 50 /* SuperKeyword */) {
expression = this.eatKeyword(50 /* SuperKeyword */);
var currentTokenKind = this.currentToken().tokenKind;
if (currentTokenKind !== 72 /* OpenParenToken */ && currentTokenKind !== 76 /* DotToken */) {
expression = this.factory.memberAccessExpression(expression, this.eatToken(76 /* DotToken */), this.eatIdentifierNameToken());
}
} else {
expression = this.parseMemberExpressionOrLower(false);
}
return this.parseMemberExpressionRest(expression, true, false);
};
ParserImpl.prototype.parseMemberExpressionRest = function (expression, allowArguments, inObjectCreation) {
while (true) {
var currentTokenKind = this.currentToken().tokenKind;
switch (currentTokenKind) {
case 72 /* OpenParenToken */:
if (!allowArguments) {
return expression;
}
expression = this.factory.invocationExpression(expression, this.parseArgumentList(null));
continue;
case 80 /* LessThanToken */:
if (!allowArguments) {
return expression;
}
var argumentList = this.tryParseArgumentList();
if (argumentList !== null) {
expression = this.factory.invocationExpression(expression, argumentList);
continue;
}
break;
case 74 /* OpenBracketToken */:
expression = this.parseElementAccessExpression(expression, inObjectCreation);
continue;
case 76 /* DotToken */:
expression = this.factory.memberAccessExpression(expression, this.eatToken(76 /* DotToken */), this.eatIdentifierNameToken());
continue;
}
return expression;
}
};
ParserImpl.prototype.parseLeftHandSideExpressionOrLower = function () {
if (this.currentToken().tokenKind === 31 /* NewKeyword */) {
return this.parseObjectCreationExpression();
} else {
return this.parseCallExpressionOrLower();
}
};
ParserImpl.prototype.parsePostfixExpressionOrLower = function () {
var expression = this.parseLeftHandSideExpressionOrLower();
if (expression === null) {
return this.eatIdentifierToken();
}
var currentTokenKind = this.currentToken().tokenKind;
switch (currentTokenKind) {
case 93 /* PlusPlusToken */:
case 94 /* MinusMinusToken */:
if (this.previousToken() !== null && this.previousToken().hasTrailingNewLine()) {
break;
}
return this.factory.postfixUnaryExpression(TypeScript.SyntaxFacts.getPostfixUnaryExpressionFromOperatorToken(currentTokenKind), expression, this.eatAnyToken());
}
return expression;
};
ParserImpl.prototype.tryParseGenericArgumentList = function () {
var rewindPoint = this.getRewindPoint();
var typeArgumentList = this.tryParseTypeArgumentList(true);
var token0 = this.currentToken();
var isOpenParen = token0.tokenKind === 72 /* OpenParenToken */;
var isDot = token0.tokenKind === 76 /* DotToken */;
var isOpenParenOrDot = isOpenParen || isDot;
var argumentList = null;
if (typeArgumentList === null || !isOpenParenOrDot) {
this.rewind(rewindPoint);
this.releaseRewindPoint(rewindPoint);
return null;
} else {
this.releaseRewindPoint(rewindPoint);
if (isDot) {
var diagnostic = new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token0.width(), TypeScript.DiagnosticCode.A_parameter_list_must_follow_a_generic_type_argument_list_expected, null);
this.addDiagnostic(diagnostic);
return this.factory.argumentList(typeArgumentList, TypeScript.Syntax.emptyToken(72 /* OpenParenToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.emptyToken(73 /* CloseParenToken */));
} else {
return this.parseArgumentList(typeArgumentList);
}
}
};
ParserImpl.prototype.tryParseArgumentList = function () {
if (this.currentToken().tokenKind === 80 /* LessThanToken */) {
return this.tryParseGenericArgumentList();
}
if (this.currentToken().tokenKind === 72 /* OpenParenToken */) {
return this.parseArgumentList(null);
}
return null;
};
ParserImpl.prototype.parseArgumentList = function (typeArgumentList) {
var openParenToken = this.eatToken(72 /* OpenParenToken */);
var _arguments = TypeScript.Syntax.emptySeparatedList;
if (openParenToken.fullWidth() > 0) {
var result = this.parseSeparatedSyntaxList(16384 /* ArgumentList_AssignmentExpressions */);
_arguments = result.list;
openParenToken = this.addSkippedTokensAfterToken(openParenToken, result.skippedTokens);
}
var closeParenToken = this.eatToken(73 /* CloseParenToken */);
return this.factory.argumentList(typeArgumentList, openParenToken, _arguments, closeParenToken);
};
ParserImpl.prototype.parseElementAccessExpression = function (expression, inObjectCreation) {
var start = this.currentTokenStart();
var openBracketToken = this.eatToken(74 /* OpenBracketToken */);
var argumentExpression;
if (this.currentToken().tokenKind === 75 /* CloseBracketToken */ && inObjectCreation) {
var end = this.currentTokenStart() + this.currentToken().width();
var diagnostic = new TypeScript.Diagnostic(this.fileName, this.lineMap, start, end - start, TypeScript.DiagnosticCode.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead, null);
this.addDiagnostic(diagnostic);
argumentExpression = TypeScript.Syntax.emptyToken(11 /* IdentifierName */);
} else {
argumentExpression = this.parseExpression(true);
}
var closeBracketToken = this.eatToken(75 /* CloseBracketToken */);
return this.factory.elementAccessExpression(expression, openBracketToken, argumentExpression, closeBracketToken);
};
ParserImpl.prototype.parsePrimaryExpression = function () {
var currentToken = this.currentToken();
if (this.isIdentifier(currentToken)) {
return this.eatIdentifierToken();
}
var currentTokenKind = currentToken.tokenKind;
switch (currentTokenKind) {
case 35 /* ThisKeyword */:
return this.parseThisExpression();
case 37 /* TrueKeyword */:
case 24 /* FalseKeyword */:
return this.parseLiteralExpression();
case 32 /* NullKeyword */:
return this.parseLiteralExpression();
case 27 /* FunctionKeyword */:
return this.parseFunctionExpression();
case 13 /* NumericLiteral */:
return this.parseLiteralExpression();
case 12 /* RegularExpressionLiteral */:
return this.parseLiteralExpression();
case 14 /* StringLiteral */:
return this.parseLiteralExpression();
case 74 /* OpenBracketToken */:
return this.parseArrayLiteralExpression();
case 70 /* OpenBraceToken */:
return this.parseObjectLiteralExpression();
case 72 /* OpenParenToken */:
return this.parseParenthesizedExpression();
case 118 /* SlashToken */:
case 119 /* SlashEqualsToken */:
var result = this.tryReparseDivideAsRegularExpression();
if (result !== null) {
return result;
}
break;
}
return null;
};
ParserImpl.prototype.tryReparseDivideAsRegularExpression = function () {
var currentToken = this.currentToken();
if (this.previousToken() !== null) {
var previousTokenKind = this.previousToken().tokenKind;
switch (previousTokenKind) {
case 11 /* IdentifierName */:
return null;
case 35 /* ThisKeyword */:
case 37 /* TrueKeyword */:
case 24 /* FalseKeyword */:
return null;
case 14 /* StringLiteral */:
case 13 /* NumericLiteral */:
case 12 /* RegularExpressionLiteral */:
case 93 /* PlusPlusToken */:
case 94 /* MinusMinusToken */:
case 75 /* CloseBracketToken */:
return null;
}
}
currentToken = this.currentTokenAllowingRegularExpression();
if (currentToken.tokenKind === 118 /* SlashToken */ || currentToken.tokenKind === 119 /* SlashEqualsToken */) {
return null;
} else if (currentToken.tokenKind === 12 /* RegularExpressionLiteral */) {
return this.parseLiteralExpression();
} else {
throw TypeScript.Errors.invalidOperation();
}
};
ParserImpl.prototype.parseTypeOfExpression = function () {
var typeOfKeyword = this.eatKeyword(39 /* TypeOfKeyword */);
var expression = this.parseUnaryExpressionOrLower();
return this.factory.typeOfExpression(typeOfKeyword, expression);
};
ParserImpl.prototype.parseDeleteExpression = function () {
var deleteKeyword = this.eatKeyword(21 /* DeleteKeyword */);
var expression = this.parseUnaryExpressionOrLower();
return this.factory.deleteExpression(deleteKeyword, expression);
};
ParserImpl.prototype.parseVoidExpression = function () {
var voidKeyword = this.eatKeyword(41 /* VoidKeyword */);
var expression = this.parseUnaryExpressionOrLower();
return this.factory.voidExpression(voidKeyword, expression);
};
ParserImpl.prototype.parseFunctionExpression = function () {
var functionKeyword = this.eatKeyword(27 /* FunctionKeyword */);
var identifier = null;
if (this.isIdentifier(this.currentToken())) {
identifier = this.eatIdentifierToken();
}
var callSignature = this.parseCallSignature(false);
var block = this.parseBlock(false, true);
return this.factory.functionExpression(functionKeyword, identifier, callSignature, block);
};
ParserImpl.prototype.parseObjectCreationExpression = function () {
var newKeyword = this.eatKeyword(31 /* NewKeyword */);
var expression = this.parseObjectCreationExpressionOrLower(true);
var argumentList = this.tryParseArgumentList();
var result = this.factory.objectCreationExpression(newKeyword, expression, argumentList);
return this.parseMemberExpressionRest(result, true, false);
};
ParserImpl.prototype.parseObjectCreationExpressionOrLower = function (inObjectCreation) {
if (this.currentToken().tokenKind === 31 /* NewKeyword */) {
return this.parseObjectCreationExpression();
} else {
return this.parseMemberExpressionOrLower(inObjectCreation);
}
};
ParserImpl.prototype.parseCastExpression = function () {
var lessThanToken = this.eatToken(80 /* LessThanToken */);
var type = this.parseType();
var greaterThanToken = this.eatToken(81 /* GreaterThanToken */);
var expression = this.parseUnaryExpressionOrLower();
return this.factory.castExpression(lessThanToken, type, greaterThanToken, expression);
};
ParserImpl.prototype.parseParenthesizedExpression = function () {
var openParenToken = this.eatToken(72 /* OpenParenToken */);
var expression = this.parseExpression(true);
var closeParenToken = this.eatToken(73 /* CloseParenToken */);
return this.factory.parenthesizedExpression(openParenToken, expression, closeParenToken);
};
ParserImpl.prototype.tryParseParenthesizedArrowFunctionExpression = function () {
var tokenKind = this.currentToken().tokenKind;
if (tokenKind !== 72 /* OpenParenToken */ && tokenKind !== 80 /* LessThanToken */) {
return null;
}
if (this.isDefinitelyArrowFunctionExpression()) {
return this.parseParenthesizedArrowFunctionExpression(false);
}
if (!this.isPossiblyArrowFunctionExpression()) {
return null;
}
var rewindPoint = this.getRewindPoint();
var arrowFunction = this.parseParenthesizedArrowFunctionExpression(true);
if (arrowFunction === null) {
this.rewind(rewindPoint);
}
this.releaseRewindPoint(rewindPoint);
return arrowFunction;
};
ParserImpl.prototype.parseParenthesizedArrowFunctionExpression = function (requireArrow) {
var currentToken = this.currentToken();
var callSignature = this.parseCallSignature(true);
if (requireArrow && this.currentToken().tokenKind !== 85 /* EqualsGreaterThanToken */) {
return null;
}
var equalsGreaterThanToken = this.eatToken(85 /* EqualsGreaterThanToken */);
var block = this.tryParseArrowFunctionBlock();
var expression = null;
if (block === null) {
expression = this.parseAssignmentExpression(true);
}
return this.factory.parenthesizedArrowFunctionExpression(callSignature, equalsGreaterThanToken, block, expression);
};
ParserImpl.prototype.tryParseArrowFunctionBlock = function () {
if (this.isBlock()) {
return this.parseBlock(false, false);
} else {
if (this.isStatement(false) && !this.isExpressionStatement(this.currentToken()) && !this.isFunctionDeclaration()) {
return this.parseBlock(true, false);
} else {
return null;
}
}
};
ParserImpl.prototype.isSimpleArrowFunctionExpression = function () {
if (this.currentToken().tokenKind === 85 /* EqualsGreaterThanToken */) {
return true;
}
return this.isIdentifier(this.currentToken()) && this.peekToken(1).tokenKind === 85 /* EqualsGreaterThanToken */;
};
ParserImpl.prototype.parseSimpleArrowFunctionExpression = function () {
var identifier = this.eatIdentifierToken();
var equalsGreaterThanToken = this.eatToken(85 /* EqualsGreaterThanToken */);
var block = this.tryParseArrowFunctionBlock();
var expression = null;
if (block === null) {
expression = this.parseAssignmentExpression(true);
}
return this.factory.simpleArrowFunctionExpression(identifier, equalsGreaterThanToken, block, expression);
};
ParserImpl.prototype.isBlock = function () {
return this.currentToken().tokenKind === 70 /* OpenBraceToken */;
};
ParserImpl.prototype.isDefinitelyArrowFunctionExpression = function () {
var token0 = this.currentToken();
if (token0.tokenKind !== 72 /* OpenParenToken */) {
return false;
}
var token1 = this.peekToken(1);
var token2;
if (token1.tokenKind === 73 /* CloseParenToken */) {
token2 = this.peekToken(2);
return token2.tokenKind === 106 /* ColonToken */ || token2.tokenKind === 85 /* EqualsGreaterThanToken */ || token2.tokenKind === 70 /* OpenBraceToken */;
}
if (token1.tokenKind === 77 /* DotDotDotToken */) {
return true;
}
token2 = this.peekToken(2);
if (token1.tokenKind === 57 /* PublicKeyword */ || token1.tokenKind === 55 /* PrivateKeyword */) {
if (this.isIdentifier(token2)) {
return true;
}
}
if (!this.isIdentifier(token1)) {
return false;
}
if (token2.tokenKind === 106 /* ColonToken */) {
return true;
}
var token3 = this.peekToken(3);
if (token2.tokenKind === 105 /* QuestionToken */) {
if (token3.tokenKind === 106 /* ColonToken */ || token3.tokenKind === 73 /* CloseParenToken */ || token3.tokenKind === 79 /* CommaToken */) {
return true;
}
}
if (token2.tokenKind === 73 /* CloseParenToken */) {
if (token3.tokenKind === 85 /* EqualsGreaterThanToken */) {
return true;
}
}
return false;
};
ParserImpl.prototype.isPossiblyArrowFunctionExpression = function () {
var token0 = this.currentToken();
if (token0.tokenKind !== 72 /* OpenParenToken */) {
return true;
}
var token1 = this.peekToken(1);
if (!this.isIdentifier(token1)) {
return false;
}
var token2 = this.peekToken(2);
if (token2.tokenKind === 107 /* EqualsToken */) {
return true;
}
if (token2.tokenKind === 79 /* CommaToken */) {
return true;
}
if (token2.tokenKind === 73 /* CloseParenToken */) {
var token3 = this.peekToken(3);
if (token3.tokenKind === 106 /* ColonToken */) {
return true;
}
}
return false;
};
ParserImpl.prototype.parseObjectLiteralExpression = function () {
var openBraceToken = this.eatToken(70 /* OpenBraceToken */);
var result = this.parseSeparatedSyntaxList(32768 /* ObjectLiteralExpression_PropertyAssignments */);
var propertyAssignments = result.list;
openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens);
var closeBraceToken = this.eatToken(71 /* CloseBraceToken */);
return this.factory.objectLiteralExpression(openBraceToken, propertyAssignments, closeBraceToken);
};
ParserImpl.prototype.parsePropertyAssignment = function (inErrorRecovery) {
if (this.isAccessor(inErrorRecovery)) {
return this.parseAccessor(true);
} else if (this.isFunctionPropertyAssignment(inErrorRecovery)) {
return this.parseFunctionPropertyAssignment();
} else if (this.isSimplePropertyAssignment(inErrorRecovery)) {
return this.parseSimplePropertyAssignment();
} else {
throw TypeScript.Errors.invalidOperation();
}
};
ParserImpl.prototype.isPropertyAssignment = function (inErrorRecovery) {
return this.isAccessor(inErrorRecovery) || this.isFunctionPropertyAssignment(inErrorRecovery) || this.isSimplePropertyAssignment(inErrorRecovery);
};
ParserImpl.prototype.eatPropertyName = function () {
return TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(this.currentToken()) ? this.eatIdentifierNameToken() : this.eatAnyToken();
};
ParserImpl.prototype.isFunctionPropertyAssignment = function (inErrorRecovery) {
return this.isPropertyName(this.currentToken(), inErrorRecovery) && this.isCallSignature(1);
};
ParserImpl.prototype.parseFunctionPropertyAssignment = function () {
var propertyName = this.eatPropertyName();
var callSignature = this.parseCallSignature(false);
var block = this.parseBlock(false, true);
return this.factory.functionPropertyAssignment(propertyName, callSignature, block);
};
ParserImpl.prototype.isSimplePropertyAssignment = function (inErrorRecovery) {
return this.isPropertyName(this.currentToken(), inErrorRecovery);
};
ParserImpl.prototype.parseSimplePropertyAssignment = function () {
var propertyName = this.eatPropertyName();
var colonToken = this.eatToken(106 /* ColonToken */);
var expression = this.parseAssignmentExpression(true);
return this.factory.simplePropertyAssignment(propertyName, colonToken, expression);
};
ParserImpl.prototype.isPropertyName = function (token, inErrorRecovery) {
if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token)) {
if (inErrorRecovery) {
return this.isIdentifier(token);
} else {
return true;
}
}
switch (token.tokenKind) {
case 14 /* StringLiteral */:
case 13 /* NumericLiteral */:
return true;
default:
return false;
}
};
ParserImpl.prototype.parseArrayLiteralExpression = function () {
var openBracketToken = this.eatToken(74 /* OpenBracketToken */);
var result = this.parseSeparatedSyntaxList(65536 /* ArrayLiteralExpression_AssignmentExpressions */);
var expressions = result.list;
openBracketToken = this.addSkippedTokensAfterToken(openBracketToken, result.skippedTokens);
var closeBracketToken = this.eatToken(75 /* CloseBracketToken */);
return this.factory.arrayLiteralExpression(openBracketToken, expressions, closeBracketToken);
};
ParserImpl.prototype.parseLiteralExpression = function () {
return this.eatAnyToken();
};
ParserImpl.prototype.parseThisExpression = function () {
return this.eatKeyword(35 /* ThisKeyword */);
};
ParserImpl.prototype.parseBlock = function (parseBlockEvenWithNoOpenBrace, checkForStrictMode) {
var openBraceToken = this.eatToken(70 /* OpenBraceToken */);
var statements = TypeScript.Syntax.emptyList;
if (parseBlockEvenWithNoOpenBrace || openBraceToken.width() > 0) {
var savedIsInStrictMode = this.isInStrictMode;
var processItems = checkForStrictMode ? ParserImpl.updateStrictModeState : null;
var result = this.parseSyntaxList(32 /* Block_Statements */, processItems);
statements = result.list;
openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens);
this.setStrictMode(savedIsInStrictMode);
}
var closeBraceToken = this.eatToken(71 /* CloseBraceToken */);
return this.factory.block(openBraceToken, statements, closeBraceToken);
};
ParserImpl.prototype.parseCallSignature = function (requireCompleteTypeParameterList) {
var typeParameterList = this.parseOptionalTypeParameterList(requireCompleteTypeParameterList);
var parameterList = this.parseParameterList();
var typeAnnotation = this.parseOptionalTypeAnnotation(false);
return this.factory.callSignature(typeParameterList, parameterList, typeAnnotation);
};
ParserImpl.prototype.parseOptionalTypeParameterList = function (requireCompleteTypeParameterList) {
if (this.currentToken().tokenKind !== 80 /* LessThanToken */) {
return null;
}
var rewindPoint = this.getRewindPoint();
var lessThanToken = this.eatToken(80 /* LessThanToken */);
var result = this.parseSeparatedSyntaxList(524288 /* TypeParameterList_TypeParameters */);
var typeParameters = result.list;
lessThanToken = this.addSkippedTokensAfterToken(lessThanToken, result.skippedTokens);
var greaterThanToken = this.eatToken(81 /* GreaterThanToken */);
if (requireCompleteTypeParameterList && greaterThanToken.fullWidth() === 0) {
this.rewind(rewindPoint);
this.releaseRewindPoint(rewindPoint);
return null;
} else {
this.releaseRewindPoint(rewindPoint);
var typeParameterList = this.factory.typeParameterList(lessThanToken, typeParameters, greaterThanToken);
return typeParameterList;
}
};
ParserImpl.prototype.isTypeParameter = function () {
return this.isIdentifier(this.currentToken());
};
ParserImpl.prototype.parseTypeParameter = function () {
var identifier = this.eatIdentifierToken();
var constraint = this.parseOptionalConstraint();
return this.factory.typeParameter(identifier, constraint);
};
ParserImpl.prototype.parseOptionalConstraint = function () {
if (this.currentToken().kind() !== 48 /* ExtendsKeyword */) {
return null;
}
var extendsKeyword = this.eatKeyword(48 /* ExtendsKeyword */);
var type = this.parseType();
return this.factory.constraint(extendsKeyword, type);
};
ParserImpl.prototype.parseParameterList = function () {
var openParenToken = this.eatToken(72 /* OpenParenToken */);
var parameters = TypeScript.Syntax.emptySeparatedList;
if (openParenToken.width() > 0) {
var result = this.parseSeparatedSyntaxList(131072 /* ParameterList_Parameters */);
parameters = result.list;
openParenToken = this.addSkippedTokensAfterToken(openParenToken, result.skippedTokens);
}
var closeParenToken = this.eatToken(73 /* CloseParenToken */);
return this.factory.parameterList(openParenToken, parameters, closeParenToken);
};
ParserImpl.prototype.isTypeAnnotation = function () {
return this.currentToken().tokenKind === 106 /* ColonToken */;
};
ParserImpl.prototype.parseOptionalTypeAnnotation = function (allowStringLiteral) {
return this.isTypeAnnotation() ? this.parseTypeAnnotation(allowStringLiteral) : null;
};
ParserImpl.prototype.parseTypeAnnotation = function (allowStringLiteral) {
var colonToken = this.eatToken(106 /* ColonToken */);
var type = allowStringLiteral && this.currentToken().tokenKind === 14 /* StringLiteral */ ? this.eatToken(14 /* StringLiteral */) : this.parseType();
return this.factory.typeAnnotation(colonToken, type);
};
ParserImpl.prototype.isType = function () {
var currentToken = this.currentToken();
var currentTokenKind = currentToken.tokenKind;
switch (currentTokenKind) {
case 39 /* TypeOfKeyword */:
case 60 /* AnyKeyword */:
case 67 /* NumberKeyword */:
case 61 /* BooleanKeyword */:
case 69 /* StringKeyword */:
case 41 /* VoidKeyword */:
case 70 /* OpenBraceToken */:
case 72 /* OpenParenToken */:
case 80 /* LessThanToken */:
case 31 /* NewKeyword */:
return true;
}
return this.isIdentifier(currentToken);
};
ParserImpl.prototype.parseType = function () {
var currentToken = this.currentToken();
var currentTokenKind = currentToken.tokenKind;
var type = this.parseNonArrayType(currentToken);
while (this.currentToken().tokenKind === 74 /* OpenBracketToken */) {
var openBracketToken = this.eatToken(74 /* OpenBracketToken */);
var closeBracketToken = this.eatToken(75 /* CloseBracketToken */);
type = this.factory.arrayType(type, openBracketToken, closeBracketToken);
}
return type;
};
ParserImpl.prototype.isTypeQuery = function () {
return this.currentToken().tokenKind === 39 /* TypeOfKeyword */;
};
ParserImpl.prototype.parseTypeQuery = function () {
var typeOfKeyword = this.eatToken(39 /* TypeOfKeyword */);
var name = this.parseName();
return this.factory.typeQuery(typeOfKeyword, name);
};
ParserImpl.prototype.parseNonArrayType = function (currentToken) {
var currentTokenKind = currentToken.tokenKind;
switch (currentTokenKind) {
case 60 /* AnyKeyword */:
case 67 /* NumberKeyword */:
case 61 /* BooleanKeyword */:
case 69 /* StringKeyword */:
case 41 /* VoidKeyword */:
return this.eatAnyToken();
case 70 /* OpenBraceToken */:
return this.parseObjectType();
case 72 /* OpenParenToken */:
case 80 /* LessThanToken */:
return this.parseFunctionType();
case 31 /* NewKeyword */:
return this.parseConstructorType();
case 39 /* TypeOfKeyword */:
return this.parseTypeQuery();
}
return this.parseNameOrGenericType();
};
ParserImpl.prototype.parseNameOrGenericType = function () {
var name = this.parseName();
var typeArgumentList = this.tryParseTypeArgumentList(false);
return typeArgumentList === null ? name : this.factory.genericType(name, typeArgumentList);
};
ParserImpl.prototype.parseFunctionType = function () {
var typeParameterList = this.parseOptionalTypeParameterList(false);
var parameterList = this.parseParameterList();
var equalsGreaterThanToken = this.eatToken(85 /* EqualsGreaterThanToken */);
var returnType = this.parseType();
return this.factory.functionType(typeParameterList, parameterList, equalsGreaterThanToken, returnType);
};
ParserImpl.prototype.parseConstructorType = function () {
var newKeyword = this.eatKeyword(31 /* NewKeyword */);
var typeParameterList = this.parseOptionalTypeParameterList(false);
var parameterList = this.parseParameterList();
var equalsGreaterThanToken = this.eatToken(85 /* EqualsGreaterThanToken */);
var type = this.parseType();
return this.factory.constructorType(newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type);
};
ParserImpl.prototype.isParameter = function () {
if (this.currentNode() !== null && this.currentNode().kind() === 242 /* Parameter */) {
return true;
}
var token = this.currentToken();
var tokenKind = token.tokenKind;
if (tokenKind === 77 /* DotDotDotToken */) {
return true;
}
if (ParserImpl.isModifier(token) && !this.isModifierUsedAsParameterIdentifier(token)) {
return true;
}
return this.isIdentifier(token);
};
ParserImpl.prototype.isModifierUsedAsParameterIdentifier = function (token) {
if (this.isIdentifier(token)) {
var nextTokenKind = this.peekToken(1).tokenKind;
switch (nextTokenKind) {
case 73 /* CloseParenToken */:
case 106 /* ColonToken */:
case 107 /* EqualsToken */:
case 79 /* CommaToken */:
case 105 /* QuestionToken */:
return true;
}
}
return false;
};
ParserImpl.prototype.parseParameter = function () {
if (this.currentNode() !== null && this.currentNode().kind() === 242 /* Parameter */) {
return this.eatNode();
}
var dotDotDotToken = this.tryEatToken(77 /* DotDotDotToken */);
var modifierArray = this.getArray();
while (true) {
var currentToken = this.currentToken();
if (ParserImpl.isModifier(currentToken) && !this.isModifierUsedAsParameterIdentifier(currentToken)) {
modifierArray.push(this.eatAnyToken());
continue;
}
break;
}
var modifiers = TypeScript.Syntax.list(modifierArray);
this.returnZeroOrOneLengthArray(modifierArray);
var identifier = this.eatIdentifierToken();
var questionToken = this.tryEatToken(105 /* QuestionToken */);
var typeAnnotation = this.parseOptionalTypeAnnotation(true);
var equalsValueClause = null;
if (this.isEqualsValueClause(true)) {
equalsValueClause = this.parseEqualsValueClause(true);
}
return this.factory.parameter(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause);
};
ParserImpl.prototype.parseSyntaxList = function (currentListType, processItems) {
if (typeof processItems === "undefined") { processItems = null; }
var savedListParsingState = this.listParsingState;
this.listParsingState |= currentListType;
var result = this.parseSyntaxListWorker(currentListType, processItems);
this.listParsingState = savedListParsingState;
return result;
};
ParserImpl.prototype.parseSeparatedSyntaxList = function (currentListType) {
var savedListParsingState = this.listParsingState;
this.listParsingState |= currentListType;
var result = this.parseSeparatedSyntaxListWorker(currentListType);
this.listParsingState = savedListParsingState;
return result;
};
ParserImpl.prototype.abortParsingListOrMoveToNextToken = function (currentListType, items, skippedTokens) {
this.reportUnexpectedTokenDiagnostic(currentListType);
for (var state = 524288 /* LastListParsingState */; state >= 1 /* FirstListParsingState */; state >>= 1) {
if ((this.listParsingState & state) !== 0) {
if (this.isExpectedListTerminator(state) || this.isExpectedListItem(state, true)) {
return true;
}
}
}
var skippedToken = this.currentToken();
this.moveToNextToken();
this.addSkippedTokenToList(items, skippedTokens, skippedToken);
return false;
};
ParserImpl.prototype.addSkippedTokenToList = function (items, skippedTokens, skippedToken) {
for (var i = items.length - 1; i >= 0; i--) {
var item = items[i];
var lastToken = item.lastToken();
if (lastToken.fullWidth() > 0) {
items[i] = this.addSkippedTokenAfterNodeOrToken(item, skippedToken);
return;
}
}
skippedTokens.push(skippedToken);
};
ParserImpl.prototype.tryParseExpectedListItem = function (currentListType, inErrorRecovery, items, processItems) {
if (this.isExpectedListItem(currentListType, inErrorRecovery)) {
var item = this.parseExpectedListItem(currentListType, inErrorRecovery);
items.push(item);
if (processItems !== null) {
processItems(this, items);
}
}
};
ParserImpl.prototype.listIsTerminated = function (currentListType) {
return this.isExpectedListTerminator(currentListType) || this.currentToken().tokenKind === 10 /* EndOfFileToken */;
};
ParserImpl.prototype.getArray = function () {
if (this.arrayPool.length > 0) {
return this.arrayPool.pop();
}
return [];
};
ParserImpl.prototype.returnZeroOrOneLengthArray = function (array) {
if (array.length <= 1) {
this.returnArray(array);
}
};
ParserImpl.prototype.returnArray = function (array) {
array.length = 0;
this.arrayPool.push(array);
};
ParserImpl.prototype.parseSyntaxListWorker = function (currentListType, processItems) {
var items = this.getArray();
var skippedTokens = this.getArray();
while (true) {
var oldItemsCount = items.length;
this.tryParseExpectedListItem(currentListType, false, items, processItems);
var newItemsCount = items.length;
if (newItemsCount === oldItemsCount) {
if (this.listIsTerminated(currentListType)) {
break;
}
var abort = this.abortParsingListOrMoveToNextToken(currentListType, items, skippedTokens);
if (abort) {
break;
}
}
}
var result = TypeScript.Syntax.list(items);
this.returnZeroOrOneLengthArray(items);
return { skippedTokens: skippedTokens, list: result };
};
ParserImpl.prototype.parseSeparatedSyntaxListWorker = function (currentListType) {
var items = this.getArray();
var skippedTokens = this.getArray();
TypeScript.Debug.assert(items.length === 0);
TypeScript.Debug.assert(skippedTokens.length === 0);
TypeScript.Debug.assert(skippedTokens !== items);
var separatorKind = this.separatorKind(currentListType);
var allowAutomaticSemicolonInsertion = separatorKind === 78 /* SemicolonToken */;
var inErrorRecovery = false;
var listWasTerminated = false;
while (true) {
var oldItemsCount = items.length;
this.tryParseExpectedListItem(currentListType, inErrorRecovery, items, null);
var newItemsCount = items.length;
if (newItemsCount === oldItemsCount) {
if (this.listIsTerminated(currentListType)) {
listWasTerminated = true;
break;
}
var abort = this.abortParsingListOrMoveToNextToken(currentListType, items, skippedTokens);
if (abort) {
break;
} else {
inErrorRecovery = true;
continue;
}
}
inErrorRecovery = false;
var currentToken = this.currentToken();
if (currentToken.tokenKind === separatorKind || currentToken.tokenKind === 79 /* CommaToken */) {
items.push(this.eatAnyToken());
continue;
}
if (this.listIsTerminated(currentListType)) {
listWasTerminated = true;
break;
}
if (allowAutomaticSemicolonInsertion && this.canEatAutomaticSemicolon(false)) {
items.push(this.eatExplicitOrAutomaticSemicolon(false));
continue;
}
items.push(this.eatToken(separatorKind));
inErrorRecovery = true;
}
var result = TypeScript.Syntax.separatedList(items);
this.returnZeroOrOneLengthArray(items);
return { skippedTokens: skippedTokens, list: result };
};
ParserImpl.prototype.separatorKind = function (currentListType) {
switch (currentListType) {
case 2048 /* HeritageClause_TypeNameList */:
case 16384 /* ArgumentList_AssignmentExpressions */:
case 256 /* EnumDeclaration_EnumElements */:
case 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */:
case 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */:
case 32768 /* ObjectLiteralExpression_PropertyAssignments */:
case 131072 /* ParameterList_Parameters */:
case 65536 /* ArrayLiteralExpression_AssignmentExpressions */:
case 262144 /* TypeArgumentList_Types */:
case 524288 /* TypeParameterList_TypeParameters */:
return 79 /* CommaToken */;
case 512 /* ObjectType_TypeMembers */:
return 78 /* SemicolonToken */;
case 1 /* SourceUnit_ModuleElements */:
case 1024 /* ClassOrInterfaceDeclaration_HeritageClauses */:
case 2 /* ClassDeclaration_ClassElements */:
case 4 /* ModuleDeclaration_ModuleElements */:
case 8 /* SwitchStatement_SwitchClauses */:
case 16 /* SwitchClause_Statements */:
case 32 /* Block_Statements */:
default:
throw TypeScript.Errors.notYetImplemented();
}
};
ParserImpl.prototype.reportUnexpectedTokenDiagnostic = function (listType) {
var token = this.currentToken();
var diagnostic = new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token.width(), TypeScript.DiagnosticCode.Unexpected_token_0_expected, [this.getExpectedListElementType(listType)]);
this.addDiagnostic(diagnostic);
};
ParserImpl.prototype.addDiagnostic = function (diagnostic) {
if (this.diagnostics.length > 0 && this.diagnostics[this.diagnostics.length - 1].start() === diagnostic.start()) {
return;
}
this.diagnostics.push(diagnostic);
};
ParserImpl.prototype.isExpectedListTerminator = function (currentListType) {
switch (currentListType) {
case 1 /* SourceUnit_ModuleElements */:
return this.isExpectedSourceUnit_ModuleElementsTerminator();
case 1024 /* ClassOrInterfaceDeclaration_HeritageClauses */:
return this.isExpectedClassOrInterfaceDeclaration_HeritageClausesTerminator();
case 2 /* ClassDeclaration_ClassElements */:
return this.isExpectedClassDeclaration_ClassElementsTerminator();
case 4 /* ModuleDeclaration_ModuleElements */:
return this.isExpectedModuleDeclaration_ModuleElementsTerminator();
case 8 /* SwitchStatement_SwitchClauses */:
return this.isExpectedSwitchStatement_SwitchClausesTerminator();
case 16 /* SwitchClause_Statements */:
return this.isExpectedSwitchClause_StatementsTerminator();
case 32 /* Block_Statements */:
return this.isExpectedBlock_StatementsTerminator();
case 64 /* TryBlock_Statements */:
return this.isExpectedTryBlock_StatementsTerminator();
case 128 /* CatchBlock_Statements */:
return this.isExpectedCatchBlock_StatementsTerminator();
case 256 /* EnumDeclaration_EnumElements */:
return this.isExpectedEnumDeclaration_EnumElementsTerminator();
case 512 /* ObjectType_TypeMembers */:
return this.isExpectedObjectType_TypeMembersTerminator();
case 16384 /* ArgumentList_AssignmentExpressions */:
return this.isExpectedArgumentList_AssignmentExpressionsTerminator();
case 2048 /* HeritageClause_TypeNameList */:
return this.isExpectedHeritageClause_TypeNameListTerminator();
case 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */:
return this.isExpectedVariableDeclaration_VariableDeclarators_AllowInTerminator();
case 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */:
return this.isExpectedVariableDeclaration_VariableDeclarators_DisallowInTerminator();
case 32768 /* ObjectLiteralExpression_PropertyAssignments */:
return this.isExpectedObjectLiteralExpression_PropertyAssignmentsTerminator();
case 131072 /* ParameterList_Parameters */:
return this.isExpectedParameterList_ParametersTerminator();
case 262144 /* TypeArgumentList_Types */:
return this.isExpectedTypeArgumentList_TypesTerminator();
case 524288 /* TypeParameterList_TypeParameters */:
return this.isExpectedTypeParameterList_TypeParametersTerminator();
case 65536 /* ArrayLiteralExpression_AssignmentExpressions */:
return this.isExpectedLiteralExpression_AssignmentExpressionsTerminator();
default:
throw TypeScript.Errors.invalidOperation();
}
};
ParserImpl.prototype.isExpectedSourceUnit_ModuleElementsTerminator = function () {
return this.currentToken().tokenKind === 10 /* EndOfFileToken */;
};
ParserImpl.prototype.isExpectedEnumDeclaration_EnumElementsTerminator = function () {
return this.currentToken().tokenKind === 71 /* CloseBraceToken */;
};
ParserImpl.prototype.isExpectedModuleDeclaration_ModuleElementsTerminator = function () {
return this.currentToken().tokenKind === 71 /* CloseBraceToken */;
};
ParserImpl.prototype.isExpectedObjectType_TypeMembersTerminator = function () {
return this.currentToken().tokenKind === 71 /* CloseBraceToken */;
};
ParserImpl.prototype.isExpectedObjectLiteralExpression_PropertyAssignmentsTerminator = function () {
return this.currentToken().tokenKind === 71 /* CloseBraceToken */;
};
ParserImpl.prototype.isExpectedLiteralExpression_AssignmentExpressionsTerminator = function () {
return this.currentToken().tokenKind === 75 /* CloseBracketToken */;
};
ParserImpl.prototype.isExpectedTypeArgumentList_TypesTerminator = function () {
var token = this.currentToken();
if (token.tokenKind === 81 /* GreaterThanToken */) {
return true;
}
if (this.canFollowTypeArgumentListInExpression(token.tokenKind)) {
return true;
}
return false;
};
ParserImpl.prototype.isExpectedTypeParameterList_TypeParametersTerminator = function () {
var token = this.currentToken();
if (token.tokenKind === 81 /* GreaterThanToken */) {
return true;
}
if (token.tokenKind === 72 /* OpenParenToken */ || token.tokenKind === 70 /* OpenBraceToken */ || token.tokenKind === 48 /* ExtendsKeyword */ || token.tokenKind === 51 /* ImplementsKeyword */) {
return true;
}
return false;
};
ParserImpl.prototype.isExpectedParameterList_ParametersTerminator = function () {
var token = this.currentToken();
if (token.tokenKind === 73 /* CloseParenToken */) {
return true;
}
if (token.tokenKind === 70 /* OpenBraceToken */) {
return true;
}
if (token.tokenKind === 85 /* EqualsGreaterThanToken */) {
return true;
}
return false;
};
ParserImpl.prototype.isExpectedVariableDeclaration_VariableDeclarators_DisallowInTerminator = function () {
if (this.currentToken().tokenKind === 78 /* SemicolonToken */ || this.currentToken().tokenKind === 73 /* CloseParenToken */) {
return true;
}
if (this.currentToken().tokenKind === 29 /* InKeyword */) {
return true;
}
return false;
};
ParserImpl.prototype.isExpectedVariableDeclaration_VariableDeclarators_AllowInTerminator = function () {
if (this.previousToken().tokenKind === 79 /* CommaToken */) {
return false;
}
if (this.currentToken().tokenKind === 85 /* EqualsGreaterThanToken */) {
return true;
}
return this.canEatExplicitOrAutomaticSemicolon(false);
};
ParserImpl.prototype.isExpectedClassOrInterfaceDeclaration_HeritageClausesTerminator = function () {
var token0 = this.currentToken();
if (token0.tokenKind === 70 /* OpenBraceToken */ || token0.tokenKind === 71 /* CloseBraceToken */) {
return true;
}
return false;
};
ParserImpl.prototype.isExpectedHeritageClause_TypeNameListTerminator = function () {
var token0 = this.currentToken();
if (token0.tokenKind === 48 /* ExtendsKeyword */ || token0.tokenKind === 51 /* ImplementsKeyword */) {
return true;
}
if (this.isExpectedClassOrInterfaceDeclaration_HeritageClausesTerminator()) {
return true;
}
return false;
};
ParserImpl.prototype.isExpectedArgumentList_AssignmentExpressionsTerminator = function () {
var token0 = this.currentToken();
return token0.tokenKind === 73 /* CloseParenToken */ || token0.tokenKind === 78 /* SemicolonToken */;
};
ParserImpl.prototype.isExpectedClassDeclaration_ClassElementsTerminator = function () {
return this.currentToken().tokenKind === 71 /* CloseBraceToken */;
};
ParserImpl.prototype.isExpectedSwitchStatement_SwitchClausesTerminator = function () {
return this.currentToken().tokenKind === 71 /* CloseBraceToken */;
};
ParserImpl.prototype.isExpectedSwitchClause_StatementsTerminator = function () {
return this.currentToken().tokenKind === 71 /* CloseBraceToken */ || this.isSwitchClause();
};
ParserImpl.prototype.isExpectedBlock_StatementsTerminator = function () {
return this.currentToken().tokenKind === 71 /* CloseBraceToken */;
};
ParserImpl.prototype.isExpectedTryBlock_StatementsTerminator = function () {
return this.currentToken().tokenKind === 17 /* CatchKeyword */ || this.currentToken().tokenKind === 25 /* FinallyKeyword */;
};
ParserImpl.prototype.isExpectedCatchBlock_StatementsTerminator = function () {
return this.currentToken().tokenKind === 25 /* FinallyKeyword */;
};
ParserImpl.prototype.isExpectedListItem = function (currentListType, inErrorRecovery) {
switch (currentListType) {
case 1 /* SourceUnit_ModuleElements */:
return this.isModuleElement(inErrorRecovery);
case 1024 /* ClassOrInterfaceDeclaration_HeritageClauses */:
return this.isHeritageClause();
case 2 /* ClassDeclaration_ClassElements */:
return this.isClassElement(inErrorRecovery);
case 4 /* ModuleDeclaration_ModuleElements */:
return this.isModuleElement(inErrorRecovery);
case 8 /* SwitchStatement_SwitchClauses */:
return this.isSwitchClause();
case 16 /* SwitchClause_Statements */:
return this.isStatement(inErrorRecovery);
case 32 /* Block_Statements */:
return this.isStatement(inErrorRecovery);
case 64 /* TryBlock_Statements */:
case 128 /* CatchBlock_Statements */:
return false;
case 256 /* EnumDeclaration_EnumElements */:
return this.isEnumElement(inErrorRecovery);
case 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */:
case 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */:
return this.isVariableDeclarator();
case 512 /* ObjectType_TypeMembers */:
return this.isTypeMember(inErrorRecovery);
case 16384 /* ArgumentList_AssignmentExpressions */:
return this.isExpectedArgumentList_AssignmentExpression();
case 2048 /* HeritageClause_TypeNameList */:
return this.isHeritageClauseTypeName();
case 32768 /* ObjectLiteralExpression_PropertyAssignments */:
return this.isPropertyAssignment(inErrorRecovery);
case 131072 /* ParameterList_Parameters */:
return this.isParameter();
case 262144 /* TypeArgumentList_Types */:
return this.isType();
case 524288 /* TypeParameterList_TypeParameters */:
return this.isTypeParameter();
case 65536 /* ArrayLiteralExpression_AssignmentExpressions */:
return this.isAssignmentOrOmittedExpression();
default:
throw TypeScript.Errors.invalidOperation();
}
};
ParserImpl.prototype.isExpectedArgumentList_AssignmentExpression = function () {
var currentToken = this.currentToken();
if (this.isExpression(currentToken)) {
return true;
}
if (currentToken.tokenKind === 79 /* CommaToken */) {
return true;
}
return false;
};
ParserImpl.prototype.parseExpectedListItem = function (currentListType, inErrorRecovery) {
switch (currentListType) {
case 1 /* SourceUnit_ModuleElements */:
return this.parseModuleElement(inErrorRecovery);
case 1024 /* ClassOrInterfaceDeclaration_HeritageClauses */:
return this.parseHeritageClause();
case 2 /* ClassDeclaration_ClassElements */:
return this.parseClassElement(inErrorRecovery);
case 4 /* ModuleDeclaration_ModuleElements */:
return this.parseModuleElement(inErrorRecovery);
case 8 /* SwitchStatement_SwitchClauses */:
return this.parseSwitchClause();
case 16 /* SwitchClause_Statements */:
return this.parseStatement(inErrorRecovery);
case 32 /* Block_Statements */:
return this.parseStatement(inErrorRecovery);
case 256 /* EnumDeclaration_EnumElements */:
return this.parseEnumElement();
case 512 /* ObjectType_TypeMembers */:
return this.parseTypeMember(inErrorRecovery);
case 16384 /* ArgumentList_AssignmentExpressions */:
return this.parseAssignmentExpression(true);
case 2048 /* HeritageClause_TypeNameList */:
return this.parseNameOrGenericType();
case 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */:
return this.parseVariableDeclarator(true, false);
case 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */:
return this.parseVariableDeclarator(false, false);
case 32768 /* ObjectLiteralExpression_PropertyAssignments */:
return this.parsePropertyAssignment(inErrorRecovery);
case 65536 /* ArrayLiteralExpression_AssignmentExpressions */:
return this.parseAssignmentOrOmittedExpression();
case 131072 /* ParameterList_Parameters */:
return this.parseParameter();
case 262144 /* TypeArgumentList_Types */:
return this.parseType();
case 524288 /* TypeParameterList_TypeParameters */:
return this.parseTypeParameter();
default:
throw TypeScript.Errors.invalidOperation();
}
};
ParserImpl.prototype.getExpectedListElementType = function (currentListType) {
switch (currentListType) {
case 1 /* SourceUnit_ModuleElements */:
return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.module_class_interface_enum_import_or_statement, null);
case 1024 /* ClassOrInterfaceDeclaration_HeritageClauses */:
return '{';
case 2 /* ClassDeclaration_ClassElements */:
return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.constructor_function_accessor_or_variable, null);
case 4 /* ModuleDeclaration_ModuleElements */:
return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.module_class_interface_enum_import_or_statement, null);
case 8 /* SwitchStatement_SwitchClauses */:
return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.case_or_default_clause, null);
case 16 /* SwitchClause_Statements */:
return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.statement, null);
case 32 /* Block_Statements */:
return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.statement, null);
case 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */:
case 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */:
return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null);
case 256 /* EnumDeclaration_EnumElements */:
return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null);
case 512 /* ObjectType_TypeMembers */:
return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.call_construct_index_property_or_function_signature, null);
case 16384 /* ArgumentList_AssignmentExpressions */:
return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.expression, null);
case 2048 /* HeritageClause_TypeNameList */:
return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_name, null);
case 32768 /* ObjectLiteralExpression_PropertyAssignments */:
return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.property_or_accessor, null);
case 131072 /* ParameterList_Parameters */:
return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.parameter, null);
case 262144 /* TypeArgumentList_Types */:
return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type, null);
case 524288 /* TypeParameterList_TypeParameters */:
return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_parameter, null);
case 65536 /* ArrayLiteralExpression_AssignmentExpressions */:
return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.expression, null);
default:
throw TypeScript.Errors.invalidOperation();
}
};
return ParserImpl;
})();
function parse(fileName, text, isDeclaration, options) {
var source = new NormalParserSource(fileName, text, options.languageVersion());
return new ParserImpl(fileName, text.lineMap(), source, options, text).parseSyntaxTree(isDeclaration);
}
Parser.parse = parse;
function incrementalParse(oldSyntaxTree, textChangeRange, newText) {
if (textChangeRange.isUnchanged()) {
return oldSyntaxTree;
}
var source = new IncrementalParserSource(oldSyntaxTree, textChangeRange, newText);
return new ParserImpl(oldSyntaxTree.fileName(), newText.lineMap(), source, oldSyntaxTree.parseOptions(), newText).parseSyntaxTree(oldSyntaxTree.isDeclaration());
}
Parser.incrementalParse = incrementalParse;
})(TypeScript.Parser || (TypeScript.Parser = {}));
var Parser = TypeScript.Parser;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var SyntaxTree = (function () {
function SyntaxTree(sourceUnit, isDeclaration, diagnostics, fileName, lineMap, parseOtions) {
this._allDiagnostics = null;
this._sourceUnit = sourceUnit;
this._isDeclaration = isDeclaration;
this._parserDiagnostics = diagnostics;
this._fileName = fileName;
this._lineMap = lineMap;
this._parseOptions = parseOtions;
}
SyntaxTree.prototype.toJSON = function (key) {
var result = {};
result.isDeclaration = this._isDeclaration;
result.languageVersion = TypeScript.LanguageVersion[this._parseOptions.languageVersion()];
result.parseOptions = this._parseOptions;
if (this.diagnostics().length > 0) {
result.diagnostics = this.diagnostics();
}
result.sourceUnit = this._sourceUnit;
result.lineMap = this._lineMap;
return result;
};
SyntaxTree.prototype.sourceUnit = function () {
return this._sourceUnit;
};
SyntaxTree.prototype.isDeclaration = function () {
return this._isDeclaration;
};
SyntaxTree.prototype.computeDiagnostics = function () {
if (this._parserDiagnostics.length > 0) {
return this._parserDiagnostics;
}
var diagnostics = [];
this.sourceUnit().accept(new GrammarCheckerWalker(this, diagnostics));
return diagnostics;
};
SyntaxTree.prototype.diagnostics = function () {
if (this._allDiagnostics === null) {
this._allDiagnostics = this.computeDiagnostics();
}
return this._allDiagnostics;
};
SyntaxTree.prototype.fileName = function () {
return this._fileName;
};
SyntaxTree.prototype.lineMap = function () {
return this._lineMap;
};
SyntaxTree.prototype.parseOptions = function () {
return this._parseOptions;
};
SyntaxTree.prototype.structuralEquals = function (tree) {
return TypeScript.ArrayUtilities.sequenceEquals(this.diagnostics(), tree.diagnostics(), TypeScript.Diagnostic.equals) && this.sourceUnit().structuralEquals(tree.sourceUnit());
};
return SyntaxTree;
})();
TypeScript.SyntaxTree = SyntaxTree;
var GrammarCheckerWalker = (function (_super) {
__extends(GrammarCheckerWalker, _super);
function GrammarCheckerWalker(syntaxTree, diagnostics) {
_super.call(this);
this.syntaxTree = syntaxTree;
this.diagnostics = diagnostics;
this.inAmbientDeclaration = false;
this.inBlock = false;
this.inObjectLiteralExpression = false;
this.currentConstructor = null;
}
GrammarCheckerWalker.prototype.childFullStart = function (parent, child) {
return this.position() + TypeScript.Syntax.childOffset(parent, child);
};
GrammarCheckerWalker.prototype.childStart = function (parent, child) {
return this.childFullStart(parent, child) + child.leadingTriviaWidth();
};
GrammarCheckerWalker.prototype.pushDiagnostic = function (start, length, diagnosticKey, args) {
if (typeof args === "undefined") { args = null; }
this.diagnostics.push(new TypeScript.Diagnostic(this.syntaxTree.fileName(), this.syntaxTree.lineMap(), start, length, diagnosticKey, args));
};
GrammarCheckerWalker.prototype.pushDiagnostic1 = function (elementFullStart, element, diagnosticKey, args) {
if (typeof args === "undefined") { args = null; }
this.diagnostics.push(new TypeScript.Diagnostic(this.syntaxTree.fileName(), this.syntaxTree.lineMap(), elementFullStart + element.leadingTriviaWidth(), element.width(), diagnosticKey, args));
};
GrammarCheckerWalker.prototype.visitCatchClause = function (node) {
if (node.typeAnnotation) {
this.pushDiagnostic(this.childStart(node, node.typeAnnotation), node.typeAnnotation.width(), TypeScript.DiagnosticCode.Catch_clause_parameter_cannot_have_a_type_annotation);
}
_super.prototype.visitCatchClause.call(this, node);
};
GrammarCheckerWalker.prototype.checkParameterListOrder = function (node) {
var parameterFullStart = this.childFullStart(node, node.parameters);
var seenOptionalParameter = false;
var parameterCount = node.parameters.nonSeparatorCount();
for (var i = 0, n = node.parameters.childCount(); i < n; i++) {
var nodeOrToken = node.parameters.childAt(i);
if (i % 2 === 0) {
var parameterIndex = i / 2;
var parameter = node.parameters.childAt(i);
if (parameter.dotDotDotToken) {
if (parameterIndex !== (parameterCount - 1)) {
this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Rest_parameter_must_be_last_in_list);
return true;
}
if (parameter.questionToken) {
this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Rest_parameter_cannot_be_optional);
return true;
}
if (parameter.equalsValueClause) {
this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Rest_parameter_cannot_have_an_initializer);
return true;
}
} else if (parameter.questionToken || parameter.equalsValueClause) {
seenOptionalParameter = true;
if (parameter.questionToken && parameter.equalsValueClause) {
this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer);
return true;
}
} else {
if (seenOptionalParameter) {
this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Required_parameter_cannot_follow_optional_parameter);
return true;
}
}
}
parameterFullStart += nodeOrToken.fullWidth();
}
return false;
};
GrammarCheckerWalker.prototype.checkParameterListAcessibilityModifiers = function (node) {
var parameterFullStart = this.childFullStart(node, node.parameters);
for (var i = 0, n = node.parameters.childCount(); i < n; i++) {
var nodeOrToken = node.parameters.childAt(i);
if (i % 2 === 0) {
var parameter = node.parameters.childAt(i);
if (this.checkParameterAccessibilityModifiers(node, parameter, parameterFullStart)) {
return true;
}
}
parameterFullStart += nodeOrToken.fullWidth();
}
return false;
};
GrammarCheckerWalker.prototype.checkParameterAccessibilityModifiers = function (parameterList, parameter, parameterFullStart) {
if (parameter.modifiers.childCount() > 0) {
var modifiers = parameter.modifiers;
var modifierFullStart = parameterFullStart + TypeScript.Syntax.childOffset(parameter, modifiers);
for (var i = 0, n = modifiers.childCount(); i < n; i++) {
var modifier = modifiers.childAt(i);
if (this.checkParameterAccessibilityModifier(parameterList, modifier, modifierFullStart, i)) {
return true;
}
modifierFullStart += modifier.fullWidth();
}
}
return false;
};
GrammarCheckerWalker.prototype.checkParameterAccessibilityModifier = function (parameterList, modifier, modifierFullStart, modifierIndex) {
if (modifier.tokenKind !== 57 /* PublicKeyword */ && modifier.tokenKind !== 55 /* PrivateKeyword */) {
this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_parameter, [modifier.text()]);
return true;
} else {
if (modifierIndex > 0) {
this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.Accessibility_modifier_already_seen);
return true;
}
if (!this.inAmbientDeclaration && this.currentConstructor && !this.currentConstructor.block && this.currentConstructor.callSignature.parameterList === parameterList) {
this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.Parameter_property_declarations_cannot_be_used_in_a_constructor_overload);
return true;
} else if (this.inAmbientDeclaration || this.currentConstructor === null || this.currentConstructor.callSignature.parameterList !== parameterList) {
this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.Parameter_property_declarations_can_only_be_used_in_a_non_ambient_constructor_declaration);
return true;
}
}
return false;
};
GrammarCheckerWalker.prototype.checkForTrailingSeparator = function (parent, list) {
if (list.childCount() === 0 || list.childCount() % 2 === 1) {
return false;
}
var currentElementFullStart = this.childFullStart(parent, list);
for (var i = 0, n = list.childCount(); i < n; i++) {
var child = list.childAt(i);
if (i === n - 1) {
this.pushDiagnostic1(currentElementFullStart, child, TypeScript.DiagnosticCode.Trailing_separator_not_allowed);
}
currentElementFullStart += child.fullWidth();
}
return true;
};
GrammarCheckerWalker.prototype.checkForAtLeastOneElement = function (parent, list, expected) {
if (list.childCount() > 0) {
return false;
}
var listFullStart = this.childFullStart(parent, list);
var tokenAtStart = this.syntaxTree.sourceUnit().findToken(listFullStart);
this.pushDiagnostic1(listFullStart, tokenAtStart.token(), TypeScript.DiagnosticCode.Unexpected_token_0_expected, [expected]);
return true;
};
GrammarCheckerWalker.prototype.visitParameterList = function (node) {
if (this.checkParameterListAcessibilityModifiers(node) || this.checkParameterListOrder(node) || this.checkForTrailingSeparator(node, node.parameters)) {
this.skip(node);
return;
}
_super.prototype.visitParameterList.call(this, node);
};
GrammarCheckerWalker.prototype.visitHeritageClause = function (node) {
if (this.checkForTrailingSeparator(node, node.typeNames) || this.checkForAtLeastOneElement(node, node.typeNames, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_name, null))) {
this.skip(node);
return;
}
_super.prototype.visitHeritageClause.call(this, node);
};
GrammarCheckerWalker.prototype.visitArgumentList = function (node) {
if (this.checkForTrailingSeparator(node, node.arguments)) {
this.skip(node);
return;
}
_super.prototype.visitArgumentList.call(this, node);
};
GrammarCheckerWalker.prototype.visitVariableDeclaration = function (node) {
if (this.checkForTrailingSeparator(node, node.variableDeclarators) || this.checkForAtLeastOneElement(node, node.variableDeclarators, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null))) {
this.skip(node);
return;
}
_super.prototype.visitVariableDeclaration.call(this, node);
};
GrammarCheckerWalker.prototype.visitTypeArgumentList = function (node) {
if (this.checkForTrailingSeparator(node, node.typeArguments) || this.checkForAtLeastOneElement(node, node.typeArguments, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null))) {
this.skip(node);
return;
}
_super.prototype.visitTypeArgumentList.call(this, node);
};
GrammarCheckerWalker.prototype.visitTypeParameterList = function (node) {
if (this.checkForTrailingSeparator(node, node.typeParameters) || this.checkForAtLeastOneElement(node, node.typeParameters, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null))) {
this.skip(node);
return;
}
_super.prototype.visitTypeParameterList.call(this, node);
};
GrammarCheckerWalker.prototype.checkIndexSignatureParameter = function (node) {
var parameterFullStart = this.childFullStart(node, node.parameter);
var parameter = node.parameter;
if (parameter.dotDotDotToken) {
this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signatures_cannot_have_rest_parameters);
return true;
} else if (parameter.modifiers.childCount() > 0) {
this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signature_parameter_cannot_have_accessibility_modifiers);
return true;
} else if (parameter.questionToken) {
this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signature_parameter_cannot_have_a_question_mark);
return true;
} else if (parameter.equalsValueClause) {
this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signature_parameter_cannot_have_an_initializer);
return true;
} else if (!parameter.typeAnnotation) {
this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signature_parameter_must_have_a_type_annotation);
return true;
} else if (parameter.typeAnnotation.type.kind() !== 69 /* StringKeyword */ && parameter.typeAnnotation.type.kind() !== 67 /* NumberKeyword */) {
this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signature_parameter_type_must_be_string_or_number);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.visitIndexSignature = function (node) {
if (this.checkIndexSignatureParameter(node)) {
this.skip(node);
return;
}
if (!node.typeAnnotation) {
this.pushDiagnostic1(this.position(), node, TypeScript.DiagnosticCode.Index_signature_must_have_a_type_annotation);
this.skip(node);
return;
}
_super.prototype.visitIndexSignature.call(this, node);
};
GrammarCheckerWalker.prototype.checkClassDeclarationHeritageClauses = function (node) {
var heritageClauseFullStart = this.childFullStart(node, node.heritageClauses);
var seenExtendsClause = false;
var seenImplementsClause = false;
for (var i = 0, n = node.heritageClauses.childCount(); i < n; i++) {
TypeScript.Debug.assert(i <= 2);
var heritageClause = node.heritageClauses.childAt(i);
if (heritageClause.extendsOrImplementsKeyword.tokenKind === 48 /* ExtendsKeyword */) {
if (seenExtendsClause) {
this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.extends_clause_already_seen);
return true;
}
if (seenImplementsClause) {
this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.extends_clause_must_precede_implements_clause);
return true;
}
if (heritageClause.typeNames.nonSeparatorCount() > 1) {
this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.Classes_can_only_extend_a_single_class);
return true;
}
seenExtendsClause = true;
} else {
TypeScript.Debug.assert(heritageClause.extendsOrImplementsKeyword.tokenKind === 51 /* ImplementsKeyword */);
if (seenImplementsClause) {
this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.implements_clause_already_seen);
return true;
}
seenImplementsClause = true;
}
heritageClauseFullStart += heritageClause.fullWidth();
}
return false;
};
GrammarCheckerWalker.prototype.checkForDisallowedDeclareModifier = function (modifiers) {
if (this.inAmbientDeclaration) {
var declareToken = TypeScript.SyntaxUtilities.getToken(modifiers, 63 /* DeclareKeyword */);
if (declareToken) {
this.pushDiagnostic1(this.childFullStart(modifiers, declareToken), declareToken, TypeScript.DiagnosticCode.declare_modifier_not_allowed_for_code_already_in_an_ambient_context);
return true;
}
}
return false;
};
GrammarCheckerWalker.prototype.checkForRequiredDeclareModifier = function (moduleElement, typeKeyword, modifiers) {
if (!this.inAmbientDeclaration && this.syntaxTree.isDeclaration()) {
if (!TypeScript.SyntaxUtilities.containsToken(modifiers, 63 /* DeclareKeyword */)) {
this.pushDiagnostic1(this.childFullStart(moduleElement, typeKeyword), typeKeyword.firstToken(), TypeScript.DiagnosticCode.declare_modifier_required_for_top_level_element);
return true;
}
}
};
GrammarCheckerWalker.prototype.checkFunctionOverloads = function (node, moduleElements) {
if (!this.inAmbientDeclaration && !this.syntaxTree.isDeclaration()) {
var moduleElementFullStart = this.childFullStart(node, moduleElements);
var inFunctionOverloadChain = false;
var functionOverloadChainName = null;
for (var i = 0, n = moduleElements.childCount(); i < n; i++) {
var moduleElement = moduleElements.childAt(i);
var lastElement = i === (n - 1);
if (inFunctionOverloadChain) {
if (moduleElement.kind() !== 129 /* FunctionDeclaration */) {
this.pushDiagnostic1(moduleElementFullStart, moduleElement.firstToken(), TypeScript.DiagnosticCode.Function_implementation_expected);
return true;
}
var functionDeclaration = moduleElement;
if (functionDeclaration.identifier.valueText() !== functionOverloadChainName) {
var identifierFullStart = moduleElementFullStart + TypeScript.Syntax.childOffset(moduleElement, functionDeclaration.identifier);
this.pushDiagnostic1(identifierFullStart, functionDeclaration.identifier, TypeScript.DiagnosticCode.Function_overload_name_must_be_0, [functionOverloadChainName]);
return true;
}
}
if (moduleElement.kind() === 129 /* FunctionDeclaration */) {
functionDeclaration = moduleElement;
if (!TypeScript.SyntaxUtilities.containsToken(functionDeclaration.modifiers, 63 /* DeclareKeyword */)) {
inFunctionOverloadChain = functionDeclaration.block === null;
functionOverloadChainName = functionDeclaration.identifier.valueText();
if (inFunctionOverloadChain) {
if (lastElement) {
this.pushDiagnostic1(moduleElementFullStart, moduleElement.firstToken(), TypeScript.DiagnosticCode.Function_implementation_expected);
return true;
} else {
var nextElement = moduleElements.childAt(i + 1);
if (nextElement.kind() === 129 /* FunctionDeclaration */) {
var nextFunction = nextElement;
if (nextFunction.identifier.valueText() !== functionOverloadChainName && nextFunction.block === null) {
var identifierFullStart = moduleElementFullStart + TypeScript.Syntax.childOffset(moduleElement, functionDeclaration.identifier);
this.pushDiagnostic1(identifierFullStart, functionDeclaration.identifier, TypeScript.DiagnosticCode.Function_implementation_expected);
return true;
}
}
}
}
} else {
inFunctionOverloadChain = false;
functionOverloadChainName = "";
}
}
moduleElementFullStart += moduleElement.fullWidth();
}
}
return false;
};
GrammarCheckerWalker.prototype.checkClassOverloads = function (node) {
if (!this.inAmbientDeclaration && !TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */)) {
var classElementFullStart = this.childFullStart(node, node.classElements);
var inFunctionOverloadChain = false;
var inConstructorOverloadChain = false;
var functionOverloadChainName = null;
var isInStaticOverloadChain = null;
var memberFunctionDeclaration = null;
for (var i = 0, n = node.classElements.childCount(); i < n; i++) {
var classElement = node.classElements.childAt(i);
var lastElement = i === (n - 1);
var isStaticOverload = null;
if (inFunctionOverloadChain) {
if (classElement.kind() !== 135 /* MemberFunctionDeclaration */) {
this.pushDiagnostic1(classElementFullStart, classElement.firstToken(), TypeScript.DiagnosticCode.Function_implementation_expected);
return true;
}
memberFunctionDeclaration = classElement;
if (memberFunctionDeclaration.propertyName.valueText() !== functionOverloadChainName) {
var propertyNameFullStart = classElementFullStart + TypeScript.Syntax.childOffset(classElement, memberFunctionDeclaration.propertyName);
this.pushDiagnostic1(propertyNameFullStart, memberFunctionDeclaration.propertyName, TypeScript.DiagnosticCode.Function_overload_name_must_be_0, [functionOverloadChainName]);
return true;
}
isStaticOverload = TypeScript.SyntaxUtilities.containsToken(memberFunctionDeclaration.modifiers, 58 /* StaticKeyword */);
if (isStaticOverload !== isInStaticOverloadChain) {
var propertyNameFullStart = classElementFullStart + TypeScript.Syntax.childOffset(classElement, memberFunctionDeclaration.propertyName);
var diagnostic = isInStaticOverloadChain ? TypeScript.DiagnosticCode.Function_overload_must_be_static : TypeScript.DiagnosticCode.Function_overload_must_not_be_static;
this.pushDiagnostic1(propertyNameFullStart, memberFunctionDeclaration.propertyName, diagnostic, null);
return true;
}
} else if (inConstructorOverloadChain) {
if (classElement.kind() !== 137 /* ConstructorDeclaration */) {
this.pushDiagnostic1(classElementFullStart, classElement.firstToken(), TypeScript.DiagnosticCode.Constructor_implementation_expected);
return true;
}
}
if (classElement.kind() === 135 /* MemberFunctionDeclaration */) {
memberFunctionDeclaration = classElement;
inFunctionOverloadChain = memberFunctionDeclaration.block === null;
functionOverloadChainName = memberFunctionDeclaration.propertyName.valueText();
isInStaticOverloadChain = TypeScript.SyntaxUtilities.containsToken(memberFunctionDeclaration.modifiers, 58 /* StaticKeyword */);
if (inFunctionOverloadChain) {
if (lastElement) {
this.pushDiagnostic1(classElementFullStart, classElement.firstToken(), TypeScript.DiagnosticCode.Function_implementation_expected);
return true;
} else {
var nextElement = node.classElements.childAt(i + 1);
if (nextElement.kind() === 135 /* MemberFunctionDeclaration */) {
var nextMemberFunction = nextElement;
if (nextMemberFunction.propertyName.valueText() !== functionOverloadChainName && nextMemberFunction.block === null) {
var propertyNameFullStart = classElementFullStart + TypeScript.Syntax.childOffset(classElement, memberFunctionDeclaration.propertyName);
this.pushDiagnostic1(propertyNameFullStart, memberFunctionDeclaration.propertyName, TypeScript.DiagnosticCode.Function_implementation_expected);
return true;
}
}
}
}
} else if (classElement.kind() === 137 /* ConstructorDeclaration */) {
var constructorDeclaration = classElement;
inConstructorOverloadChain = constructorDeclaration.block === null;
if (lastElement && inConstructorOverloadChain) {
this.pushDiagnostic1(classElementFullStart, classElement.firstToken(), TypeScript.DiagnosticCode.Constructor_implementation_expected);
return true;
}
}
classElementFullStart += classElement.fullWidth();
}
}
return false;
};
GrammarCheckerWalker.prototype.checkForReservedName = function (parent, name, diagnosticKey) {
var nameFullStart = this.childFullStart(parent, name);
var token;
var tokenFullStart;
var current = name;
while (current !== null) {
if (current.kind() === 121 /* QualifiedName */) {
var qualifiedName = current;
token = qualifiedName.right;
tokenFullStart = nameFullStart + this.childFullStart(qualifiedName, token);
current = qualifiedName.left;
} else {
TypeScript.Debug.assert(current.kind() === 11 /* IdentifierName */);
token = current;
tokenFullStart = nameFullStart;
current = null;
}
switch (token.valueText()) {
case "any":
case "number":
case "boolean":
case "string":
case "void":
this.pushDiagnostic(tokenFullStart + token.leadingTriviaWidth(), token.width(), diagnosticKey, [token.valueText()]);
return true;
}
}
return false;
};
GrammarCheckerWalker.prototype.visitClassDeclaration = function (node) {
if (this.checkForReservedName(node, node.identifier, TypeScript.DiagnosticCode.Class_name_cannot_be_0) || this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForRequiredDeclareModifier(node, node.classKeyword, node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkClassDeclarationHeritageClauses(node) || this.checkClassOverloads(node)) {
this.skip(node);
return;
}
var savedInAmbientDeclaration = this.inAmbientDeclaration;
this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */);
_super.prototype.visitClassDeclaration.call(this, node);
this.inAmbientDeclaration = savedInAmbientDeclaration;
};
GrammarCheckerWalker.prototype.checkInterfaceDeclarationHeritageClauses = function (node) {
var heritageClauseFullStart = this.childFullStart(node, node.heritageClauses);
var seenExtendsClause = false;
for (var i = 0, n = node.heritageClauses.childCount(); i < n; i++) {
TypeScript.Debug.assert(i <= 1);
var heritageClause = node.heritageClauses.childAt(i);
if (heritageClause.extendsOrImplementsKeyword.tokenKind === 48 /* ExtendsKeyword */) {
if (seenExtendsClause) {
this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.extends_clause_already_seen);
return true;
}
seenExtendsClause = true;
} else {
TypeScript.Debug.assert(heritageClause.extendsOrImplementsKeyword.tokenKind === 51 /* ImplementsKeyword */);
this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.Interface_declaration_cannot_have_implements_clause);
return true;
}
heritageClauseFullStart += heritageClause.fullWidth();
}
return false;
};
GrammarCheckerWalker.prototype.checkInterfaceModifiers = function (modifiers) {
var modifierFullStart = this.position();
for (var i = 0, n = modifiers.childCount(); i < n; i++) {
var modifier = modifiers.childAt(i);
if (modifier.tokenKind === 63 /* DeclareKeyword */) {
this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.declare_modifier_cannot_appear_on_an_interface_declaration);
return true;
}
modifierFullStart += modifier.fullWidth();
}
return false;
};
GrammarCheckerWalker.prototype.visitInterfaceDeclaration = function (node) {
if (this.checkForReservedName(node, node.identifier, TypeScript.DiagnosticCode.Interface_name_cannot_be_0) || this.checkInterfaceModifiers(node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkInterfaceDeclarationHeritageClauses(node)) {
this.skip(node);
return;
}
_super.prototype.visitInterfaceDeclaration.call(this, node);
};
GrammarCheckerWalker.prototype.checkClassElementModifiers = function (list) {
var modifierFullStart = this.position();
var seenAccessibilityModifier = false;
var seenStaticModifier = false;
for (var i = 0, n = list.childCount(); i < n; i++) {
var modifier = list.childAt(i);
if (modifier.tokenKind === 57 /* PublicKeyword */ || modifier.tokenKind === 55 /* PrivateKeyword */) {
if (seenAccessibilityModifier) {
this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.Accessibility_modifier_already_seen);
return true;
}
if (seenStaticModifier) {
var previousToken = list.childAt(i - 1);
this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_must_precede_1_modifier, [modifier.text(), previousToken.text()]);
return true;
}
seenAccessibilityModifier = true;
} else if (modifier.tokenKind === 58 /* StaticKeyword */) {
if (seenStaticModifier) {
this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_already_seen, [modifier.text()]);
return true;
}
seenStaticModifier = true;
} else {
this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_class_element, [modifier.text()]);
return true;
}
modifierFullStart += modifier.fullWidth();
}
return false;
};
GrammarCheckerWalker.prototype.visitMemberVariableDeclaration = function (node) {
if (this.checkClassElementModifiers(node.modifiers)) {
this.skip(node);
return;
}
_super.prototype.visitMemberVariableDeclaration.call(this, node);
};
GrammarCheckerWalker.prototype.visitMemberFunctionDeclaration = function (node) {
if (this.checkClassElementModifiers(node.modifiers)) {
this.skip(node);
return;
}
_super.prototype.visitMemberFunctionDeclaration.call(this, node);
};
GrammarCheckerWalker.prototype.checkGetAccessorParameter = function (node, getKeyword, parameterList) {
var getKeywordFullStart = this.childFullStart(node, getKeyword);
if (parameterList.parameters.childCount() !== 0) {
this.pushDiagnostic1(getKeywordFullStart, getKeyword, TypeScript.DiagnosticCode.get_accessor_cannot_have_parameters);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.visitIndexMemberDeclaration = function (node) {
if (this.checkIndexMemberModifiers(node)) {
this.skip(node);
return;
}
_super.prototype.visitIndexMemberDeclaration.call(this, node);
};
GrammarCheckerWalker.prototype.checkIndexMemberModifiers = function (node) {
if (node.modifiers.childCount() > 0) {
var modifierFullStart = this.childFullStart(node, node.modifiers);
this.pushDiagnostic1(modifierFullStart, node.modifiers.childAt(0), TypeScript.DiagnosticCode.Modifiers_cannot_appear_here);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.checkEcmaScriptVersionIsAtLeast = function (parent, node, languageVersion, diagnosticKey) {
if (this.syntaxTree.parseOptions().languageVersion() < languageVersion) {
var nodeFullStart = this.childFullStart(parent, node);
this.pushDiagnostic1(nodeFullStart, node, diagnosticKey);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.visitObjectLiteralExpression = function (node) {
var savedInObjectLiteralExpression = this.inObjectLiteralExpression;
this.inObjectLiteralExpression = true;
_super.prototype.visitObjectLiteralExpression.call(this, node);
this.inObjectLiteralExpression = savedInObjectLiteralExpression;
};
GrammarCheckerWalker.prototype.visitGetAccessor = function (node) {
if (this.checkForAccessorDeclarationInAmbientContext(node) || this.checkEcmaScriptVersionIsAtLeast(node, node.getKeyword, 1 /* EcmaScript5 */, TypeScript.DiagnosticCode.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkClassElementModifiers(node.modifiers) || this.checkGetAccessorParameter(node, node.getKeyword, node.parameterList)) {
this.skip(node);
return;
}
_super.prototype.visitGetAccessor.call(this, node);
};
GrammarCheckerWalker.prototype.checkForAccessorDeclarationInAmbientContext = function (accessor) {
if (this.inAmbientDeclaration) {
this.pushDiagnostic1(this.position(), accessor, TypeScript.DiagnosticCode.Accessors_are_not_allowed_in_ambient_contexts, null);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.checkSetAccessorParameter = function (node, setKeyword, parameterList) {
var setKeywordFullStart = this.childFullStart(node, setKeyword);
if (parameterList.parameters.childCount() !== 1) {
this.pushDiagnostic1(setKeywordFullStart, setKeyword, TypeScript.DiagnosticCode.set_accessor_must_have_one_and_only_one_parameter);
return true;
}
var parameterListFullStart = this.childFullStart(node, parameterList);
var parameterFullStart = parameterListFullStart + TypeScript.Syntax.childOffset(parameterList, parameterList.openParenToken);
var parameter = parameterList.parameters.childAt(0);
if (parameter.questionToken) {
this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.set_accessor_parameter_cannot_be_optional);
return true;
}
if (parameter.equalsValueClause) {
this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.set_accessor_parameter_cannot_have_an_initializer);
return true;
}
if (parameter.dotDotDotToken) {
this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.set_accessor_cannot_have_rest_parameter);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.visitSetAccessor = function (node) {
if (this.checkForAccessorDeclarationInAmbientContext(node) || this.checkEcmaScriptVersionIsAtLeast(node, node.setKeyword, 1 /* EcmaScript5 */, TypeScript.DiagnosticCode.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkClassElementModifiers(node.modifiers) || this.checkSetAccessorParameter(node, node.setKeyword, node.parameterList)) {
this.skip(node);
return;
}
_super.prototype.visitSetAccessor.call(this, node);
};
GrammarCheckerWalker.prototype.visitEnumDeclaration = function (node) {
if (this.checkForReservedName(node, node.identifier, TypeScript.DiagnosticCode.Enum_name_cannot_be_0) || this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForRequiredDeclareModifier(node, node.enumKeyword, node.modifiers) || this.checkModuleElementModifiers(node.modifiers), this.checkEnumElements(node)) {
this.skip(node);
return;
}
var savedInAmbientDeclaration = this.inAmbientDeclaration;
this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */);
_super.prototype.visitEnumDeclaration.call(this, node);
this.inAmbientDeclaration = savedInAmbientDeclaration;
};
GrammarCheckerWalker.prototype.checkEnumElements = function (node) {
var enumElementFullStart = this.childFullStart(node, node.enumElements);
var previousValueWasComputed = false;
for (var i = 0, n = node.enumElements.childCount(); i < n; i++) {
var child = node.enumElements.childAt(i);
if (i % 2 === 0) {
var enumElement = child;
if (!enumElement.equalsValueClause && previousValueWasComputed) {
this.pushDiagnostic1(enumElementFullStart, enumElement, TypeScript.DiagnosticCode.Enum_member_must_have_initializer, null);
return true;
}
if (enumElement.equalsValueClause) {
var value = enumElement.equalsValueClause.value;
previousValueWasComputed = !TypeScript.Syntax.isIntegerLiteral(value);
}
}
enumElementFullStart += child.fullWidth();
}
return false;
};
GrammarCheckerWalker.prototype.visitEnumElement = function (node) {
if (this.inAmbientDeclaration && node.equalsValueClause) {
var expression = node.equalsValueClause.value;
if (!TypeScript.Syntax.isIntegerLiteral(expression)) {
this.pushDiagnostic1(this.childFullStart(node, node.equalsValueClause), node.equalsValueClause.firstToken(), TypeScript.DiagnosticCode.Ambient_enum_elements_can_only_have_integer_literal_initializers);
this.skip(node);
return;
}
}
_super.prototype.visitEnumElement.call(this, node);
};
GrammarCheckerWalker.prototype.visitInvocationExpression = function (node) {
if (node.expression.kind() === 50 /* SuperKeyword */ && node.argumentList.typeArgumentList !== null) {
this.pushDiagnostic1(this.position(), node, TypeScript.DiagnosticCode.super_invocation_cannot_have_type_arguments);
}
_super.prototype.visitInvocationExpression.call(this, node);
};
GrammarCheckerWalker.prototype.checkModuleElementModifiers = function (modifiers) {
var modifierFullStart = this.position();
var seenExportModifier = false;
var seenDeclareModifier = false;
for (var i = 0, n = modifiers.childCount(); i < n; i++) {
var modifier = modifiers.childAt(i);
if (modifier.tokenKind === 57 /* PublicKeyword */ || modifier.tokenKind === 55 /* PrivateKeyword */ || modifier.tokenKind === 58 /* StaticKeyword */) {
this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_module_element, [modifier.text()]);
return true;
}
if (modifier.tokenKind === 63 /* DeclareKeyword */) {
if (seenDeclareModifier) {
this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.Accessibility_modifier_already_seen);
return;
}
seenDeclareModifier = true;
} else if (modifier.tokenKind === 47 /* ExportKeyword */) {
if (seenExportModifier) {
this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_already_seen, [modifier.text()]);
return;
}
if (seenDeclareModifier) {
this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_must_precede_1_modifier, [TypeScript.SyntaxFacts.getText(47 /* ExportKeyword */), TypeScript.SyntaxFacts.getText(63 /* DeclareKeyword */)]);
return;
}
seenExportModifier = true;
}
modifierFullStart += modifier.fullWidth();
}
return false;
};
GrammarCheckerWalker.prototype.checkForDisallowedImportDeclaration = function (node) {
var currentElementFullStart = this.childFullStart(node, node.moduleElements);
for (var i = 0, n = node.moduleElements.childCount(); i < n; i++) {
var child = node.moduleElements.childAt(i);
if (child.kind() === 133 /* ImportDeclaration */) {
var importDeclaration = child;
if (importDeclaration.moduleReference.kind() === 245 /* ExternalModuleReference */) {
if (node.stringLiteral === null) {
this.pushDiagnostic1(currentElementFullStart, importDeclaration, TypeScript.DiagnosticCode.Import_declarations_in_an_internal_module_cannot_reference_an_external_module, null);
}
}
}
currentElementFullStart += child.fullWidth();
}
return false;
};
GrammarCheckerWalker.prototype.checkForDisallowedDeclareModifierOnImportDeclaration = function (modifiers) {
var declareToken = TypeScript.SyntaxUtilities.getToken(modifiers, 63 /* DeclareKeyword */);
if (declareToken) {
this.pushDiagnostic1(this.childFullStart(modifiers, declareToken), declareToken, TypeScript.DiagnosticCode.declare_modifier_not_allowed_on_import_declaration);
return true;
}
};
GrammarCheckerWalker.prototype.visitImportDeclaration = function (node) {
if (this.checkForDisallowedDeclareModifierOnImportDeclaration(node.modifiers) || this.checkModuleElementModifiers(node.modifiers)) {
this.skip(node);
return;
}
_super.prototype.visitImportDeclaration.call(this, node);
};
GrammarCheckerWalker.prototype.visitModuleDeclaration = function (node) {
if (this.checkForReservedName(node, node.name, TypeScript.DiagnosticCode.Module_name_cannot_be_0) || this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForRequiredDeclareModifier(node, node.moduleKeyword, node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkForDisallowedImportDeclaration(node) || this.checkForDisallowedExports(node, node.moduleElements) || this.checkForMultipleExportAssignments(node, node.moduleElements)) {
this.skip(node);
return;
}
if (!TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */) && this.checkFunctionOverloads(node, node.moduleElements)) {
this.skip(node);
return;
}
if (node.stringLiteral) {
if (!this.inAmbientDeclaration && !TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */)) {
var stringLiteralFullStart = this.childFullStart(node, node.stringLiteral);
this.pushDiagnostic1(stringLiteralFullStart, node.stringLiteral, TypeScript.DiagnosticCode.Only_ambient_modules_can_use_quoted_names);
this.skip(node);
return;
}
}
if (!node.stringLiteral && this.checkForDisallowedExportAssignment(node)) {
this.skip(node);
return;
}
var savedInAmbientDeclaration = this.inAmbientDeclaration;
this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */);
_super.prototype.visitModuleDeclaration.call(this, node);
this.inAmbientDeclaration = savedInAmbientDeclaration;
};
GrammarCheckerWalker.prototype.checkForDisallowedExports = function (node, moduleElements) {
var seenExportedElement = false;
for (var i = 0, n = moduleElements.childCount(); i < n; i++) {
var child = moduleElements.childAt(i);
if (TypeScript.SyntaxUtilities.hasExportKeyword(child)) {
seenExportedElement = true;
break;
}
}
var moduleElementFullStart = this.childFullStart(node, moduleElements);
if (seenExportedElement) {
for (var i = 0, n = moduleElements.childCount(); i < n; i++) {
var child = moduleElements.childAt(i);
if (child.kind() === 134 /* ExportAssignment */) {
this.pushDiagnostic1(moduleElementFullStart, child, TypeScript.DiagnosticCode.Export_assignment_not_allowed_in_module_with_exported_element);
return true;
}
moduleElementFullStart += child.fullWidth();
}
}
return false;
};
GrammarCheckerWalker.prototype.checkForMultipleExportAssignments = function (node, moduleElements) {
var moduleElementFullStart = this.childFullStart(node, moduleElements);
var seenExportAssignment = false;
var errorFound = false;
for (var i = 0, n = moduleElements.childCount(); i < n; i++) {
var child = moduleElements.childAt(i);
if (child.kind() === 134 /* ExportAssignment */) {
if (seenExportAssignment) {
this.pushDiagnostic1(moduleElementFullStart, child, TypeScript.DiagnosticCode.Module_cannot_have_multiple_export_assignments);
errorFound = true;
}
seenExportAssignment = true;
}
moduleElementFullStart += child.fullWidth();
}
return errorFound;
};
GrammarCheckerWalker.prototype.checkForDisallowedExportAssignment = function (node) {
var moduleElementFullStart = this.childFullStart(node, node.moduleElements);
for (var i = 0, n = node.moduleElements.childCount(); i < n; i++) {
var child = node.moduleElements.childAt(i);
if (child.kind() === 134 /* ExportAssignment */) {
this.pushDiagnostic1(moduleElementFullStart, child, TypeScript.DiagnosticCode.Export_assignment_cannot_be_used_in_internal_modules);
return true;
}
moduleElementFullStart += child.fullWidth();
}
return false;
};
GrammarCheckerWalker.prototype.visitBlock = function (node) {
if (this.inAmbientDeclaration || this.syntaxTree.isDeclaration()) {
this.pushDiagnostic1(this.position(), node.firstToken(), TypeScript.DiagnosticCode.Implementations_are_not_allowed_in_ambient_contexts);
this.skip(node);
return;
}
if (this.checkFunctionOverloads(node, node.statements)) {
this.skip(node);
return;
}
var savedInBlock = this.inBlock;
this.inBlock = true;
_super.prototype.visitBlock.call(this, node);
this.inBlock = savedInBlock;
};
GrammarCheckerWalker.prototype.checkForStatementInAmbientContxt = function (node) {
if (this.inAmbientDeclaration || this.syntaxTree.isDeclaration()) {
this.pushDiagnostic1(this.position(), node.firstToken(), TypeScript.DiagnosticCode.Statements_are_not_allowed_in_ambient_contexts);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.visitBreakStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
this.skip(node);
return;
}
_super.prototype.visitBreakStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitContinueStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
this.skip(node);
return;
}
_super.prototype.visitContinueStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitDebuggerStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
this.skip(node);
return;
}
_super.prototype.visitDebuggerStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitDoStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
this.skip(node);
return;
}
_super.prototype.visitDoStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitEmptyStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
this.skip(node);
return;
}
_super.prototype.visitEmptyStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitExpressionStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
this.skip(node);
return;
}
_super.prototype.visitExpressionStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitForInStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node) || this.checkForInStatementVariableDeclaration(node)) {
this.skip(node);
return;
}
_super.prototype.visitForInStatement.call(this, node);
};
GrammarCheckerWalker.prototype.checkForInStatementVariableDeclaration = function (node) {
if (node.variableDeclaration && node.variableDeclaration.variableDeclarators.nonSeparatorCount() > 1) {
var variableDeclarationFullStart = this.childFullStart(node, node.variableDeclaration);
this.pushDiagnostic1(variableDeclarationFullStart, node.variableDeclaration, TypeScript.DiagnosticCode.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.visitForStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
this.skip(node);
return;
}
_super.prototype.visitForStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitIfStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
this.skip(node);
return;
}
_super.prototype.visitIfStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitLabeledStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
this.skip(node);
return;
}
_super.prototype.visitLabeledStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitReturnStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
this.skip(node);
return;
}
_super.prototype.visitReturnStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitSwitchStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
this.skip(node);
return;
}
_super.prototype.visitSwitchStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitThrowStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
this.skip(node);
return;
}
_super.prototype.visitThrowStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitTryStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
this.skip(node);
return;
}
_super.prototype.visitTryStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitWhileStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
this.skip(node);
return;
}
_super.prototype.visitWhileStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitWithStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
this.skip(node);
return;
}
_super.prototype.visitWithStatement.call(this, node);
};
GrammarCheckerWalker.prototype.checkForDisallowedModifiers = function (parent, modifiers) {
if (this.inBlock || this.inObjectLiteralExpression) {
if (modifiers.childCount() > 0) {
var modifierFullStart = this.childFullStart(parent, modifiers);
this.pushDiagnostic1(modifierFullStart, modifiers.childAt(0), TypeScript.DiagnosticCode.Modifiers_cannot_appear_here);
return true;
}
}
return false;
};
GrammarCheckerWalker.prototype.visitFunctionDeclaration = function (node) {
if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkForRequiredDeclareModifier(node, node.functionKeyword, node.modifiers) || this.checkModuleElementModifiers(node.modifiers)) {
this.skip(node);
return;
}
var savedInAmbientDeclaration = this.inAmbientDeclaration;
this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */);
_super.prototype.visitFunctionDeclaration.call(this, node);
this.inAmbientDeclaration = savedInAmbientDeclaration;
};
GrammarCheckerWalker.prototype.visitVariableStatement = function (node) {
if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkForRequiredDeclareModifier(node, node.variableDeclaration, node.modifiers) || this.checkModuleElementModifiers(node.modifiers)) {
this.skip(node);
return;
}
var savedInAmbientDeclaration = this.inAmbientDeclaration;
this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */);
_super.prototype.visitVariableStatement.call(this, node);
this.inAmbientDeclaration = savedInAmbientDeclaration;
};
GrammarCheckerWalker.prototype.checkListSeparators = function (parent, list, kind) {
var currentElementFullStart = this.childFullStart(parent, list);
for (var i = 0, n = list.childCount(); i < n; i++) {
var child = list.childAt(i);
if (i % 2 === 1 && child.kind() !== kind) {
this.pushDiagnostic1(currentElementFullStart, child, TypeScript.DiagnosticCode._0_expected, [TypeScript.SyntaxFacts.getText(kind)]);
}
currentElementFullStart += child.fullWidth();
}
return false;
};
GrammarCheckerWalker.prototype.visitObjectType = function (node) {
if (this.checkListSeparators(node, node.typeMembers, 78 /* SemicolonToken */)) {
this.skip(node);
return;
}
var savedInAmbientDeclaration = this.inAmbientDeclaration;
this.inAmbientDeclaration = true;
_super.prototype.visitObjectType.call(this, node);
this.inAmbientDeclaration = savedInAmbientDeclaration;
};
GrammarCheckerWalker.prototype.visitArrayType = function (node) {
var savedInAmbientDeclaration = this.inAmbientDeclaration;
this.inAmbientDeclaration = true;
_super.prototype.visitArrayType.call(this, node);
this.inAmbientDeclaration = savedInAmbientDeclaration;
};
GrammarCheckerWalker.prototype.visitFunctionType = function (node) {
var savedInAmbientDeclaration = this.inAmbientDeclaration;
this.inAmbientDeclaration = true;
_super.prototype.visitFunctionType.call(this, node);
this.inAmbientDeclaration = savedInAmbientDeclaration;
};
GrammarCheckerWalker.prototype.visitConstructorType = function (node) {
var savedInAmbientDeclaration = this.inAmbientDeclaration;
this.inAmbientDeclaration = true;
_super.prototype.visitConstructorType.call(this, node);
this.inAmbientDeclaration = savedInAmbientDeclaration;
};
GrammarCheckerWalker.prototype.visitVariableDeclarator = function (node) {
if (this.inAmbientDeclaration && node.equalsValueClause) {
this.pushDiagnostic1(this.childFullStart(node, node.equalsValueClause), node.equalsValueClause.firstToken(), TypeScript.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts);
this.skip(node);
return;
}
_super.prototype.visitVariableDeclarator.call(this, node);
};
GrammarCheckerWalker.prototype.visitConstructorDeclaration = function (node) {
if (this.checkClassElementModifiers(node.modifiers) || this.checkConstructorModifiers(node.modifiers) || this.checkConstructorTypeParameterList(node) || this.checkConstructorTypeAnnotation(node)) {
this.skip(node);
return;
}
var savedCurrentConstructor = this.currentConstructor;
this.currentConstructor = node;
_super.prototype.visitConstructorDeclaration.call(this, node);
this.currentConstructor = savedCurrentConstructor;
};
GrammarCheckerWalker.prototype.checkConstructorModifiers = function (modifiers) {
var currentElementFullStart = this.position();
for (var i = 0, n = modifiers.childCount(); i < n; i++) {
var child = modifiers.childAt(i);
if (child.kind() !== 57 /* PublicKeyword */) {
this.pushDiagnostic1(currentElementFullStart, child, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_constructor_declaration, [TypeScript.SyntaxFacts.getText(child.kind())]);
return true;
}
currentElementFullStart += child.fullWidth();
}
return false;
};
GrammarCheckerWalker.prototype.checkConstructorTypeParameterList = function (node) {
var currentElementFullStart = this.position();
if (node.callSignature.typeParameterList) {
var callSignatureFullStart = this.childFullStart(node, node.callSignature);
var typeParameterListFullStart = callSignatureFullStart + TypeScript.Syntax.childOffset(node.callSignature, node.callSignature.typeAnnotation);
this.pushDiagnostic1(callSignatureFullStart, node.callSignature.typeParameterList, TypeScript.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.checkConstructorTypeAnnotation = function (node) {
var currentElementFullStart = this.position();
if (node.callSignature.typeAnnotation) {
var callSignatureFullStart = this.childFullStart(node, node.callSignature);
var typeAnnotationFullStart = callSignatureFullStart + TypeScript.Syntax.childOffset(node.callSignature, node.callSignature.typeAnnotation);
this.pushDiagnostic1(typeAnnotationFullStart, node.callSignature.typeAnnotation, TypeScript.DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.visitSourceUnit = function (node) {
if (this.checkFunctionOverloads(node, node.moduleElements) || this.checkForDisallowedExports(node, node.moduleElements) || this.checkForMultipleExportAssignments(node, node.moduleElements)) {
this.skip(node);
return;
}
_super.prototype.visitSourceUnit.call(this, node);
};
return GrammarCheckerWalker;
})(TypeScript.PositionTrackingWalker);
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Unicode = (function () {
function Unicode() {
}
Unicode.lookupInUnicodeMap = function (code, map) {
if (code < map[0]) {
return false;
}
var lo = 0;
var hi = map.length;
var mid;
while (lo + 1 < hi) {
mid = lo + (hi - lo) / 2;
mid -= mid % 2;
if (map[mid] <= code && code <= map[mid + 1]) {
return true;
}
if (code < map[mid]) {
hi = mid;
} else {
lo = mid + 2;
}
}
return false;
};
Unicode.isIdentifierStart = function (code, languageVersion) {
if (languageVersion === 0 /* EcmaScript3 */) {
return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES3IdentifierStart);
} else if (languageVersion === 1 /* EcmaScript5 */) {
return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES5IdentifierStart);
} else {
throw TypeScript.Errors.argumentOutOfRange("languageVersion");
}
};
Unicode.isIdentifierPart = function (code, languageVersion) {
if (languageVersion === 0 /* EcmaScript3 */) {
return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES3IdentifierPart);
} else if (languageVersion === 1 /* EcmaScript5 */) {
return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES5IdentifierPart);
} else {
throw TypeScript.Errors.argumentOutOfRange("languageVersion");
}
};
Unicode.unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500];
Unicode.unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500];
Unicode.unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500];
Unicode.unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500];
return Unicode;
})();
TypeScript.Unicode = Unicode;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(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;
})(TypeScript.CompilerDiagnostics || (TypeScript.CompilerDiagnostics = {}));
var 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;
function timeFunction(logger, funcDescription, func) {
var start = (new Date()).getTime();
var result = func();
var end = (new Date()).getTime();
if (logger.information()) {
logger.log(funcDescription + " completed in " + (end - start) + " msec");
}
return result;
}
TypeScript.timeFunction = timeFunction;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Document = (function () {
function Document(_compiler, _semanticInfoChain, fileName, referencedFiles, _scriptSnapshot, byteOrderMark, version, isOpen, _syntaxTree, _topLevelDecl) {
this._compiler = _compiler;
this._semanticInfoChain = _semanticInfoChain;
this.fileName = fileName;
this.referencedFiles = referencedFiles;
this._scriptSnapshot = _scriptSnapshot;
this.byteOrderMark = byteOrderMark;
this.version = version;
this.isOpen = isOpen;
this._syntaxTree = _syntaxTree;
this._topLevelDecl = _topLevelDecl;
this._diagnostics = null;
this._bloomFilter = null;
this._sourceUnit = null;
this._lineMap = null;
this._declASTMap = [];
this._astDeclMap = [];
this._amdDependencies = undefined;
this._externalModuleIndicatorSpan = undefined;
}
Document.prototype.invalidate = function () {
this._declASTMap.length = 0;
this._astDeclMap.length = 0;
this._topLevelDecl = null;
this._syntaxTree = null;
this._sourceUnit = null;
this._diagnostics = null;
this._bloomFilter = null;
};
Document.prototype.isDeclareFile = function () {
return TypeScript.isDTSFile(this.fileName);
};
Document.prototype.cacheSyntaxTreeInfo = function (syntaxTree) {
var start = new Date().getTime();
this._diagnostics = syntaxTree.diagnostics();
TypeScript.syntaxDiagnosticsTime += new Date().getTime() - start;
this._lineMap = syntaxTree.lineMap();
var sourceUnit = syntaxTree.sourceUnit();
var leadingTrivia = sourceUnit.leadingTrivia();
this._externalModuleIndicatorSpan = this.getImplicitImportSpan(leadingTrivia) || this.getTopLevelImportOrExportSpan(sourceUnit);
var amdDependencies = [];
for (var i = 0, n = leadingTrivia.count(); i < n; i++) {
var trivia = leadingTrivia.syntaxTriviaAt(i);
if (trivia.isComment()) {
var amdDependency = this.getAmdDependency(trivia.fullText());
if (amdDependency) {
amdDependencies.push(amdDependency);
}
}
}
this._amdDependencies = amdDependencies;
};
Document.prototype.getAmdDependency = function (comment) {
var amdDependencyRegEx = /^\/\/\/\s*<amd-dependency\s+path=('|")(.+?)\1/gim;
var match = amdDependencyRegEx.exec(comment);
return match ? match[2] : null;
};
Document.prototype.getImplicitImportSpan = function (sourceUnitLeadingTrivia) {
var position = 0;
for (var i = 0, n = sourceUnitLeadingTrivia.count(); i < n; i++) {
var trivia = sourceUnitLeadingTrivia.syntaxTriviaAt(i);
if (trivia.isComment()) {
var span = this.getImplicitImportSpanWorker(trivia, position);
if (span) {
return span;
}
}
position += trivia.fullWidth();
}
return null;
};
Document.prototype.getImplicitImportSpanWorker = function (trivia, position) {
var implicitImportRegEx = /^(\/\/\/\s*<implicit-import\s*)*\/>/gim;
var match = implicitImportRegEx.exec(trivia.fullText());
if (match) {
return new TypeScript.TextSpan(position, trivia.fullWidth());
}
return null;
};
Document.prototype.getTopLevelImportOrExportSpan = function (node) {
var firstToken;
var position = 0;
for (var i = 0, n = node.moduleElements.childCount(); i < n; i++) {
var moduleElement = node.moduleElements.childAt(i);
firstToken = moduleElement.firstToken();
if (firstToken !== null && firstToken.tokenKind === 47 /* ExportKeyword */) {
return new TypeScript.TextSpan(position + firstToken.leadingTriviaWidth(), firstToken.width());
}
if (moduleElement.kind() === 133 /* ImportDeclaration */) {
var importDecl = moduleElement;
if (importDecl.moduleReference.kind() === 245 /* ExternalModuleReference */) {
return new TypeScript.TextSpan(position + importDecl.leadingTriviaWidth(), importDecl.width());
}
}
position += moduleElement.fullWidth();
}
return null;
;
};
Document.prototype.sourceUnit = function () {
if (!this._sourceUnit) {
var start = new Date().getTime();
var syntaxTree = this.syntaxTree();
this._sourceUnit = TypeScript.SyntaxTreeToAstVisitor.visit(syntaxTree, this.fileName, this._compiler.compilationSettings(), this.isOpen);
TypeScript.astTranslationTime += new Date().getTime() - start;
if (!this.isOpen) {
this._syntaxTree = null;
}
}
return this._sourceUnit;
};
Document.prototype.diagnostics = function () {
if (this._diagnostics === null) {
this.syntaxTree();
TypeScript.Debug.assert(this._diagnostics);
}
return this._diagnostics;
};
Document.prototype.lineMap = function () {
if (this._lineMap === null) {
this.syntaxTree();
TypeScript.Debug.assert(this._lineMap);
}
return this._lineMap;
};
Document.prototype.isExternalModule = function () {
return this.externalModuleIndicatorSpan() !== null;
};
Document.prototype.externalModuleIndicatorSpan = function () {
if (this._externalModuleIndicatorSpan === undefined) {
this.syntaxTree();
TypeScript.Debug.assert(this._externalModuleIndicatorSpan !== undefined);
}
return this._externalModuleIndicatorSpan;
};
Document.prototype.amdDependencies = function () {
if (this._amdDependencies === undefined) {
this.syntaxTree();
TypeScript.Debug.assert(this._amdDependencies !== undefined);
}
return this._amdDependencies;
};
Document.prototype.syntaxTree = function () {
var result = this._syntaxTree;
if (!result) {
var start = new Date().getTime();
result = TypeScript.Parser.parse(this.fileName, TypeScript.SimpleText.fromScriptSnapshot(this._scriptSnapshot), TypeScript.isDTSFile(this.fileName), TypeScript.getParseOptions(this._compiler.compilationSettings()));
TypeScript.syntaxTreeParseTime += new Date().getTime() - start;
if (this.isOpen || !this._sourceUnit) {
this._syntaxTree = result;
}
}
this.cacheSyntaxTreeInfo(result);
return result;
};
Document.prototype.bloomFilter = function () {
if (!this._bloomFilter) {
var identifiers = TypeScript.createIntrinsicsObject();
var pre = function (cur) {
if (TypeScript.ASTHelpers.isValidAstNode(cur)) {
if (cur.kind() === 11 /* IdentifierName */) {
var nodeText = cur.valueText();
identifiers[nodeText] = true;
}
}
};
TypeScript.getAstWalkerFactory().simpleWalk(this.sourceUnit(), pre, null, identifiers);
var identifierCount = 0;
for (var name in identifiers) {
if (identifiers[name]) {
identifierCount++;
}
}
this._bloomFilter = new TypeScript.BloomFilter(identifierCount);
this._bloomFilter.addKeys(identifiers);
}
return this._bloomFilter;
};
Document.prototype.emitToOwnOutputFile = function () {
return !this._compiler.compilationSettings().outFileOption() || this.isExternalModule();
};
Document.prototype.update = function (scriptSnapshot, version, isOpen, textChangeRange) {
var oldSyntaxTree = this._syntaxTree;
if (textChangeRange !== null && TypeScript.Debug.shouldAssert(1 /* Normal */)) {
var oldText = this._scriptSnapshot;
var newText = scriptSnapshot;
TypeScript.Debug.assert((oldText.getLength() - textChangeRange.span().length() + textChangeRange.newLength()) === newText.getLength());
if (TypeScript.Debug.shouldAssert(3 /* VeryAggressive */)) {
var oldTextPrefix = oldText.getText(0, textChangeRange.span().start());
var newTextPrefix = newText.getText(0, textChangeRange.span().start());
TypeScript.Debug.assert(oldTextPrefix === newTextPrefix);
var oldTextSuffix = oldText.getText(textChangeRange.span().end(), oldText.getLength());
var newTextSuffix = newText.getText(textChangeRange.newSpan().end(), newText.getLength());
TypeScript.Debug.assert(oldTextSuffix === newTextSuffix);
}
}
var text = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot);
var newSyntaxTree = textChangeRange === null || oldSyntaxTree === null ? TypeScript.Parser.parse(this.fileName, text, TypeScript.isDTSFile(this.fileName), TypeScript.getParseOptions(this._compiler.compilationSettings())) : TypeScript.Parser.incrementalParse(oldSyntaxTree, textChangeRange, text);
return new Document(this._compiler, this._semanticInfoChain, this.fileName, this.referencedFiles, scriptSnapshot, this.byteOrderMark, version, isOpen, newSyntaxTree, null);
};
Document.create = function (compiler, semanticInfoChain, fileName, scriptSnapshot, byteOrderMark, version, isOpen, referencedFiles) {
return new Document(compiler, semanticInfoChain, fileName, referencedFiles, scriptSnapshot, byteOrderMark, version, isOpen, null, null);
};
Document.prototype.topLevelDecl = function () {
if (this._topLevelDecl === null) {
this._topLevelDecl = TypeScript.DeclarationCreator.create(this, this._semanticInfoChain, this._compiler.compilationSettings());
}
return this._topLevelDecl;
};
Document.prototype._getDeclForAST = function (ast) {
this.topLevelDecl();
return this._astDeclMap[ast.syntaxID()];
};
Document.prototype.getEnclosingDecl = function (ast) {
if (ast.kind() === 120 /* SourceUnit */) {
return this._getDeclForAST(ast);
}
ast = ast.parent;
var decl = null;
while (ast) {
decl = this._getDeclForAST(ast);
if (decl) {
break;
}
ast = ast.parent;
}
return decl._getEnclosingDeclFromParentDecl();
};
Document.prototype._setDeclForAST = function (ast, decl) {
TypeScript.Debug.assert(decl.fileName() === this.fileName);
this._astDeclMap[ast.syntaxID()] = decl;
};
Document.prototype._getASTForDecl = function (decl) {
return this._declASTMap[decl.declID];
};
Document.prototype._setASTForDecl = function (decl, ast) {
TypeScript.Debug.assert(decl.fileName() === this.fileName);
this._declASTMap[decl.declID] = ast;
};
return Document;
})();
TypeScript.Document = Document;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
function hasFlag(val, flag) {
return (val & flag) !== 0;
}
TypeScript.hasFlag = hasFlag;
(function (TypeRelationshipFlags) {
TypeRelationshipFlags[TypeRelationshipFlags["SuccessfulComparison"] = 0] = "SuccessfulComparison";
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";
TypeRelationshipFlags[TypeRelationshipFlags["InconsistantPropertyAccesibility"] = 1 << 7] = "InconsistantPropertyAccesibility";
})(TypeScript.TypeRelationshipFlags || (TypeScript.TypeRelationshipFlags = {}));
var TypeRelationshipFlags = TypeScript.TypeRelationshipFlags;
(function (ModuleGenTarget) {
ModuleGenTarget[ModuleGenTarget["Unspecified"] = 0] = "Unspecified";
ModuleGenTarget[ModuleGenTarget["Synchronous"] = 1] = "Synchronous";
ModuleGenTarget[ModuleGenTarget["Asynchronous"] = 2] = "Asynchronous";
})(TypeScript.ModuleGenTarget || (TypeScript.ModuleGenTarget = {}));
var ModuleGenTarget = TypeScript.ModuleGenTarget;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var proto = "__proto__";
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;
this["constructor"] = undefined;
this[proto] = null;
this[proto] = undefined;
}
return BlockIntrinsics;
})();
function createIntrinsicsObject() {
return new BlockIntrinsics();
}
TypeScript.createIntrinsicsObject = createIntrinsicsObject;
var StringHashTable = (function () {
function StringHashTable() {
this.itemCount = 0;
this.table = createIntrinsicsObject();
}
StringHashTable.prototype.getAllKeys = function () {
var result = [];
for (var k in this.table) {
if (this.table[k] !== undefined) {
result.push(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];
return data === undefined ? null : data;
};
StringHashTable.prototype.remove = function (key) {
if (this.table[key] !== undefined) {
this.table[key] = undefined;
this.itemCount--;
}
};
return StringHashTable;
})();
TypeScript.StringHashTable = StringHashTable;
var IdentiferNameHashTable = (function (_super) {
__extends(IdentiferNameHashTable, _super);
function IdentiferNameHashTable() {
_super.apply(this, arguments);
}
IdentiferNameHashTable.prototype.getAllKeys = function () {
var result = [];
_super.prototype.map.call(this, function (k, v, c) {
if (v !== undefined) {
result.push(k.substring(1));
}
}, null);
return result;
};
IdentiferNameHashTable.prototype.add = function (key, data) {
return _super.prototype.add.call(this, "#" + key, data);
};
IdentiferNameHashTable.prototype.addOrUpdate = function (key, data) {
return _super.prototype.addOrUpdate.call(this, "#" + key, data);
};
IdentiferNameHashTable.prototype.map = function (fn, context) {
return _super.prototype.map.call(this, function (k, v, c) {
return fn(k.substring(1), v, c);
}, context);
};
IdentiferNameHashTable.prototype.every = function (fn, context) {
return _super.prototype.every.call(this, function (k, v, c) {
return fn(k.substring(1), v, c);
}, context);
};
IdentiferNameHashTable.prototype.some = function (fn, context) {
return _super.prototype.some.call(this, function (k, v, c) {
return fn(k.substring(1), v, c);
}, context);
};
IdentiferNameHashTable.prototype.lookup = function (key) {
return _super.prototype.lookup.call(this, "#" + key);
};
return IdentiferNameHashTable;
})(StringHashTable);
TypeScript.IdentiferNameHashTable = IdentiferNameHashTable;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (ASTHelpers) {
function scriptIsElided(sourceUnit) {
return TypeScript.isDTSFile(sourceUnit.fileName()) || moduleMembersAreElided(sourceUnit.moduleElements);
}
ASTHelpers.scriptIsElided = scriptIsElided;
function moduleIsElided(declaration) {
return TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */) || moduleMembersAreElided(declaration.moduleElements);
}
ASTHelpers.moduleIsElided = moduleIsElided;
function moduleMembersAreElided(members) {
for (var i = 0, n = members.childCount(); i < n; i++) {
var member = members.childAt(i);
if (member.kind() === 130 /* ModuleDeclaration */) {
if (!moduleIsElided(member)) {
return false;
}
} else if (member.kind() !== 128 /* InterfaceDeclaration */) {
return false;
}
}
return true;
}
function enumIsElided(declaration) {
if (TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */)) {
return true;
}
return false;
}
ASTHelpers.enumIsElided = enumIsElided;
function isValidAstNode(ast) {
if (!ast)
return false;
if (ast.start() === -1 || ast.end() === -1)
return false;
return true;
}
ASTHelpers.isValidAstNode = isValidAstNode;
function getAstAtPosition(script, pos, useTrailingTriviaAsLimChar, forceInclusive) {
if (typeof useTrailingTriviaAsLimChar === "undefined") { useTrailingTriviaAsLimChar = true; }
if (typeof forceInclusive === "undefined") { forceInclusive = false; }
var top = null;
var pre = function (cur, walker) {
if (isValidAstNode(cur)) {
var isInvalid1 = cur.kind() === 149 /* ExpressionStatement */ && cur.width() === 0;
if (isInvalid1) {
walker.options.goChildren = false;
} else {
var inclusive = forceInclusive || cur.kind() === 11 /* IdentifierName */ || cur.kind() === 212 /* MemberAccessExpression */ || cur.kind() === 121 /* QualifiedName */ || cur.kind() === 224 /* VariableDeclaration */ || cur.kind() === 225 /* VariableDeclarator */ || cur.kind() === 213 /* InvocationExpression */ || pos === script.end() + script.trailingTriviaWidth();
var minChar = cur.start();
var limChar = cur.end() + (useTrailingTriviaAsLimChar ? cur.trailingTriviaWidth() : 0) + (inclusive ? 1 : 0);
if (pos >= minChar && pos < limChar) {
if ((cur.kind() !== 1 /* List */ && cur.kind() !== 2 /* SeparatedList */) || cur.end() > cur.start()) {
if (top === null) {
top = cur;
} else if (cur.start() >= top.start() && (cur.end() + (useTrailingTriviaAsLimChar ? cur.trailingTriviaWidth() : 0)) <= (top.end() + (useTrailingTriviaAsLimChar ? top.trailingTriviaWidth() : 0))) {
if (top.width() !== 0 || cur.width() !== 0) {
top = cur;
}
}
}
}
walker.options.goChildren = (minChar <= pos && pos <= limChar);
}
}
};
TypeScript.getAstWalkerFactory().walk(script, pre);
return top;
}
ASTHelpers.getAstAtPosition = getAstAtPosition;
function getExtendsHeritageClause(clauses) {
if (!clauses) {
return null;
}
return clauses.firstOrDefault(function (c) {
return c.typeNames.nonSeparatorCount() > 0 && c.kind() === 230 /* ExtendsHeritageClause */;
});
}
ASTHelpers.getExtendsHeritageClause = getExtendsHeritageClause;
function getImplementsHeritageClause(clauses) {
if (!clauses) {
return null;
}
return clauses.firstOrDefault(function (c) {
return c.typeNames.nonSeparatorCount() > 0 && c.kind() === 231 /* ImplementsHeritageClause */;
});
}
ASTHelpers.getImplementsHeritageClause = getImplementsHeritageClause;
function isCallExpression(ast) {
return (ast && ast.kind() === 213 /* InvocationExpression */) || (ast && ast.kind() === 216 /* ObjectCreationExpression */);
}
ASTHelpers.isCallExpression = isCallExpression;
function isCallExpressionTarget(ast) {
if (!ast) {
return false;
}
var current = ast;
while (current && current.parent) {
if (current.parent.kind() === 212 /* MemberAccessExpression */ && current.parent.name === current) {
current = current.parent;
continue;
}
break;
}
if (current && current.parent) {
if (current.parent.kind() === 213 /* InvocationExpression */ || current.parent.kind() === 216 /* ObjectCreationExpression */) {
return current === current.parent.expression;
}
}
return false;
}
ASTHelpers.isCallExpressionTarget = isCallExpressionTarget;
function isNameOfSomeDeclaration(ast) {
if (ast === null || ast.parent === null) {
return false;
}
if (ast.kind() !== 11 /* IdentifierName */) {
return false;
}
switch (ast.parent.kind()) {
case 131 /* ClassDeclaration */:
return ast.parent.identifier === ast;
case 128 /* InterfaceDeclaration */:
return ast.parent.identifier === ast;
case 132 /* EnumDeclaration */:
return ast.parent.identifier === ast;
case 130 /* ModuleDeclaration */:
return ast.parent.name === ast || ast.parent.stringLiteral === ast;
case 225 /* VariableDeclarator */:
return ast.parent.propertyName === ast;
case 129 /* FunctionDeclaration */:
return ast.parent.identifier === ast;
case 135 /* MemberFunctionDeclaration */:
return ast.parent.propertyName === ast;
case 242 /* Parameter */:
return ast.parent.identifier === ast;
case 238 /* TypeParameter */:
return ast.parent.identifier === ast;
case 240 /* SimplePropertyAssignment */:
return ast.parent.propertyName === ast;
case 241 /* FunctionPropertyAssignment */:
return ast.parent.propertyName === ast;
case 243 /* EnumElement */:
return ast.parent.propertyName === ast;
case 133 /* ImportDeclaration */:
return ast.parent.identifier === ast;
}
return false;
}
function isDeclarationASTOrDeclarationNameAST(ast) {
return isNameOfSomeDeclaration(ast) || isDeclarationAST(ast);
}
ASTHelpers.isDeclarationASTOrDeclarationNameAST = isDeclarationASTOrDeclarationNameAST;
function getEnclosingParameterForInitializer(ast) {
var current = ast;
while (current) {
switch (current.kind()) {
case 232 /* EqualsValueClause */:
if (current.parent && current.parent.kind() === 242 /* Parameter */) {
return current.parent;
}
break;
case 131 /* ClassDeclaration */:
case 128 /* InterfaceDeclaration */:
case 130 /* ModuleDeclaration */:
return null;
}
current = current.parent;
}
return null;
}
ASTHelpers.getEnclosingParameterForInitializer = getEnclosingParameterForInitializer;
function getEnclosingMemberVariableDeclaration(ast) {
var current = ast;
while (current) {
switch (current.kind()) {
case 136 /* MemberVariableDeclaration */:
return current;
case 131 /* ClassDeclaration */:
case 128 /* InterfaceDeclaration */:
case 130 /* ModuleDeclaration */:
return null;
}
current = current.parent;
}
return null;
}
ASTHelpers.getEnclosingMemberVariableDeclaration = getEnclosingMemberVariableDeclaration;
function isNameOfFunction(ast) {
return ast && ast.parent && ast.kind() === 11 /* IdentifierName */ && ast.parent.kind() === 129 /* FunctionDeclaration */ && ast.parent.identifier === ast;
}
ASTHelpers.isNameOfFunction = isNameOfFunction;
function isNameOfMemberFunction(ast) {
return ast && ast.parent && ast.kind() === 11 /* IdentifierName */ && ast.parent.kind() === 135 /* MemberFunctionDeclaration */ && ast.parent.propertyName === ast;
}
ASTHelpers.isNameOfMemberFunction = isNameOfMemberFunction;
function isNameOfMemberAccessExpression(ast) {
if (ast && ast.parent && ast.parent.kind() === 212 /* MemberAccessExpression */ && ast.parent.name === ast) {
return true;
}
return false;
}
ASTHelpers.isNameOfMemberAccessExpression = isNameOfMemberAccessExpression;
function isRightSideOfQualifiedName(ast) {
if (ast && ast.parent && ast.parent.kind() === 121 /* QualifiedName */ && ast.parent.right === ast) {
return true;
}
return false;
}
ASTHelpers.isRightSideOfQualifiedName = isRightSideOfQualifiedName;
function parametersFromIdentifier(id) {
return {
length: 1,
lastParameterIsRest: function () {
return false;
},
ast: id,
astAt: function (index) {
return id;
},
identifierAt: function (index) {
return id;
},
typeAt: function (index) {
return null;
},
initializerAt: function (index) {
return null;
},
isOptionalAt: function (index) {
return false;
}
};
}
ASTHelpers.parametersFromIdentifier = parametersFromIdentifier;
function parametersFromParameter(parameter) {
return {
length: 1,
lastParameterIsRest: function () {
return parameter.dotDotDotToken !== null;
},
ast: parameter,
astAt: function (index) {
return parameter;
},
identifierAt: function (index) {
return parameter.identifier;
},
typeAt: function (index) {
return getType(parameter);
},
initializerAt: function (index) {
return parameter.equalsValueClause;
},
isOptionalAt: function (index) {
return parameterIsOptional(parameter);
}
};
}
ASTHelpers.parametersFromParameter = parametersFromParameter;
function parameterIsOptional(parameter) {
return parameter.questionToken !== null || parameter.equalsValueClause !== null;
}
function parametersFromParameterList(list) {
return {
length: list.parameters.nonSeparatorCount(),
lastParameterIsRest: function () {
return TypeScript.lastParameterIsRest(list);
},
ast: list.parameters,
astAt: function (index) {
return list.parameters.nonSeparatorAt(index);
},
identifierAt: function (index) {
return list.parameters.nonSeparatorAt(index).identifier;
},
typeAt: function (index) {
return getType(list.parameters.nonSeparatorAt(index));
},
initializerAt: function (index) {
return list.parameters.nonSeparatorAt(index).equalsValueClause;
},
isOptionalAt: function (index) {
return parameterIsOptional(list.parameters.nonSeparatorAt(index));
}
};
}
ASTHelpers.parametersFromParameterList = parametersFromParameterList;
function isDeclarationAST(ast) {
switch (ast.kind()) {
case 225 /* VariableDeclarator */:
return getVariableStatement(ast) !== null;
case 133 /* ImportDeclaration */:
case 131 /* ClassDeclaration */:
case 128 /* InterfaceDeclaration */:
case 242 /* Parameter */:
case 219 /* SimpleArrowFunctionExpression */:
case 218 /* ParenthesizedArrowFunctionExpression */:
case 144 /* IndexSignature */:
case 129 /* FunctionDeclaration */:
case 130 /* ModuleDeclaration */:
case 124 /* ArrayType */:
case 122 /* ObjectType */:
case 238 /* TypeParameter */:
case 137 /* ConstructorDeclaration */:
case 135 /* MemberFunctionDeclaration */:
case 139 /* GetAccessor */:
case 140 /* SetAccessor */:
case 136 /* MemberVariableDeclaration */:
case 138 /* IndexMemberDeclaration */:
case 132 /* EnumDeclaration */:
case 243 /* EnumElement */:
case 240 /* SimplePropertyAssignment */:
case 241 /* FunctionPropertyAssignment */:
case 222 /* FunctionExpression */:
case 142 /* CallSignature */:
case 143 /* ConstructSignature */:
case 145 /* MethodSignature */:
case 141 /* PropertySignature */:
return true;
default:
return false;
}
}
ASTHelpers.isDeclarationAST = isDeclarationAST;
function docComments(ast) {
if (isDeclarationAST(ast)) {
var preComments = ast.kind() === 225 /* VariableDeclarator */ ? getVariableStatement(ast).preComments() : ast.preComments();
if (preComments && preComments.length > 0) {
var preCommentsLength = preComments.length;
var docComments = new Array();
for (var i = preCommentsLength - 1; i >= 0; i--) {
if (isDocComment(preComments[i])) {
docComments.push(preComments[i]);
continue;
}
break;
}
return docComments.reverse();
}
}
return TypeScript.sentinelEmptyArray;
}
ASTHelpers.docComments = docComments;
function isDocComment(comment) {
if (comment.kind() === 6 /* MultiLineCommentTrivia */) {
var fullText = comment.fullText();
return fullText.charAt(2) === "*" && fullText.charAt(3) !== "/";
}
return false;
}
function getParameterList(ast) {
if (ast) {
switch (ast.kind()) {
case 137 /* ConstructorDeclaration */:
return getParameterList(ast.callSignature);
case 129 /* FunctionDeclaration */:
return getParameterList(ast.callSignature);
case 218 /* ParenthesizedArrowFunctionExpression */:
return getParameterList(ast.callSignature);
case 143 /* ConstructSignature */:
return getParameterList(ast.callSignature);
case 135 /* MemberFunctionDeclaration */:
return getParameterList(ast.callSignature);
case 241 /* FunctionPropertyAssignment */:
return getParameterList(ast.callSignature);
case 222 /* FunctionExpression */:
return getParameterList(ast.callSignature);
case 145 /* MethodSignature */:
return getParameterList(ast.callSignature);
case 125 /* ConstructorType */:
return ast.parameterList;
case 123 /* FunctionType */:
return ast.parameterList;
case 142 /* CallSignature */:
return ast.parameterList;
case 139 /* GetAccessor */:
return ast.parameterList;
case 140 /* SetAccessor */:
return ast.parameterList;
}
}
return null;
}
ASTHelpers.getParameterList = getParameterList;
function getType(ast) {
if (ast) {
switch (ast.kind()) {
case 129 /* FunctionDeclaration */:
return getType(ast.callSignature);
case 218 /* ParenthesizedArrowFunctionExpression */:
return getType(ast.callSignature);
case 143 /* ConstructSignature */:
return getType(ast.callSignature);
case 135 /* MemberFunctionDeclaration */:
return getType(ast.callSignature);
case 241 /* FunctionPropertyAssignment */:
return getType(ast.callSignature);
case 222 /* FunctionExpression */:
return getType(ast.callSignature);
case 145 /* MethodSignature */:
return getType(ast.callSignature);
case 142 /* CallSignature */:
return getType(ast.typeAnnotation);
case 144 /* IndexSignature */:
return getType(ast.typeAnnotation);
case 141 /* PropertySignature */:
return getType(ast.typeAnnotation);
case 139 /* GetAccessor */:
return getType(ast.typeAnnotation);
case 242 /* Parameter */:
return getType(ast.typeAnnotation);
case 136 /* MemberVariableDeclaration */:
return getType(ast.variableDeclarator);
case 225 /* VariableDeclarator */:
return getType(ast.typeAnnotation);
case 236 /* CatchClause */:
return getType(ast.typeAnnotation);
case 125 /* ConstructorType */:
return ast.type;
case 123 /* FunctionType */:
return ast.type;
case 244 /* TypeAnnotation */:
return ast.type;
}
}
return null;
}
ASTHelpers.getType = getType;
function getVariableStatement(variableDeclarator) {
if (variableDeclarator && variableDeclarator.parent && variableDeclarator.parent.parent && variableDeclarator.parent.parent.parent && variableDeclarator.parent.kind() === 2 /* SeparatedList */ && variableDeclarator.parent.parent.kind() === 224 /* VariableDeclaration */ && variableDeclarator.parent.parent.parent.kind() === 148 /* VariableStatement */) {
return variableDeclarator.parent.parent.parent;
}
return null;
}
function getVariableDeclaratorModifiers(variableDeclarator) {
var variableStatement = getVariableStatement(variableDeclarator);
return variableStatement ? variableStatement.modifiers : TypeScript.sentinelEmptyArray;
}
ASTHelpers.getVariableDeclaratorModifiers = getVariableDeclaratorModifiers;
function isIntegerLiteralAST(expression) {
if (expression) {
switch (expression.kind()) {
case 164 /* PlusExpression */:
case 165 /* NegateExpression */:
expression = expression.operand;
return expression.kind() === 13 /* NumericLiteral */ && TypeScript.IntegerUtilities.isInteger(expression.text());
case 13 /* NumericLiteral */:
var text = expression.text();
return TypeScript.IntegerUtilities.isInteger(text) || TypeScript.IntegerUtilities.isHexInteger(text);
}
}
return false;
}
ASTHelpers.isIntegerLiteralAST = isIntegerLiteralAST;
function getEnclosingModuleDeclaration(ast) {
while (ast) {
if (ast.kind() === 130 /* ModuleDeclaration */) {
return ast;
}
ast = ast.parent;
}
return null;
}
ASTHelpers.getEnclosingModuleDeclaration = getEnclosingModuleDeclaration;
function isLastNameOfModule(ast, astName) {
if (ast) {
if (ast.stringLiteral) {
return astName === ast.stringLiteral;
} else {
var moduleNames = TypeScript.getModuleNames(ast.name);
var nameIndex = moduleNames.indexOf(astName);
return nameIndex === (moduleNames.length - 1);
}
}
return false;
}
ASTHelpers.isLastNameOfModule = isLastNameOfModule;
function isAnyNameOfModule(ast, astName) {
if (ast) {
if (ast.stringLiteral) {
return ast.stringLiteral === astName;
} else {
var moduleNames = TypeScript.getModuleNames(ast.name);
var nameIndex = moduleNames.indexOf(astName);
return nameIndex >= 0;
}
}
return false;
}
ASTHelpers.isAnyNameOfModule = isAnyNameOfModule;
function getNameOfIdenfierOrQualifiedName(name) {
if (name.kind() === 11 /* IdentifierName */) {
return name.text();
} else {
TypeScript.Debug.assert(name.kind() == 121 /* QualifiedName */);
var dotExpr = name;
return getNameOfIdenfierOrQualifiedName(dotExpr.left) + "." + getNameOfIdenfierOrQualifiedName(dotExpr.right);
}
}
ASTHelpers.getNameOfIdenfierOrQualifiedName = getNameOfIdenfierOrQualifiedName;
})(TypeScript.ASTHelpers || (TypeScript.ASTHelpers = {}));
var ASTHelpers = TypeScript.ASTHelpers;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
function walkListChildren(preAst, walker) {
for (var i = 0, n = preAst.childCount(); i < n; i++) {
walker.walk(preAst.childAt(i));
}
}
function walkThrowStatementChildren(preAst, walker) {
walker.walk(preAst.expression);
}
function walkPrefixUnaryExpressionChildren(preAst, walker) {
walker.walk(preAst.operand);
}
function walkPostfixUnaryExpressionChildren(preAst, walker) {
walker.walk(preAst.operand);
}
function walkDeleteExpressionChildren(preAst, walker) {
walker.walk(preAst.expression);
}
function walkTypeArgumentListChildren(preAst, walker) {
walker.walk(preAst.typeArguments);
}
function walkTypeOfExpressionChildren(preAst, walker) {
walker.walk(preAst.expression);
}
function walkVoidExpressionChildren(preAst, walker) {
walker.walk(preAst.expression);
}
function walkArgumentListChildren(preAst, walker) {
walker.walk(preAst.typeArgumentList);
walker.walk(preAst.arguments);
}
function walkArrayLiteralExpressionChildren(preAst, walker) {
walker.walk(preAst.expressions);
}
function walkSimplePropertyAssignmentChildren(preAst, walker) {
walker.walk(preAst.propertyName);
walker.walk(preAst.expression);
}
function walkFunctionPropertyAssignmentChildren(preAst, walker) {
walker.walk(preAst.propertyName);
walker.walk(preAst.callSignature);
walker.walk(preAst.block);
}
function walkGetAccessorChildren(preAst, walker) {
walker.walk(preAst.propertyName);
walker.walk(preAst.parameterList);
walker.walk(preAst.typeAnnotation);
walker.walk(preAst.block);
}
function walkSeparatedListChildren(preAst, walker) {
for (var i = 0, n = preAst.nonSeparatorCount(); i < n; i++) {
walker.walk(preAst.nonSeparatorAt(i));
}
}
function walkSetAccessorChildren(preAst, walker) {
walker.walk(preAst.propertyName);
walker.walk(preAst.parameterList);
walker.walk(preAst.block);
}
function walkObjectLiteralExpressionChildren(preAst, walker) {
walker.walk(preAst.propertyAssignments);
}
function walkCastExpressionChildren(preAst, walker) {
walker.walk(preAst.type);
walker.walk(preAst.expression);
}
function walkParenthesizedExpressionChildren(preAst, walker) {
walker.walk(preAst.expression);
}
function walkElementAccessExpressionChildren(preAst, walker) {
walker.walk(preAst.expression);
walker.walk(preAst.argumentExpression);
}
function walkMemberAccessExpressionChildren(preAst, walker) {
walker.walk(preAst.expression);
walker.walk(preAst.name);
}
function walkQualifiedNameChildren(preAst, walker) {
walker.walk(preAst.left);
walker.walk(preAst.right);
}
function walkBinaryExpressionChildren(preAst, walker) {
walker.walk(preAst.left);
walker.walk(preAst.right);
}
function walkEqualsValueClauseChildren(preAst, walker) {
walker.walk(preAst.value);
}
function walkTypeParameterChildren(preAst, walker) {
walker.walk(preAst.identifier);
walker.walk(preAst.constraint);
}
function walkTypeParameterListChildren(preAst, walker) {
walker.walk(preAst.typeParameters);
}
function walkGenericTypeChildren(preAst, walker) {
walker.walk(preAst.name);
walker.walk(preAst.typeArgumentList);
}
function walkTypeAnnotationChildren(preAst, walker) {
walker.walk(preAst.type);
}
function walkTypeQueryChildren(preAst, walker) {
walker.walk(preAst.name);
}
function walkInvocationExpressionChildren(preAst, walker) {
walker.walk(preAst.expression);
walker.walk(preAst.argumentList);
}
function walkObjectCreationExpressionChildren(preAst, walker) {
walker.walk(preAst.expression);
walker.walk(preAst.argumentList);
}
function walkTrinaryExpressionChildren(preAst, walker) {
walker.walk(preAst.condition);
walker.walk(preAst.whenTrue);
walker.walk(preAst.whenFalse);
}
function walkFunctionExpressionChildren(preAst, walker) {
walker.walk(preAst.identifier);
walker.walk(preAst.callSignature);
walker.walk(preAst.block);
}
function walkFunctionTypeChildren(preAst, walker) {
walker.walk(preAst.typeParameterList);
walker.walk(preAst.parameterList);
walker.walk(preAst.type);
}
function walkParenthesizedArrowFunctionExpressionChildren(preAst, walker) {
walker.walk(preAst.callSignature);
walker.walk(preAst.block);
walker.walk(preAst.expression);
}
function walkSimpleArrowFunctionExpressionChildren(preAst, walker) {
walker.walk(preAst.identifier);
walker.walk(preAst.block);
walker.walk(preAst.expression);
}
function walkMemberFunctionDeclarationChildren(preAst, walker) {
walker.walk(preAst.propertyName);
walker.walk(preAst.callSignature);
walker.walk(preAst.block);
}
function walkFuncDeclChildren(preAst, walker) {
walker.walk(preAst.identifier);
walker.walk(preAst.callSignature);
walker.walk(preAst.block);
}
function walkIndexMemberDeclarationChildren(preAst, walker) {
walker.walk(preAst.indexSignature);
}
function walkIndexSignatureChildren(preAst, walker) {
walker.walk(preAst.parameter);
walker.walk(preAst.typeAnnotation);
}
function walkCallSignatureChildren(preAst, walker) {
walker.walk(preAst.typeParameterList);
walker.walk(preAst.parameterList);
walker.walk(preAst.typeAnnotation);
}
function walkConstraintChildren(preAst, walker) {
walker.walk(preAst.type);
}
function walkConstructorDeclarationChildren(preAst, walker) {
walker.walk(preAst.callSignature);
walker.walk(preAst.block);
}
function walkConstructorTypeChildren(preAst, walker) {
walker.walk(preAst.typeParameterList);
walker.walk(preAst.parameterList);
walker.walk(preAst.type);
}
function walkConstructSignatureChildren(preAst, walker) {
walker.walk(preAst.callSignature);
}
function walkParameterChildren(preAst, walker) {
walker.walk(preAst.identifier);
walker.walk(preAst.typeAnnotation);
walker.walk(preAst.equalsValueClause);
}
function walkParameterListChildren(preAst, walker) {
walker.walk(preAst.parameters);
}
function walkPropertySignatureChildren(preAst, walker) {
walker.walk(preAst.propertyName);
walker.walk(preAst.typeAnnotation);
}
function walkVariableDeclaratorChildren(preAst, walker) {
walker.walk(preAst.propertyName);
walker.walk(preAst.typeAnnotation);
walker.walk(preAst.equalsValueClause);
}
function walkMemberVariableDeclarationChildren(preAst, walker) {
walker.walk(preAst.variableDeclarator);
}
function walkMethodSignatureChildren(preAst, walker) {
walker.walk(preAst.propertyName);
walker.walk(preAst.callSignature);
}
function walkReturnStatementChildren(preAst, walker) {
walker.walk(preAst.expression);
}
function walkForStatementChildren(preAst, walker) {
walker.walk(preAst.variableDeclaration);
walker.walk(preAst.initializer);
walker.walk(preAst.condition);
walker.walk(preAst.incrementor);
walker.walk(preAst.statement);
}
function walkForInStatementChildren(preAst, walker) {
walker.walk(preAst.variableDeclaration);
walker.walk(preAst.left);
walker.walk(preAst.expression);
walker.walk(preAst.statement);
}
function walkIfStatementChildren(preAst, walker) {
walker.walk(preAst.condition);
walker.walk(preAst.statement);
walker.walk(preAst.elseClause);
}
function walkElseClauseChildren(preAst, walker) {
walker.walk(preAst.statement);
}
function walkWhileStatementChildren(preAst, walker) {
walker.walk(preAst.condition);
walker.walk(preAst.statement);
}
function walkDoStatementChildren(preAst, walker) {
walker.walk(preAst.condition);
walker.walk(preAst.statement);
}
function walkBlockChildren(preAst, walker) {
walker.walk(preAst.statements);
}
function walkVariableDeclarationChildren(preAst, walker) {
walker.walk(preAst.declarators);
}
function walkCaseSwitchClauseChildren(preAst, walker) {
walker.walk(preAst.expression);
walker.walk(preAst.statements);
}
function walkDefaultSwitchClauseChildren(preAst, walker) {
walker.walk(preAst.statements);
}
function walkSwitchStatementChildren(preAst, walker) {
walker.walk(preAst.expression);
walker.walk(preAst.switchClauses);
}
function walkTryStatementChildren(preAst, walker) {
walker.walk(preAst.block);
walker.walk(preAst.catchClause);
walker.walk(preAst.finallyClause);
}
function walkCatchClauseChildren(preAst, walker) {
walker.walk(preAst.identifier);
walker.walk(preAst.typeAnnotation);
walker.walk(preAst.block);
}
function walkExternalModuleReferenceChildren(preAst, walker) {
walker.walk(preAst.stringLiteral);
}
function walkFinallyClauseChildren(preAst, walker) {
walker.walk(preAst.block);
}
function walkClassDeclChildren(preAst, walker) {
walker.walk(preAst.identifier);
walker.walk(preAst.typeParameterList);
walker.walk(preAst.heritageClauses);
walker.walk(preAst.classElements);
}
function walkScriptChildren(preAst, walker) {
walker.walk(preAst.moduleElements);
}
function walkHeritageClauseChildren(preAst, walker) {
walker.walk(preAst.typeNames);
}
function walkInterfaceDeclerationChildren(preAst, walker) {
walker.walk(preAst.identifier);
walker.walk(preAst.typeParameterList);
walker.walk(preAst.heritageClauses);
walker.walk(preAst.body);
}
function walkObjectTypeChildren(preAst, walker) {
walker.walk(preAst.typeMembers);
}
function walkArrayTypeChildren(preAst, walker) {
walker.walk(preAst.type);
}
function walkModuleDeclarationChildren(preAst, walker) {
walker.walk(preAst.name);
walker.walk(preAst.stringLiteral);
walker.walk(preAst.moduleElements);
}
function walkModuleNameModuleReferenceChildren(preAst, walker) {
walker.walk(preAst.moduleName);
}
function walkEnumDeclarationChildren(preAst, walker) {
walker.walk(preAst.identifier);
walker.walk(preAst.enumElements);
}
function walkEnumElementChildren(preAst, walker) {
walker.walk(preAst.propertyName);
walker.walk(preAst.equalsValueClause);
}
function walkImportDeclarationChildren(preAst, walker) {
walker.walk(preAst.identifier);
walker.walk(preAst.moduleReference);
}
function walkExportAssignmentChildren(preAst, walker) {
walker.walk(preAst.identifier);
}
function walkWithStatementChildren(preAst, walker) {
walker.walk(preAst.condition);
walker.walk(preAst.statement);
}
function walkExpressionStatementChildren(preAst, walker) {
walker.walk(preAst.expression);
}
function walkLabeledStatementChildren(preAst, walker) {
walker.walk(preAst.identifier);
walker.walk(preAst.statement);
}
function walkVariableStatementChildren(preAst, walker) {
walker.walk(preAst.declaration);
}
var childrenWalkers = new Array(246 /* Last */ + 1);
for (var i = 9 /* FirstToken */, n = 119 /* LastToken */; i <= n; i++) {
childrenWalkers[i] = null;
}
for (var i = 4 /* FirstTrivia */, n = 8 /* LastTrivia */; i <= n; i++) {
childrenWalkers[i] = null;
}
childrenWalkers[175 /* AddAssignmentExpression */] = walkBinaryExpressionChildren;
childrenWalkers[208 /* AddExpression */] = walkBinaryExpressionChildren;
childrenWalkers[180 /* AndAssignmentExpression */] = walkBinaryExpressionChildren;
childrenWalkers[60 /* AnyKeyword */] = null;
childrenWalkers[226 /* ArgumentList */] = walkArgumentListChildren;
childrenWalkers[214 /* ArrayLiteralExpression */] = walkArrayLiteralExpressionChildren;
childrenWalkers[124 /* ArrayType */] = walkArrayTypeChildren;
childrenWalkers[219 /* SimpleArrowFunctionExpression */] = walkSimpleArrowFunctionExpressionChildren;
childrenWalkers[218 /* ParenthesizedArrowFunctionExpression */] = walkParenthesizedArrowFunctionExpressionChildren;
childrenWalkers[174 /* AssignmentExpression */] = walkBinaryExpressionChildren;
childrenWalkers[191 /* BitwiseAndExpression */] = walkBinaryExpressionChildren;
childrenWalkers[190 /* BitwiseExclusiveOrExpression */] = walkBinaryExpressionChildren;
childrenWalkers[166 /* BitwiseNotExpression */] = walkPrefixUnaryExpressionChildren;
childrenWalkers[189 /* BitwiseOrExpression */] = walkBinaryExpressionChildren;
childrenWalkers[146 /* Block */] = walkBlockChildren;
childrenWalkers[61 /* BooleanKeyword */] = null;
childrenWalkers[152 /* BreakStatement */] = null;
childrenWalkers[142 /* CallSignature */] = walkCallSignatureChildren;
childrenWalkers[233 /* CaseSwitchClause */] = walkCaseSwitchClauseChildren;
childrenWalkers[220 /* CastExpression */] = walkCastExpressionChildren;
childrenWalkers[236 /* CatchClause */] = walkCatchClauseChildren;
childrenWalkers[131 /* ClassDeclaration */] = walkClassDeclChildren;
childrenWalkers[173 /* CommaExpression */] = walkBinaryExpressionChildren;
childrenWalkers[186 /* ConditionalExpression */] = walkTrinaryExpressionChildren;
childrenWalkers[239 /* Constraint */] = walkConstraintChildren;
childrenWalkers[137 /* ConstructorDeclaration */] = walkConstructorDeclarationChildren;
childrenWalkers[143 /* ConstructSignature */] = walkConstructSignatureChildren;
childrenWalkers[153 /* ContinueStatement */] = null;
childrenWalkers[125 /* ConstructorType */] = walkConstructorTypeChildren;
childrenWalkers[162 /* DebuggerStatement */] = null;
childrenWalkers[234 /* DefaultSwitchClause */] = walkDefaultSwitchClauseChildren;
childrenWalkers[170 /* DeleteExpression */] = walkDeleteExpressionChildren;
childrenWalkers[178 /* DivideAssignmentExpression */] = walkBinaryExpressionChildren;
childrenWalkers[206 /* DivideExpression */] = walkBinaryExpressionChildren;
childrenWalkers[161 /* DoStatement */] = walkDoStatementChildren;
childrenWalkers[221 /* ElementAccessExpression */] = walkElementAccessExpressionChildren;
childrenWalkers[235 /* ElseClause */] = walkElseClauseChildren;
childrenWalkers[156 /* EmptyStatement */] = null;
childrenWalkers[132 /* EnumDeclaration */] = walkEnumDeclarationChildren;
childrenWalkers[243 /* EnumElement */] = walkEnumElementChildren;
childrenWalkers[194 /* EqualsExpression */] = walkBinaryExpressionChildren;
childrenWalkers[232 /* EqualsValueClause */] = walkEqualsValueClauseChildren;
childrenWalkers[192 /* EqualsWithTypeConversionExpression */] = walkBinaryExpressionChildren;
childrenWalkers[181 /* ExclusiveOrAssignmentExpression */] = walkBinaryExpressionChildren;
childrenWalkers[134 /* ExportAssignment */] = walkExportAssignmentChildren;
childrenWalkers[149 /* ExpressionStatement */] = walkExpressionStatementChildren;
childrenWalkers[230 /* ExtendsHeritageClause */] = walkHeritageClauseChildren;
childrenWalkers[245 /* ExternalModuleReference */] = walkExternalModuleReferenceChildren;
childrenWalkers[24 /* FalseKeyword */] = null;
childrenWalkers[237 /* FinallyClause */] = walkFinallyClauseChildren;
childrenWalkers[155 /* ForInStatement */] = walkForInStatementChildren;
childrenWalkers[154 /* ForStatement */] = walkForStatementChildren;
childrenWalkers[129 /* FunctionDeclaration */] = walkFuncDeclChildren;
childrenWalkers[222 /* FunctionExpression */] = walkFunctionExpressionChildren;
childrenWalkers[241 /* FunctionPropertyAssignment */] = walkFunctionPropertyAssignmentChildren;
childrenWalkers[123 /* FunctionType */] = walkFunctionTypeChildren;
childrenWalkers[126 /* GenericType */] = walkGenericTypeChildren;
childrenWalkers[139 /* GetAccessor */] = walkGetAccessorChildren;
childrenWalkers[197 /* GreaterThanExpression */] = walkBinaryExpressionChildren;
childrenWalkers[199 /* GreaterThanOrEqualExpression */] = walkBinaryExpressionChildren;
childrenWalkers[147 /* IfStatement */] = walkIfStatementChildren;
childrenWalkers[231 /* ImplementsHeritageClause */] = walkHeritageClauseChildren;
childrenWalkers[133 /* ImportDeclaration */] = walkImportDeclarationChildren;
childrenWalkers[138 /* IndexMemberDeclaration */] = walkIndexMemberDeclarationChildren;
childrenWalkers[144 /* IndexSignature */] = walkIndexSignatureChildren;
childrenWalkers[201 /* InExpression */] = walkBinaryExpressionChildren;
childrenWalkers[200 /* InstanceOfExpression */] = walkBinaryExpressionChildren;
childrenWalkers[128 /* InterfaceDeclaration */] = walkInterfaceDeclerationChildren;
childrenWalkers[213 /* InvocationExpression */] = walkInvocationExpressionChildren;
childrenWalkers[160 /* LabeledStatement */] = walkLabeledStatementChildren;
childrenWalkers[183 /* LeftShiftAssignmentExpression */] = walkBinaryExpressionChildren;
childrenWalkers[202 /* LeftShiftExpression */] = walkBinaryExpressionChildren;
childrenWalkers[196 /* LessThanExpression */] = walkBinaryExpressionChildren;
childrenWalkers[198 /* LessThanOrEqualExpression */] = walkBinaryExpressionChildren;
childrenWalkers[1 /* List */] = walkListChildren;
childrenWalkers[188 /* LogicalAndExpression */] = walkBinaryExpressionChildren;
childrenWalkers[167 /* LogicalNotExpression */] = walkPrefixUnaryExpressionChildren;
childrenWalkers[187 /* LogicalOrExpression */] = walkBinaryExpressionChildren;
childrenWalkers[212 /* MemberAccessExpression */] = walkMemberAccessExpressionChildren;
childrenWalkers[135 /* MemberFunctionDeclaration */] = walkMemberFunctionDeclarationChildren;
childrenWalkers[136 /* MemberVariableDeclaration */] = walkMemberVariableDeclarationChildren;
childrenWalkers[145 /* MethodSignature */] = walkMethodSignatureChildren;
childrenWalkers[130 /* ModuleDeclaration */] = walkModuleDeclarationChildren;
childrenWalkers[246 /* ModuleNameModuleReference */] = walkModuleNameModuleReferenceChildren;
childrenWalkers[179 /* ModuloAssignmentExpression */] = walkBinaryExpressionChildren;
childrenWalkers[207 /* ModuloExpression */] = walkBinaryExpressionChildren;
childrenWalkers[177 /* MultiplyAssignmentExpression */] = walkBinaryExpressionChildren;
childrenWalkers[205 /* MultiplyExpression */] = walkBinaryExpressionChildren;
childrenWalkers[11 /* IdentifierName */] = null;
childrenWalkers[165 /* NegateExpression */] = walkPrefixUnaryExpressionChildren;
childrenWalkers[0 /* None */] = null;
childrenWalkers[195 /* NotEqualsExpression */] = walkBinaryExpressionChildren;
childrenWalkers[193 /* NotEqualsWithTypeConversionExpression */] = walkBinaryExpressionChildren;
childrenWalkers[32 /* NullKeyword */] = null;
childrenWalkers[67 /* NumberKeyword */] = null;
childrenWalkers[13 /* NumericLiteral */] = null;
childrenWalkers[216 /* ObjectCreationExpression */] = walkObjectCreationExpressionChildren;
childrenWalkers[215 /* ObjectLiteralExpression */] = walkObjectLiteralExpressionChildren;
childrenWalkers[122 /* ObjectType */] = walkObjectTypeChildren;
childrenWalkers[223 /* OmittedExpression */] = null;
childrenWalkers[182 /* OrAssignmentExpression */] = walkBinaryExpressionChildren;
childrenWalkers[242 /* Parameter */] = walkParameterChildren;
childrenWalkers[227 /* ParameterList */] = walkParameterListChildren;
childrenWalkers[217 /* ParenthesizedExpression */] = walkParenthesizedExpressionChildren;
childrenWalkers[164 /* PlusExpression */] = walkPrefixUnaryExpressionChildren;
childrenWalkers[211 /* PostDecrementExpression */] = walkPostfixUnaryExpressionChildren;
childrenWalkers[210 /* PostIncrementExpression */] = walkPostfixUnaryExpressionChildren;
childrenWalkers[169 /* PreDecrementExpression */] = walkPrefixUnaryExpressionChildren;
childrenWalkers[168 /* PreIncrementExpression */] = walkPrefixUnaryExpressionChildren;
childrenWalkers[141 /* PropertySignature */] = walkPropertySignatureChildren;
childrenWalkers[121 /* QualifiedName */] = walkQualifiedNameChildren;
childrenWalkers[12 /* RegularExpressionLiteral */] = null;
childrenWalkers[150 /* ReturnStatement */] = walkReturnStatementChildren;
childrenWalkers[120 /* SourceUnit */] = walkScriptChildren;
childrenWalkers[2 /* SeparatedList */] = walkSeparatedListChildren;
childrenWalkers[140 /* SetAccessor */] = walkSetAccessorChildren;
childrenWalkers[184 /* SignedRightShiftAssignmentExpression */] = walkBinaryExpressionChildren;
childrenWalkers[203 /* SignedRightShiftExpression */] = walkBinaryExpressionChildren;
childrenWalkers[240 /* SimplePropertyAssignment */] = walkSimplePropertyAssignmentChildren;
childrenWalkers[14 /* StringLiteral */] = null;
childrenWalkers[69 /* StringKeyword */] = null;
childrenWalkers[176 /* SubtractAssignmentExpression */] = walkBinaryExpressionChildren;
childrenWalkers[209 /* SubtractExpression */] = walkBinaryExpressionChildren;
childrenWalkers[50 /* SuperKeyword */] = null;
childrenWalkers[151 /* SwitchStatement */] = walkSwitchStatementChildren;
childrenWalkers[35 /* ThisKeyword */] = null;
childrenWalkers[157 /* ThrowStatement */] = walkThrowStatementChildren;
childrenWalkers[3 /* TriviaList */] = null;
childrenWalkers[37 /* TrueKeyword */] = null;
childrenWalkers[159 /* TryStatement */] = walkTryStatementChildren;
childrenWalkers[244 /* TypeAnnotation */] = walkTypeAnnotationChildren;
childrenWalkers[228 /* TypeArgumentList */] = walkTypeArgumentListChildren;
childrenWalkers[171 /* TypeOfExpression */] = walkTypeOfExpressionChildren;
childrenWalkers[238 /* TypeParameter */] = walkTypeParameterChildren;
childrenWalkers[229 /* TypeParameterList */] = walkTypeParameterListChildren;
childrenWalkers[127 /* TypeQuery */] = walkTypeQueryChildren;
childrenWalkers[185 /* UnsignedRightShiftAssignmentExpression */] = walkBinaryExpressionChildren;
childrenWalkers[204 /* UnsignedRightShiftExpression */] = walkBinaryExpressionChildren;
childrenWalkers[224 /* VariableDeclaration */] = walkVariableDeclarationChildren;
childrenWalkers[225 /* VariableDeclarator */] = walkVariableDeclaratorChildren;
childrenWalkers[148 /* VariableStatement */] = walkVariableStatementChildren;
childrenWalkers[172 /* VoidExpression */] = walkVoidExpressionChildren;
childrenWalkers[41 /* VoidKeyword */] = null;
childrenWalkers[158 /* WhileStatement */] = walkWhileStatementChildren;
childrenWalkers[163 /* WithStatement */] = walkWithStatementChildren;
for (var e in TypeScript.SyntaxKind) {
if (TypeScript.SyntaxKind.hasOwnProperty(e) && TypeScript.StringUtilities.isString(TypeScript.SyntaxKind[e])) {
TypeScript.Debug.assert(childrenWalkers[e] !== undefined, "Fix initWalkers: " + TypeScript.SyntaxKind[e]);
}
}
var AstWalkOptions = (function () {
function AstWalkOptions() {
this.goChildren = true;
this.stopWalking = false;
}
return AstWalkOptions;
})();
TypeScript.AstWalkOptions = AstWalkOptions;
var SimplePreAstWalker = (function () {
function SimplePreAstWalker(pre, state) {
this.pre = pre;
this.state = state;
this.options = new AstWalkOptions();
}
SimplePreAstWalker.prototype.walk = function (ast) {
if (!ast) {
return;
}
this.pre(ast, this.state);
var walker = childrenWalkers[ast.kind()];
if (walker) {
walker(ast, this);
}
};
return SimplePreAstWalker;
})();
var SimplePrePostAstWalker = (function () {
function SimplePrePostAstWalker(pre, post, state) {
this.pre = pre;
this.post = post;
this.state = state;
this.options = new AstWalkOptions();
}
SimplePrePostAstWalker.prototype.walk = function (ast) {
if (!ast) {
return;
}
this.pre(ast, this.state);
var walker = childrenWalkers[ast.kind()];
if (walker) {
walker(ast, this);
}
this.post(ast, this.state);
};
return SimplePrePostAstWalker;
})();
var NormalAstWalker = (function () {
function NormalAstWalker(pre, post, state) {
this.pre = pre;
this.post = post;
this.state = state;
this.options = new AstWalkOptions();
}
NormalAstWalker.prototype.walk = function (ast) {
if (!ast) {
return;
}
if (this.options.stopWalking) {
return;
}
this.pre(ast, this);
if (this.options.stopWalking) {
return;
}
if (this.options.goChildren) {
var walker = childrenWalkers[ast.kind()];
if (walker) {
walker(ast, this);
}
} else {
this.options.goChildren = true;
}
if (this.post) {
this.post(ast, this);
}
};
return NormalAstWalker;
})();
var AstWalkerFactory = (function () {
function AstWalkerFactory() {
}
AstWalkerFactory.prototype.walk = function (ast, pre, post, state) {
new NormalAstWalker(pre, post, state).walk(ast);
};
AstWalkerFactory.prototype.simpleWalk = function (ast, pre, post, state) {
if (post) {
new SimplePrePostAstWalker(pre, post, state).walk(ast);
} else {
new SimplePreAstWalker(pre, state).walk(ast);
}
};
return AstWalkerFactory;
})();
TypeScript.AstWalkerFactory = AstWalkerFactory;
var globalAstWalkerFactory = new AstWalkerFactory();
function getAstWalkerFactory() {
return globalAstWalkerFactory;
}
TypeScript.getAstWalkerFactory = getAstWalkerFactory;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Base64Format = (function () {
function Base64Format() {
}
Base64Format.encode = function (inValue) {
if (inValue < 64) {
return Base64Format.encodedValues.charAt(inValue);
}
throw TypeError(inValue + ": not a 64 based value");
};
Base64Format.decodeChar = function (inChar) {
if (inChar.length === 1) {
return Base64Format.encodedValues.indexOf(inChar);
} else {
throw TypeError('"' + inChar + '" must have length 1');
}
};
Base64Format.encodedValues = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
return Base64Format;
})();
var Base64VLQFormat = (function () {
function Base64VLQFormat() {
}
Base64VLQFormat.encode = function (inValue) {
if (inValue < 0) {
inValue = ((-inValue) << 1) + 1;
} else {
inValue = inValue << 1;
}
var encodedStr = "";
do {
var currentDigit = inValue & 31;
inValue = inValue >> 5;
if (inValue > 0) {
currentDigit = currentDigit | 32;
}
encodedStr = encodedStr + Base64Format.encode(currentDigit);
} while(inValue > 0);
return encodedStr;
};
Base64VLQFormat.decode = function (inString) {
var result = 0;
var negative = false;
var shift = 0;
for (var i = 0; i < inString.length; i++) {
var byte = Base64Format.decodeChar(inString[i]);
if (i === 0) {
if ((byte & 1) === 1) {
negative = true;
}
result = (byte >> 1) & 15;
} else {
result = result | ((byte & 31) << shift);
}
shift += (i === 0) ? 4 : 5;
if ((byte & 32) === 32) {
} else {
return { value: negative ? -(result) : result, rest: inString.substr(i + 1) };
}
}
throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Base64_value_0_finished_with_a_continuation_bit, [inString]));
};
return Base64VLQFormat;
})();
TypeScript.Base64VLQFormat = Base64VLQFormat;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var SourceMapPosition = (function () {
function SourceMapPosition() {
}
return SourceMapPosition;
})();
TypeScript.SourceMapPosition = SourceMapPosition;
var SourceMapping = (function () {
function SourceMapping() {
this.start = new SourceMapPosition();
this.end = new SourceMapPosition();
this.nameIndex = -1;
this.childMappings = [];
}
return SourceMapping;
})();
TypeScript.SourceMapping = SourceMapping;
var SourceMapEntry = (function () {
function SourceMapEntry(emittedFile, emittedLine, emittedColumn, sourceFile, sourceLine, sourceColumn, sourceName) {
this.emittedFile = emittedFile;
this.emittedLine = emittedLine;
this.emittedColumn = emittedColumn;
this.sourceFile = sourceFile;
this.sourceLine = sourceLine;
this.sourceColumn = sourceColumn;
this.sourceName = sourceName;
TypeScript.Debug.assert(isFinite(emittedLine));
TypeScript.Debug.assert(isFinite(emittedColumn));
TypeScript.Debug.assert(isFinite(sourceColumn));
TypeScript.Debug.assert(isFinite(sourceLine));
}
return SourceMapEntry;
})();
TypeScript.SourceMapEntry = SourceMapEntry;
var SourceMapper = (function () {
function SourceMapper(jsFile, sourceMapOut, document, jsFilePath, emitOptions, resolvePath) {
this.jsFile = jsFile;
this.sourceMapOut = sourceMapOut;
this.names = [];
this.mappingLevel = [];
this.tsFilePaths = [];
this.allSourceMappings = [];
this.sourceMapEntries = [];
this.setSourceMapOptions(document, jsFilePath, emitOptions, resolvePath);
this.setNewSourceFile(document, emitOptions);
}
SourceMapper.prototype.getOutputFile = function () {
var result = this.sourceMapOut.getOutputFile();
result.sourceMapEntries = this.sourceMapEntries;
return result;
};
SourceMapper.prototype.increaseMappingLevel = function (ast) {
this.mappingLevel.push(ast);
};
SourceMapper.prototype.decreaseMappingLevel = function (ast) {
TypeScript.Debug.assert(this.mappingLevel.length > 0, "Mapping level should never be less than 0. This suggests a missing start call.");
var expectedAst = this.mappingLevel.pop();
var expectedAstInfo = expectedAst.kind ? TypeScript.SyntaxKind[expectedAst.kind()] : [expectedAst.start(), expectedAst.end()];
var astInfo = ast.kind ? TypeScript.SyntaxKind[ast.kind()] : [ast.start(), ast.end()];
TypeScript.Debug.assert(ast === expectedAst, "Provided ast is not the expected AST, Expected: " + expectedAstInfo + " Given: " + astInfo);
};
SourceMapper.prototype.setNewSourceFile = function (document, emitOptions) {
var sourceMappings = [];
this.allSourceMappings.push(sourceMappings);
this.currentMappings = [sourceMappings];
this.currentNameIndex = [];
this.setNewSourceFilePath(document, emitOptions);
};
SourceMapper.prototype.setSourceMapOptions = function (document, jsFilePath, emitOptions, resolvePath) {
var prettyJsFileName = TypeScript.getPrettyName(jsFilePath, false, true);
var prettyMapFileName = prettyJsFileName + SourceMapper.MapFileExtension;
this.jsFileName = prettyJsFileName;
if (emitOptions.sourceMapRootDirectory()) {
this.sourceMapDirectory = emitOptions.sourceMapRootDirectory();
if (document.emitToOwnOutputFile()) {
this.sourceMapDirectory = this.sourceMapDirectory + TypeScript.switchToForwardSlashes(TypeScript.getRootFilePath((document.fileName)).replace(emitOptions.commonDirectoryPath(), ""));
}
if (TypeScript.isRelative(this.sourceMapDirectory)) {
this.sourceMapDirectory = emitOptions.commonDirectoryPath() + this.sourceMapDirectory;
this.sourceMapDirectory = TypeScript.convertToDirectoryPath(TypeScript.switchToForwardSlashes(resolvePath(this.sourceMapDirectory)));
this.sourceMapPath = TypeScript.getRelativePathToFixedPath(TypeScript.getRootFilePath(jsFilePath), this.sourceMapDirectory + prettyMapFileName);
} else {
this.sourceMapPath = this.sourceMapDirectory + prettyMapFileName;
}
} else {
this.sourceMapPath = prettyMapFileName;
this.sourceMapDirectory = TypeScript.getRootFilePath(jsFilePath);
}
this.sourceRoot = emitOptions.sourceRootDirectory();
};
SourceMapper.prototype.setNewSourceFilePath = function (document, emitOptions) {
var tsFilePath = TypeScript.switchToForwardSlashes(document.fileName);
if (emitOptions.sourceRootDirectory()) {
tsFilePath = TypeScript.getRelativePathToFixedPath(emitOptions.commonDirectoryPath(), tsFilePath);
} else {
tsFilePath = TypeScript.getRelativePathToFixedPath(this.sourceMapDirectory, tsFilePath);
}
this.tsFilePaths.push(tsFilePath);
};
SourceMapper.prototype.emitSourceMapping = function () {
var _this = this;
TypeScript.Debug.assert(this.mappingLevel.length === 0, "Mapping level is not 0. This suggest a missing end call. Value: " + this.mappingLevel.map(function (item) {
return ['Node of type', TypeScript.SyntaxKind[item.kind()], 'at', item.start(), 'to', item.end()].join(' ');
}).join(', '));
this.jsFile.WriteLine("//# sourceMappingURL=" + this.sourceMapPath);
var mappingsString = "";
var prevEmittedColumn = 0;
var prevEmittedLine = 0;
var prevSourceColumn = 0;
var prevSourceLine = 0;
var prevSourceIndex = 0;
var prevNameIndex = 0;
var emitComma = false;
var recordedPosition = null;
for (var sourceIndex = 0; sourceIndex < this.tsFilePaths.length; sourceIndex++) {
var recordSourceMapping = function (mappedPosition, nameIndex) {
if (recordedPosition !== null && recordedPosition.emittedColumn === mappedPosition.emittedColumn && recordedPosition.emittedLine === mappedPosition.emittedLine) {
return;
}
if (prevEmittedLine !== mappedPosition.emittedLine) {
while (prevEmittedLine < mappedPosition.emittedLine) {
prevEmittedColumn = 0;
mappingsString = mappingsString + ";";
prevEmittedLine++;
}
emitComma = false;
} else if (emitComma) {
mappingsString = mappingsString + ",";
}
_this.sourceMapEntries.push(new SourceMapEntry(_this.jsFileName, mappedPosition.emittedLine + 1, mappedPosition.emittedColumn + 1, _this.tsFilePaths[sourceIndex], mappedPosition.sourceLine, mappedPosition.sourceColumn + 1, nameIndex >= 0 ? _this.names[nameIndex] : undefined));
mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(mappedPosition.emittedColumn - prevEmittedColumn);
prevEmittedColumn = mappedPosition.emittedColumn;
mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(sourceIndex - prevSourceIndex);
prevSourceIndex = sourceIndex;
mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(mappedPosition.sourceLine - 1 - prevSourceLine);
prevSourceLine = mappedPosition.sourceLine - 1;
mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(mappedPosition.sourceColumn - prevSourceColumn);
prevSourceColumn = mappedPosition.sourceColumn;
if (nameIndex >= 0) {
mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(nameIndex - prevNameIndex);
prevNameIndex = nameIndex;
}
emitComma = true;
recordedPosition = mappedPosition;
};
var recordSourceMappingSiblings = function (sourceMappings) {
for (var i = 0; i < sourceMappings.length; i++) {
var sourceMapping = sourceMappings[i];
recordSourceMapping(sourceMapping.start, sourceMapping.nameIndex);
recordSourceMappingSiblings(sourceMapping.childMappings);
recordSourceMapping(sourceMapping.end, sourceMapping.nameIndex);
}
};
recordSourceMappingSiblings(this.allSourceMappings[sourceIndex]);
}
this.sourceMapOut.Write(JSON.stringify({
version: 3,
file: this.jsFileName,
sourceRoot: this.sourceRoot,
sources: this.tsFilePaths,
names: this.names,
mappings: mappingsString
}));
this.sourceMapOut.Close();
};
SourceMapper.MapFileExtension = ".map";
return SourceMapper;
})();
TypeScript.SourceMapper = SourceMapper;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (EmitContainer) {
EmitContainer[EmitContainer["Prog"] = 0] = "Prog";
EmitContainer[EmitContainer["Module"] = 1] = "Module";
EmitContainer[EmitContainer["DynamicModule"] = 2] = "DynamicModule";
EmitContainer[EmitContainer["Class"] = 3] = "Class";
EmitContainer[EmitContainer["Constructor"] = 4] = "Constructor";
EmitContainer[EmitContainer["Function"] = 5] = "Function";
EmitContainer[EmitContainer["Args"] = 6] = "Args";
EmitContainer[EmitContainer["Interface"] = 7] = "Interface";
})(TypeScript.EmitContainer || (TypeScript.EmitContainer = {}));
var EmitContainer = TypeScript.EmitContainer;
var EmitState = (function () {
function EmitState() {
this.column = 0;
this.line = 0;
this.container = 0 /* Prog */;
}
return EmitState;
})();
TypeScript.EmitState = EmitState;
var EmitOptions = (function () {
function EmitOptions(compiler, resolvePath) {
this.resolvePath = resolvePath;
this._diagnostic = null;
this._settings = null;
this._commonDirectoryPath = "";
this._sharedOutputFile = "";
this._sourceRootDirectory = "";
this._sourceMapRootDirectory = "";
this._outputDirectory = "";
var settings = compiler.compilationSettings();
this._settings = settings;
if (settings.moduleGenTarget() === 0 /* Unspecified */) {
var fileNames = compiler.fileNames();
for (var i = 0, n = fileNames.length; i < n; i++) {
var document = compiler.getDocument(fileNames[i]);
if (!document.isDeclareFile() && document.isExternalModule()) {
var errorSpan = document.externalModuleIndicatorSpan();
this._diagnostic = new TypeScript.Diagnostic(document.fileName, document.lineMap(), errorSpan.start(), errorSpan.length(), TypeScript.DiagnosticCode.Cannot_compile_external_modules_unless_the_module_flag_is_provided);
return;
}
}
}
if (!settings.mapSourceFiles()) {
if (settings.mapRoot()) {
if (settings.sourceRoot()) {
this._diagnostic = new TypeScript.Diagnostic(null, null, 0, 0, TypeScript.DiagnosticCode.Options_mapRoot_and_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option, null);
return;
} else {
this._diagnostic = new TypeScript.Diagnostic(null, null, 0, 0, TypeScript.DiagnosticCode.Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option, null);
return;
}
} else if (settings.sourceRoot()) {
this._diagnostic = new TypeScript.Diagnostic(null, null, 0, 0, TypeScript.DiagnosticCode.Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option, null);
return;
}
}
this._sourceMapRootDirectory = TypeScript.convertToDirectoryPath(TypeScript.switchToForwardSlashes(settings.mapRoot()));
this._sourceRootDirectory = TypeScript.convertToDirectoryPath(TypeScript.switchToForwardSlashes(settings.sourceRoot()));
if (settings.outFileOption() || settings.outDirOption() || settings.mapRoot() || settings.sourceRoot()) {
if (settings.outFileOption()) {
this._sharedOutputFile = TypeScript.switchToForwardSlashes(resolvePath(settings.outFileOption()));
}
if (settings.outDirOption()) {
this._outputDirectory = TypeScript.convertToDirectoryPath(TypeScript.switchToForwardSlashes(resolvePath(settings.outDirOption())));
}
if (this._outputDirectory || this._sourceMapRootDirectory || this.sourceRootDirectory) {
this.determineCommonDirectoryPath(compiler);
}
}
}
EmitOptions.prototype.diagnostic = function () {
return this._diagnostic;
};
EmitOptions.prototype.commonDirectoryPath = function () {
return this._commonDirectoryPath;
};
EmitOptions.prototype.sharedOutputFile = function () {
return this._sharedOutputFile;
};
EmitOptions.prototype.sourceRootDirectory = function () {
return this._sourceRootDirectory;
};
EmitOptions.prototype.sourceMapRootDirectory = function () {
return this._sourceMapRootDirectory;
};
EmitOptions.prototype.outputDirectory = function () {
return this._outputDirectory;
};
EmitOptions.prototype.compilationSettings = function () {
return this._settings;
};
EmitOptions.prototype.determineCommonDirectoryPath = function (compiler) {
var commonComponents = [];
var commonComponentsLength = -1;
var fileNames = compiler.fileNames();
for (var i = 0, len = fileNames.length; i < len; i++) {
var fileName = fileNames[i];
var document = compiler.getDocument(fileNames[i]);
var sourceUnit = document.sourceUnit();
if (!document.isDeclareFile()) {
var fileComponents = TypeScript.filePathComponents(fileName);
if (commonComponentsLength === -1) {
commonComponents = fileComponents;
commonComponentsLength = commonComponents.length;
} else {
var updatedPath = false;
for (var j = 0; j < commonComponentsLength && j < fileComponents.length; j++) {
if (commonComponents[j] !== fileComponents[j]) {
commonComponentsLength = j;
updatedPath = true;
if (j === 0) {
if (this._outputDirectory || this._sourceMapRootDirectory) {
this._diagnostic = new TypeScript.Diagnostic(null, null, 0, 0, TypeScript.DiagnosticCode.Cannot_find_the_common_subdirectory_path_for_the_input_files, null);
return;
}
return;
}
break;
}
}
if (!updatedPath && fileComponents.length < commonComponentsLength) {
commonComponentsLength = fileComponents.length;
}
}
}
}
this._commonDirectoryPath = commonComponents.slice(0, commonComponentsLength).join("/") + "/";
};
return EmitOptions;
})();
TypeScript.EmitOptions = EmitOptions;
var Indenter = (function () {
function Indenter() {
this.indentAmt = 0;
}
Indenter.prototype.increaseIndent = function () {
this.indentAmt += Indenter.indentStep;
};
Indenter.prototype.decreaseIndent = function () {
this.indentAmt -= Indenter.indentStep;
};
Indenter.prototype.getIndent = function () {
var indentString = Indenter.indentStrings[this.indentAmt];
if (indentString === undefined) {
indentString = "";
for (var i = 0; i < this.indentAmt; i = i + Indenter.indentStep) {
indentString += Indenter.indentStepString;
}
Indenter.indentStrings[this.indentAmt] = indentString;
}
return indentString;
};
Indenter.indentStep = 4;
Indenter.indentStepString = " ";
Indenter.indentStrings = [];
return Indenter;
})();
TypeScript.Indenter = Indenter;
function lastParameterIsRest(parameterList) {
var parameters = parameterList.parameters;
return parameters.nonSeparatorCount() > 0 && parameters.nonSeparatorAt(parameters.nonSeparatorCount() - 1).dotDotDotToken !== null;
}
TypeScript.lastParameterIsRest = lastParameterIsRest;
var Emitter = (function () {
function Emitter(emittingFileName, outfile, emitOptions, semanticInfoChain) {
this.emittingFileName = emittingFileName;
this.outfile = outfile;
this.emitOptions = emitOptions;
this.semanticInfoChain = semanticInfoChain;
this.globalThisCapturePrologueEmitted = false;
this.extendsPrologueEmitted = false;
this.thisClassNode = null;
this.inArrowFunction = false;
this.moduleName = "";
this.emitState = new EmitState();
this.indenter = new Indenter();
this.sourceMapper = null;
this.captureThisStmtString = "var _this = this;";
this.declStack = [];
this.exportAssignment = null;
this.inWithBlock = false;
this.document = null;
this.detachedCommentsElement = null;
}
Emitter.prototype.pushDecl = function (decl) {
if (decl) {
this.declStack[this.declStack.length] = decl;
}
};
Emitter.prototype.popDecl = function (decl) {
if (decl) {
this.declStack.length--;
}
};
Emitter.prototype.getEnclosingDecl = function () {
var declStackLen = this.declStack.length;
var enclosingDecl = declStackLen > 0 ? this.declStack[declStackLen - 1] : null;
return enclosingDecl;
};
Emitter.prototype.setExportAssignment = function (exportAssignment) {
this.exportAssignment = exportAssignment;
};
Emitter.prototype.getExportAssignment = function () {
return this.exportAssignment;
};
Emitter.prototype.setDocument = function (document) {
this.document = document;
};
Emitter.prototype.shouldEmitImportDeclaration = function (importDeclAST) {
var isExternalModuleReference = importDeclAST.moduleReference.kind() === 245 /* ExternalModuleReference */;
var importDecl = this.semanticInfoChain.getDeclForAST(importDeclAST);
var isExported = TypeScript.hasFlag(importDecl.flags, 1 /* Exported */);
var isAmdCodeGen = this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */;
if (isExternalModuleReference && !isExported && isAmdCodeGen) {
return false;
}
var importSymbol = importDecl.getSymbol();
if (importSymbol.isUsedAsValue()) {
return true;
}
if (importDeclAST.moduleReference.kind() !== 245 /* ExternalModuleReference */) {
var canBeUsedExternally = isExported || importSymbol.typeUsedExternally() || importSymbol.isUsedInExportedAlias();
if (!canBeUsedExternally && !this.document.isExternalModule()) {
canBeUsedExternally = TypeScript.hasFlag(importDecl.getParentDecl().kind, 1 /* Script */ | 32 /* DynamicModule */);
}
if (canBeUsedExternally) {
if (importSymbol.getExportAssignedValueSymbol()) {
return true;
}
var containerSymbol = importSymbol.getExportAssignedContainerSymbol();
if (containerSymbol && containerSymbol.getInstanceSymbol()) {
return true;
}
}
}
return false;
};
Emitter.prototype.emitImportDeclaration = function (importDeclAST) {
var isExternalModuleReference = importDeclAST.moduleReference.kind() === 245 /* ExternalModuleReference */;
var importDecl = this.semanticInfoChain.getDeclForAST(importDeclAST);
var isExported = TypeScript.hasFlag(importDecl.flags, 1 /* Exported */);
var isAmdCodeGen = this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */;
this.emitComments(importDeclAST, true);
var importSymbol = importDecl.getSymbol();
var parentSymbol = importSymbol.getContainer();
var parentKind = parentSymbol ? parentSymbol.kind : 0 /* None */;
var associatedParentSymbol = parentSymbol ? parentSymbol.getAssociatedContainerType() : null;
var associatedParentSymbolKind = associatedParentSymbol ? associatedParentSymbol.kind : 0 /* None */;
var needsPropertyAssignment = false;
var usePropertyAssignmentInsteadOfVarDecl = false;
var moduleNamePrefix;
if (isExported && (parentKind === 4 /* Container */ || parentKind === 32 /* DynamicModule */ || associatedParentSymbolKind === 4 /* Container */ || associatedParentSymbolKind === 32 /* DynamicModule */)) {
if (importSymbol.getExportAssignedTypeSymbol() || importSymbol.getExportAssignedContainerSymbol()) {
needsPropertyAssignment = true;
} else {
var valueSymbol = importSymbol.getExportAssignedValueSymbol();
if (valueSymbol && (valueSymbol.kind === 65536 /* Method */ || valueSymbol.kind === 16384 /* Function */)) {
needsPropertyAssignment = true;
} else {
usePropertyAssignmentInsteadOfVarDecl = true;
}
}
if (this.emitState.container === 2 /* DynamicModule */) {
moduleNamePrefix = "exports.";
} else {
moduleNamePrefix = this.moduleName + ".";
}
}
if (isAmdCodeGen && isExternalModuleReference) {
needsPropertyAssignment = true;
} else {
this.recordSourceMappingStart(importDeclAST);
if (usePropertyAssignmentInsteadOfVarDecl) {
this.writeToOutput(moduleNamePrefix);
} else {
this.writeToOutput("var ");
}
this.writeToOutput(importDeclAST.identifier.text() + " = ");
var aliasAST = importDeclAST.moduleReference;
if (isExternalModuleReference) {
this.writeToOutput("require(" + aliasAST.stringLiteral.text() + ")");
} else {
this.emitJavascript(aliasAST.moduleName, false);
}
this.recordSourceMappingEnd(importDeclAST);
this.writeToOutput(";");
if (needsPropertyAssignment) {
this.writeLineToOutput("");
this.emitIndent();
}
}
if (needsPropertyAssignment) {
this.writeToOutputWithSourceMapRecord(moduleNamePrefix + importDeclAST.identifier.text() + " = " + importDeclAST.identifier.text(), importDeclAST);
this.writeToOutput(";");
}
this.emitComments(importDeclAST, false);
};
Emitter.prototype.createSourceMapper = function (document, jsFileName, jsFile, sourceMapOut, resolvePath) {
this.sourceMapper = new TypeScript.SourceMapper(jsFile, sourceMapOut, document, jsFileName, this.emitOptions, resolvePath);
};
Emitter.prototype.setSourceMapperNewSourceFile = function (document) {
this.sourceMapper.setNewSourceFile(document, this.emitOptions);
};
Emitter.prototype.updateLineAndColumn = function (s) {
var lineNumbers = TypeScript.TextUtilities.parseLineStarts(s);
if (lineNumbers.length > 1) {
this.emitState.line += lineNumbers.length - 1;
this.emitState.column = s.length - lineNumbers[lineNumbers.length - 1];
} else {
this.emitState.column += s.length;
}
};
Emitter.prototype.writeToOutputWithSourceMapRecord = function (s, astSpan) {
this.recordSourceMappingStart(astSpan);
this.writeToOutput(s);
this.recordSourceMappingEnd(astSpan);
};
Emitter.prototype.writeToOutput = function (s) {
this.outfile.Write(s);
this.updateLineAndColumn(s);
};
Emitter.prototype.writeLineToOutput = function (s, force) {
if (typeof force === "undefined") { force = false; }
if (!force && s === "" && this.emitState.column === 0) {
return;
}
this.outfile.WriteLine(s);
this.updateLineAndColumn(s);
this.emitState.column = 0;
this.emitState.line++;
};
Emitter.prototype.writeCaptureThisStatement = function (ast) {
this.emitIndent();
this.writeToOutputWithSourceMapRecord(this.captureThisStmtString, ast);
this.writeLineToOutput("");
};
Emitter.prototype.setContainer = function (c) {
var temp = this.emitState.container;
this.emitState.container = c;
return temp;
};
Emitter.prototype.getIndentString = function () {
return this.indenter.getIndent();
};
Emitter.prototype.emitIndent = function () {
this.writeToOutput(this.getIndentString());
};
Emitter.prototype.emitComment = function (comment, trailing, first) {
if (this.emitOptions.compilationSettings().removeComments()) {
return;
}
var text = getTrimmedTextLines(comment);
var emitColumn = this.emitState.column;
if (emitColumn === 0) {
this.emitIndent();
} else if (trailing && first) {
this.writeToOutput(" ");
}
if (comment.kind() === 6 /* MultiLineCommentTrivia */) {
this.recordSourceMappingStart(comment);
this.writeToOutput(text[0]);
if (text.length > 1 || comment.endsLine) {
for (var i = 1; i < text.length; i++) {
this.writeLineToOutput("");
this.emitIndent();
this.writeToOutput(text[i]);
}
this.recordSourceMappingEnd(comment);
this.writeLineToOutput("");
} else {
this.recordSourceMappingEnd(comment);
this.writeToOutput(" ");
return;
}
} else {
this.recordSourceMappingStart(comment);
this.writeToOutput(text[0]);
this.recordSourceMappingEnd(comment);
this.writeLineToOutput("");
}
if (!trailing && emitColumn !== 0) {
this.emitIndent();
}
};
Emitter.prototype.emitComments = function (ast, pre, onlyPinnedOrTripleSlashComments) {
var _this = this;
if (typeof onlyPinnedOrTripleSlashComments === "undefined") { onlyPinnedOrTripleSlashComments = false; }
if (ast && ast.kind() !== 146 /* Block */) {
if (ast.parent.kind() === 219 /* SimpleArrowFunctionExpression */ || ast.parent.kind() === 218 /* ParenthesizedArrowFunctionExpression */) {
return;
}
}
if (pre) {
var preComments = ast.preComments();
if (preComments && ast === this.detachedCommentsElement) {
var detachedComments = this.getDetachedComments(ast);
preComments = preComments.slice(detachedComments.length);
this.detachedCommentsElement = null;
}
if (preComments && onlyPinnedOrTripleSlashComments) {
preComments = TypeScript.ArrayUtilities.where(preComments, function (c) {
return _this.isPinnedOrTripleSlash(c);
});
}
this.emitCommentsArray(preComments, false);
} else {
this.emitCommentsArray(ast.postComments(), true);
}
};
Emitter.prototype.isPinnedOrTripleSlash = function (comment) {
var fullText = comment.fullText();
if (fullText.match(TypeScript.tripleSlashReferenceRegExp)) {
return true;
} else {
return fullText.indexOf("/*!") === 0;
}
};
Emitter.prototype.emitCommentsArray = function (comments, trailing) {
if (!this.emitOptions.compilationSettings().removeComments() && comments) {
for (var i = 0, n = comments.length; i < n; i++) {
this.emitComment(comments[i], trailing, i === 0);
}
}
};
Emitter.prototype.emitObjectLiteralExpression = function (objectLiteral) {
this.recordSourceMappingStart(objectLiteral);
this.writeToOutput("{");
this.emitCommaSeparatedList(objectLiteral, objectLiteral.propertyAssignments, " ", true);
this.writeToOutput("}");
this.recordSourceMappingEnd(objectLiteral);
};
Emitter.prototype.emitArrayLiteralExpression = function (arrayLiteral) {
this.recordSourceMappingStart(arrayLiteral);
this.writeToOutput("[");
this.emitCommaSeparatedList(arrayLiteral, arrayLiteral.expressions, "", true);
this.writeToOutput("]");
this.recordSourceMappingEnd(arrayLiteral);
};
Emitter.prototype.emitObjectCreationExpression = function (objectCreationExpression) {
this.recordSourceMappingStart(objectCreationExpression);
this.writeToOutput("new ");
var target = objectCreationExpression.expression;
this.emit(target);
if (objectCreationExpression.argumentList) {
this.recordSourceMappingStart(objectCreationExpression.argumentList);
this.writeToOutput("(");
this.emitCommaSeparatedList(objectCreationExpression.argumentList, objectCreationExpression.argumentList.arguments, "", false);
this.writeToOutputWithSourceMapRecord(")", objectCreationExpression.argumentList.closeParenToken);
this.recordSourceMappingEnd(objectCreationExpression.argumentList);
}
this.recordSourceMappingEnd(objectCreationExpression);
};
Emitter.prototype.getConstantDecl = function (dotExpr) {
var pullSymbol = this.semanticInfoChain.getSymbolForAST(dotExpr);
if (pullSymbol && pullSymbol.kind === 67108864 /* EnumMember */) {
var pullDecls = pullSymbol.getDeclarations();
if (pullDecls.length === 1) {
var pullDecl = pullDecls[0];
if (pullDecl.kind === 67108864 /* EnumMember */) {
return pullDecl;
}
}
}
return null;
};
Emitter.prototype.tryEmitConstant = function (dotExpr) {
var propertyName = dotExpr.name;
var boundDecl = this.getConstantDecl(dotExpr);
if (boundDecl) {
var value = boundDecl.constantValue;
if (value !== null) {
this.recordSourceMappingStart(dotExpr);
this.writeToOutput(value.toString());
var comment = " /* ";
comment += propertyName.text();
comment += " */";
this.writeToOutput(comment);
this.recordSourceMappingEnd(dotExpr);
return true;
}
}
return false;
};
Emitter.prototype.emitInvocationExpression = function (callNode) {
this.recordSourceMappingStart(callNode);
var target = callNode.expression;
var args = callNode.argumentList.arguments;
if (target.kind() === 212 /* MemberAccessExpression */ && target.expression.kind() === 50 /* SuperKeyword */) {
this.emit(target);
this.writeToOutput(".call");
this.recordSourceMappingStart(args);
this.writeToOutput("(");
this.emitThis();
if (args && args.nonSeparatorCount() > 0) {
this.writeToOutput(", ");
this.emitCommaSeparatedList(callNode.argumentList, args, "", false);
}
} else {
if (callNode.expression.kind() === 50 /* SuperKeyword */ && this.emitState.container === 4 /* Constructor */) {
this.writeToOutput("_super.call");
} else {
this.emitJavascript(target, false);
}
this.recordSourceMappingStart(args);
this.writeToOutput("(");
if (callNode.expression.kind() === 50 /* SuperKeyword */ && this.emitState.container === 4 /* Constructor */) {
this.writeToOutput("this");
if (args && args.nonSeparatorCount() > 0) {
this.writeToOutput(", ");
}
}
this.emitCommaSeparatedList(callNode.argumentList, args, "", false);
}
this.writeToOutputWithSourceMapRecord(")", callNode.argumentList.closeParenToken);
this.recordSourceMappingEnd(args);
this.recordSourceMappingEnd(callNode);
};
Emitter.prototype.emitParameterList = function (list) {
this.writeToOutput("(");
this.emitCommentsArray(list.openParenTrailingComments, true);
this.emitFunctionParameters(TypeScript.ASTHelpers.parametersFromParameterList(list));
this.writeToOutput(")");
};
Emitter.prototype.emitFunctionParameters = function (parameters) {
var argsLen = 0;
if (parameters) {
this.emitComments(parameters.ast, true);
var tempContainer = this.setContainer(6 /* Args */);
argsLen = parameters.length;
var printLen = argsLen;
if (parameters.lastParameterIsRest()) {
printLen--;
}
for (var i = 0; i < printLen; i++) {
var arg = parameters.astAt(i);
this.emit(arg);
if (i < (printLen - 1)) {
this.writeToOutput(", ");
}
}
this.setContainer(tempContainer);
this.emitComments(parameters.ast, false);
}
};
Emitter.prototype.emitFunctionBodyStatements = function (name, funcDecl, parameterList, block, bodyExpression) {
this.writeLineToOutput(" {");
if (name) {
this.recordSourceMappingNameStart(name);
}
this.indenter.increaseIndent();
if (block) {
this.emitDetachedComments(block.statements);
}
if (this.shouldCaptureThis(funcDecl)) {
this.writeCaptureThisStatement(funcDecl);
}
if (parameterList) {
this.emitDefaultValueAssignments(parameterList);
this.emitRestParameterInitializer(parameterList);
}
if (block) {
this.emitList(block.statements);
this.emitCommentsArray(block.closeBraceLeadingComments, false);
} else {
this.emitIndent();
this.emitCommentsArray(bodyExpression.preComments(), false);
this.writeToOutput("return ");
this.emit(bodyExpression);
this.writeLineToOutput(";");
this.emitCommentsArray(bodyExpression.postComments(), true);
}
this.indenter.decreaseIndent();
this.emitIndent();
if (block) {
this.writeToOutputWithSourceMapRecord("}", block.closeBraceToken);
} else {
this.writeToOutputWithSourceMapRecord("}", bodyExpression);
}
if (name) {
this.recordSourceMappingNameEnd();
}
};
Emitter.prototype.emitDefaultValueAssignments = function (parameters) {
var n = parameters.length;
if (parameters.lastParameterIsRest()) {
n--;
}
for (var i = 0; i < n; i++) {
var arg = parameters.astAt(i);
var id = parameters.identifierAt(i);
var equalsValueClause = parameters.initializerAt(i);
if (equalsValueClause) {
this.emitIndent();
this.recordSourceMappingStart(arg);
this.writeToOutput("if (typeof " + id.text() + " === \"undefined\") { ");
this.writeToOutputWithSourceMapRecord(id.text(), id);
this.emitJavascript(equalsValueClause, false);
this.writeLineToOutput("; }");
this.recordSourceMappingEnd(arg);
}
}
};
Emitter.prototype.emitRestParameterInitializer = function (parameters) {
if (parameters.lastParameterIsRest()) {
var n = parameters.length;
var lastArg = parameters.astAt(n - 1);
var id = parameters.identifierAt(n - 1);
this.emitIndent();
this.recordSourceMappingStart(lastArg);
this.writeToOutput("var ");
this.writeToOutputWithSourceMapRecord(id.text(), id);
this.writeLineToOutput(" = [];");
this.recordSourceMappingEnd(lastArg);
this.emitIndent();
this.writeToOutput("for (");
this.writeToOutputWithSourceMapRecord("var _i = 0;", lastArg);
this.writeToOutput(" ");
this.writeToOutputWithSourceMapRecord("_i < (arguments.length - " + (n - 1) + ")", lastArg);
this.writeToOutput("; ");
this.writeToOutputWithSourceMapRecord("_i++", lastArg);
this.writeLineToOutput(") {");
this.indenter.increaseIndent();
this.emitIndent();
this.writeToOutputWithSourceMapRecord(id.text() + "[_i] = arguments[_i + " + (n - 1) + "];", lastArg);
this.writeLineToOutput("");
this.indenter.decreaseIndent();
this.emitIndent();
this.writeLineToOutput("}");
}
};
Emitter.prototype.getImportDecls = function (fileName) {
var topLevelDecl = this.semanticInfoChain.topLevelDecl(this.document.fileName);
var result = [];
var dynamicModuleDecl = topLevelDecl.getChildDecls()[0];
var queue = dynamicModuleDecl.getChildDecls();
for (var i = 0, n = queue.length; i < n; i++) {
var decl = queue[i];
if (decl.kind & 128 /* TypeAlias */) {
var importStatementAST = this.semanticInfoChain.getASTForDecl(decl);
if (importStatementAST.moduleReference.kind() === 245 /* ExternalModuleReference */) {
var symbol = decl.getSymbol();
var typeSymbol = symbol && symbol.type;
if (typeSymbol && typeSymbol !== this.semanticInfoChain.anyTypeSymbol && !typeSymbol.isError()) {
result.push(decl);
}
}
}
}
return result;
};
Emitter.prototype.getModuleImportAndDependencyList = function (sourceUnit) {
var importList = "";
var dependencyList = "";
var importDecls = this.getImportDecls(this.document.fileName);
if (importDecls.length) {
for (var i = 0; i < importDecls.length; i++) {
var importStatementDecl = importDecls[i];
var importStatementSymbol = importStatementDecl.getSymbol();
var importStatementAST = this.semanticInfoChain.getASTForDecl(importStatementDecl);
if (importStatementSymbol.isUsedAsValue()) {
if (i <= importDecls.length - 1) {
dependencyList += ", ";
importList += ", ";
}
importList += importStatementDecl.name;
dependencyList += importStatementAST.moduleReference.stringLiteral.text();
}
}
}
var amdDependencies = this.document.amdDependencies();
for (var i = 0; i < amdDependencies.length; i++) {
dependencyList += ", \"" + amdDependencies[i] + "\"";
}
return {
importList: importList,
dependencyList: dependencyList
};
};
Emitter.prototype.shouldCaptureThis = function (ast) {
if (ast.kind() === 120 /* SourceUnit */) {
var scriptDecl = this.semanticInfoChain.topLevelDecl(this.document.fileName);
return TypeScript.hasFlag(scriptDecl.flags, 262144 /* MustCaptureThis */);
}
var decl = this.semanticInfoChain.getDeclForAST(ast);
if (decl) {
return TypeScript.hasFlag(decl.flags, 262144 /* MustCaptureThis */);
}
return false;
};
Emitter.prototype.emitEnum = function (moduleDecl) {
var pullDecl = this.semanticInfoChain.getDeclForAST(moduleDecl);
this.pushDecl(pullDecl);
var svModuleName = this.moduleName;
this.moduleName = moduleDecl.identifier.text();
var temp = this.setContainer(1 /* Module */);
var isExported = TypeScript.hasFlag(pullDecl.flags, 1 /* Exported */);
if (!isExported) {
this.recordSourceMappingStart(moduleDecl);
this.writeToOutput("var ");
this.recordSourceMappingStart(moduleDecl.identifier);
this.writeToOutput(this.moduleName);
this.recordSourceMappingEnd(moduleDecl.identifier);
this.writeLineToOutput(";");
this.recordSourceMappingEnd(moduleDecl);
this.emitIndent();
}
this.writeToOutput("(");
this.recordSourceMappingStart(moduleDecl);
this.writeToOutput("function (");
this.writeToOutputWithSourceMapRecord(this.moduleName, moduleDecl.identifier);
this.writeLineToOutput(") {");
this.recordSourceMappingNameStart(this.moduleName);
this.indenter.increaseIndent();
if (this.shouldCaptureThis(moduleDecl)) {
this.writeCaptureThisStatement(moduleDecl);
}
this.emitSeparatedList(moduleDecl.enumElements);
this.indenter.decreaseIndent();
this.emitIndent();
var parentIsDynamic = temp === 2 /* DynamicModule */;
if (temp === 0 /* Prog */ && isExported) {
this.writeToOutput("}");
this.recordSourceMappingNameEnd();
this.writeToOutput(")(this." + this.moduleName + " || (this." + this.moduleName + " = {}));");
} else if (isExported || temp === 0 /* Prog */) {
var dotMod = svModuleName !== "" ? (parentIsDynamic ? "exports" : svModuleName) + "." : svModuleName;
this.writeToOutput("}");
this.recordSourceMappingNameEnd();
this.writeToOutput(")(" + dotMod + this.moduleName + " || (" + dotMod + this.moduleName + " = {}));");
} else if (!isExported && temp !== 0 /* Prog */) {
this.writeToOutput("}");
this.recordSourceMappingNameEnd();
this.writeToOutput(")(" + this.moduleName + " || (" + this.moduleName + " = {}));");
} else {
this.writeToOutput("}");
this.recordSourceMappingNameEnd();
this.writeToOutput(")();");
}
this.recordSourceMappingEnd(moduleDecl);
if (temp !== 0 /* Prog */ && isExported) {
this.recordSourceMappingStart(moduleDecl);
if (parentIsDynamic) {
this.writeLineToOutput("");
this.emitIndent();
this.writeToOutput("var " + this.moduleName + " = exports." + this.moduleName + ";");
} else {
this.writeLineToOutput("");
this.emitIndent();
this.writeToOutput("var " + this.moduleName + " = " + svModuleName + "." + this.moduleName + ";");
}
this.recordSourceMappingEnd(moduleDecl);
}
this.setContainer(temp);
this.moduleName = svModuleName;
this.popDecl(pullDecl);
};
Emitter.prototype.getModuleDeclToVerifyChildNameCollision = function (moduleDecl, changeNameIfAnyDeclarationInContext) {
if (TypeScript.ArrayUtilities.contains(this.declStack, moduleDecl)) {
return moduleDecl;
} else if (changeNameIfAnyDeclarationInContext) {
var symbol = moduleDecl.getSymbol();
if (symbol) {
var otherDecls = symbol.getDeclarations();
for (var i = 0; i < otherDecls.length; i++) {
if (TypeScript.ArrayUtilities.contains(this.declStack, otherDecls[i])) {
return otherDecls[i];
}
}
}
}
return null;
};
Emitter.prototype.hasChildNameCollision = function (moduleName, parentDecl) {
var _this = this;
var childDecls = parentDecl.getChildDecls();
return TypeScript.ArrayUtilities.any(childDecls, function (childDecl) {
var childAST = _this.semanticInfoChain.getASTForDecl(childDecl);
if (childDecl.kind != 67108864 /* EnumMember */ && _this.shouldEmit(childAST)) {
if (childDecl.name === moduleName) {
if (parentDecl.kind != 8 /* Class */) {
return true;
}
if (!(childDecl.kind == 65536 /* Method */ || childDecl.kind == 4096 /* Property */ || childDecl.kind == 524288 /* SetAccessor */ || childDecl.kind == 262144 /* GetAccessor */)) {
return true;
}
}
if (_this.hasChildNameCollision(moduleName, childDecl)) {
return true;
}
}
return false;
});
};
Emitter.prototype.getModuleName = function (moduleDecl, changeNameIfAnyDeclarationInContext) {
var moduleName = moduleDecl.name;
var moduleDisplayName = moduleDecl.getDisplayName();
moduleDecl = this.getModuleDeclToVerifyChildNameCollision(moduleDecl, changeNameIfAnyDeclarationInContext);
if (moduleDecl && moduleDecl.kind != 64 /* Enum */) {
while (this.hasChildNameCollision(moduleName, moduleDecl)) {
moduleName = "_" + moduleName;
moduleDisplayName = "_" + moduleDisplayName;
}
}
return moduleDisplayName;
};
Emitter.prototype.emitModuleDeclarationWorker = function (moduleDecl) {
if (moduleDecl.stringLiteral) {
this.emitSingleModuleDeclaration(moduleDecl, moduleDecl.stringLiteral);
} else {
var moduleNames = TypeScript.getModuleNames(moduleDecl.name);
this.emitSingleModuleDeclaration(moduleDecl, moduleNames[0]);
}
};
Emitter.prototype.emitSingleModuleDeclaration = function (moduleDecl, moduleName) {
var isLastName = TypeScript.ASTHelpers.isLastNameOfModule(moduleDecl, moduleName);
if (isLastName) {
this.emitComments(moduleDecl, true);
}
var pullDecl = this.semanticInfoChain.getDeclForAST(moduleName);
this.pushDecl(pullDecl);
var svModuleName = this.moduleName;
if (moduleDecl.stringLiteral) {
this.moduleName = moduleDecl.stringLiteral.valueText();
if (TypeScript.isTSFile(this.moduleName)) {
this.moduleName = this.moduleName.substring(0, this.moduleName.length - ".ts".length);
}
} else {
this.moduleName = moduleName.text();
}
var temp = this.setContainer(1 /* Module */);
var isExported = TypeScript.hasFlag(pullDecl.flags, 1 /* Exported */);
if (!isExported) {
this.recordSourceMappingStart(moduleDecl);
this.writeToOutput("var ");
this.recordSourceMappingStart(moduleName);
this.writeToOutput(this.moduleName);
this.recordSourceMappingEnd(moduleName);
this.writeLineToOutput(";");
this.recordSourceMappingEnd(moduleDecl);
this.emitIndent();
}
this.writeToOutput("(");
this.recordSourceMappingStart(moduleDecl);
this.writeToOutput("function (");
this.moduleName = this.getModuleName(pullDecl);
this.writeToOutputWithSourceMapRecord(this.moduleName, moduleName);
this.writeLineToOutput(") {");
this.recordSourceMappingNameStart(moduleName.text());
this.indenter.increaseIndent();
if (this.shouldCaptureThis(moduleDecl)) {
this.writeCaptureThisStatement(moduleDecl);
}
if (moduleName === moduleDecl.stringLiteral) {
this.emitList(moduleDecl.moduleElements);
} else {
var moduleNames = TypeScript.getModuleNames(moduleDecl.name);
var nameIndex = moduleNames.indexOf(moduleName);
TypeScript.Debug.assert(nameIndex >= 0);
if (isLastName) {
this.emitList(moduleDecl.moduleElements);
} else {
this.emitIndent();
this.emitSingleModuleDeclaration(moduleDecl, moduleNames[nameIndex + 1]);
this.writeLineToOutput("");
}
}
this.moduleName = moduleName.text();
this.indenter.decreaseIndent();
this.emitIndent();
var parentIsDynamic = temp === 2 /* DynamicModule */;
this.recordSourceMappingStart(moduleDecl.endingToken);
if (temp === 0 /* Prog */ && isExported) {
this.writeToOutput("}");
this.recordSourceMappingNameEnd();
this.recordSourceMappingEnd(moduleDecl.endingToken);
this.writeToOutput(")(this." + this.moduleName + " || (this." + this.moduleName + " = {}));");
} else if (isExported || temp === 0 /* Prog */) {
var dotMod = svModuleName !== "" ? (parentIsDynamic ? "exports" : svModuleName) + "." : svModuleName;
this.writeToOutput("}");
this.recordSourceMappingNameEnd();
this.recordSourceMappingEnd(moduleDecl.endingToken);
this.writeToOutput(")(" + dotMod + this.moduleName + " || (" + dotMod + this.moduleName + " = {}));");
} else if (!isExported && temp !== 0 /* Prog */) {
this.writeToOutput("}");
this.recordSourceMappingNameEnd();
this.recordSourceMappingEnd(moduleDecl.endingToken);
this.writeToOutput(")(" + this.moduleName + " || (" + this.moduleName + " = {}));");
} else {
this.writeToOutput("}");
this.recordSourceMappingNameEnd();
this.recordSourceMappingEnd(moduleDecl.endingToken);
this.writeToOutput(")();");
}
this.recordSourceMappingEnd(moduleDecl);
if (temp !== 0 /* Prog */ && isExported) {
this.recordSourceMappingStart(moduleDecl);
if (parentIsDynamic) {
this.writeLineToOutput("");
this.emitIndent();
this.writeToOutput("var " + this.moduleName + " = exports." + this.moduleName + ";");
} else {
this.writeLineToOutput("");
this.emitIndent();
this.writeToOutput("var " + this.moduleName + " = " + svModuleName + "." + this.moduleName + ";");
}
this.recordSourceMappingEnd(moduleDecl);
}
this.setContainer(temp);
this.moduleName = svModuleName;
this.popDecl(pullDecl);
if (isLastName) {
this.emitComments(moduleDecl, false);
}
};
Emitter.prototype.emitEnumElement = function (varDecl) {
var pullDecl = this.semanticInfoChain.getDeclForAST(varDecl);
TypeScript.Debug.assert(pullDecl && pullDecl.kind === 67108864 /* EnumMember */);
this.emitComments(varDecl, true);
this.recordSourceMappingStart(varDecl);
var name = varDecl.propertyName.text();
var quoted = TypeScript.isQuoted(name);
this.writeToOutput(this.moduleName);
this.writeToOutput('[');
this.writeToOutput(this.moduleName);
this.writeToOutput('[');
this.writeToOutput(quoted ? name : '"' + name + '"');
this.writeToOutput(']');
if (varDecl.equalsValueClause) {
this.emit(varDecl.equalsValueClause);
} else if (pullDecl.constantValue !== null) {
this.writeToOutput(' = ');
this.writeToOutput(pullDecl.constantValue.toString());
} else {
this.writeToOutput(' = null');
}
this.writeToOutput('] = ');
this.writeToOutput(quoted ? name : '"' + name + '"');
this.recordSourceMappingEnd(varDecl);
this.emitComments(varDecl, false);
this.writeToOutput(';');
};
Emitter.prototype.emitElementAccessExpression = function (expression) {
this.recordSourceMappingStart(expression);
this.emit(expression.expression);
this.writeToOutput("[");
this.emit(expression.argumentExpression);
this.writeToOutput("]");
this.recordSourceMappingEnd(expression);
};
Emitter.prototype.emitSimpleArrowFunctionExpression = function (arrowFunction) {
this.emitAnyArrowFunctionExpression(arrowFunction, null, TypeScript.ASTHelpers.parametersFromIdentifier(arrowFunction.identifier), arrowFunction.block, arrowFunction.expression);
};
Emitter.prototype.emitParenthesizedArrowFunctionExpression = function (arrowFunction) {
this.emitAnyArrowFunctionExpression(arrowFunction, null, TypeScript.ASTHelpers.parametersFromParameterList(arrowFunction.callSignature.parameterList), arrowFunction.block, arrowFunction.expression);
};
Emitter.prototype.emitAnyArrowFunctionExpression = function (arrowFunction, funcName, parameters, block, expression) {
var savedInArrowFunction = this.inArrowFunction;
this.inArrowFunction = true;
var temp = this.setContainer(5 /* Function */);
this.recordSourceMappingStart(arrowFunction);
var pullDecl = this.semanticInfoChain.getDeclForAST(arrowFunction);
this.pushDecl(pullDecl);
this.emitComments(arrowFunction, true);
this.recordSourceMappingStart(arrowFunction);
this.writeToOutput("function ");
this.writeToOutput("(");
this.emitFunctionParameters(parameters);
this.writeToOutput(")");
this.emitFunctionBodyStatements(funcName, arrowFunction, parameters, block, expression);
this.recordSourceMappingEnd(arrowFunction);
this.recordSourceMappingEnd(arrowFunction);
this.emitComments(arrowFunction, false);
this.popDecl(pullDecl);
this.setContainer(temp);
this.inArrowFunction = savedInArrowFunction;
};
Emitter.prototype.emitConstructor = function (funcDecl) {
if (!funcDecl.block) {
return;
}
var temp = this.setContainer(4 /* Constructor */);
this.recordSourceMappingStart(funcDecl);
var pullDecl = this.semanticInfoChain.getDeclForAST(funcDecl);
this.pushDecl(pullDecl);
this.emitComments(funcDecl, true);
this.recordSourceMappingStart(funcDecl);
this.writeToOutput("function ");
this.writeToOutput(this.thisClassNode.identifier.text());
this.writeToOutput("(");
var parameters = TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList);
this.emitFunctionParameters(parameters);
this.writeLineToOutput(") {");
this.recordSourceMappingNameStart("constructor");
this.indenter.increaseIndent();
this.emitDefaultValueAssignments(parameters);
this.emitRestParameterInitializer(parameters);
if (this.shouldCaptureThis(funcDecl)) {
this.writeCaptureThisStatement(funcDecl);
}
this.emitConstructorStatements(funcDecl);
this.emitCommentsArray(funcDecl.block.closeBraceLeadingComments, false);
this.indenter.decreaseIndent();
this.emitIndent();
this.writeToOutputWithSourceMapRecord("}", funcDecl.block.closeBraceToken);
this.recordSourceMappingNameEnd();
this.recordSourceMappingEnd(funcDecl);
this.recordSourceMappingEnd(funcDecl);
this.emitComments(funcDecl, false);
this.popDecl(pullDecl);
this.setContainer(temp);
};
Emitter.prototype.emitGetAccessor = function (accessor) {
this.recordSourceMappingStart(accessor);
this.writeToOutput("get ");
var temp = this.setContainer(5 /* Function */);
this.recordSourceMappingStart(accessor);
var pullDecl = this.semanticInfoChain.getDeclForAST(accessor);
this.pushDecl(pullDecl);
this.recordSourceMappingStart(accessor);
var accessorSymbol = TypeScript.PullHelpers.getAccessorSymbol(accessor, this.semanticInfoChain);
var container = accessorSymbol.getContainer();
var containerKind = container.kind;
this.recordSourceMappingNameStart(accessor.propertyName.text());
this.writeToOutput(accessor.propertyName.text());
this.writeToOutput("(");
this.writeToOutput(")");
this.emitFunctionBodyStatements(null, accessor, TypeScript.ASTHelpers.parametersFromParameterList(accessor.parameterList), accessor.block, null);
this.recordSourceMappingEnd(accessor);
this.recordSourceMappingEnd(accessor);
this.popDecl(pullDecl);
this.setContainer(temp);
this.recordSourceMappingEnd(accessor);
};
Emitter.prototype.emitSetAccessor = function (accessor) {
this.recordSourceMappingStart(accessor);
this.writeToOutput("set ");
var temp = this.setContainer(5 /* Function */);
this.recordSourceMappingStart(accessor);
var pullDecl = this.semanticInfoChain.getDeclForAST(accessor);
this.pushDecl(pullDecl);
this.recordSourceMappingStart(accessor);
var accessorSymbol = TypeScript.PullHelpers.getAccessorSymbol(accessor, this.semanticInfoChain);
var container = accessorSymbol.getContainer();
var containerKind = container.kind;
this.recordSourceMappingNameStart(accessor.propertyName.text());
this.writeToOutput(accessor.propertyName.text());
this.writeToOutput("(");
var parameters = TypeScript.ASTHelpers.parametersFromParameterList(accessor.parameterList);
this.emitFunctionParameters(parameters);
this.writeToOutput(")");
this.emitFunctionBodyStatements(null, accessor, parameters, accessor.block, null);
this.recordSourceMappingEnd(accessor);
this.recordSourceMappingEnd(accessor);
this.popDecl(pullDecl);
this.setContainer(temp);
this.recordSourceMappingEnd(accessor);
};
Emitter.prototype.emitFunctionExpression = function (funcDecl) {
var savedInArrowFunction = this.inArrowFunction;
this.inArrowFunction = false;
var temp = this.setContainer(5 /* Function */);
var funcName = funcDecl.identifier ? funcDecl.identifier.text() : null;
this.recordSourceMappingStart(funcDecl);
var pullDecl = this.semanticInfoChain.getDeclForAST(funcDecl);
this.pushDecl(pullDecl);
this.recordSourceMappingStart(funcDecl);
this.writeToOutput("function ");
if (funcDecl.identifier) {
this.recordSourceMappingStart(funcDecl.identifier);
this.writeToOutput(funcDecl.identifier.text());
this.recordSourceMappingEnd(funcDecl.identifier);
}
this.writeToOutput("(");
var parameters = TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList);
this.emitFunctionParameters(parameters);
this.writeToOutput(")");
this.emitFunctionBodyStatements(funcName, funcDecl, parameters, funcDecl.block, null);
this.recordSourceMappingEnd(funcDecl);
this.recordSourceMappingEnd(funcDecl);
this.emitComments(funcDecl, false);
this.popDecl(pullDecl);
this.setContainer(temp);
this.inArrowFunction = savedInArrowFunction;
};
Emitter.prototype.emitFunction = function (funcDecl) {
if (funcDecl.block === null) {
return;
}
var savedInArrowFunction = this.inArrowFunction;
this.inArrowFunction = false;
var temp = this.setContainer(5 /* Function */);
var funcName = funcDecl.identifier.text();
this.recordSourceMappingStart(funcDecl);
var printName = funcDecl.identifier !== null;
var pullDecl = this.semanticInfoChain.getDeclForAST(funcDecl);
this.pushDecl(pullDecl);
this.emitComments(funcDecl, true);
this.recordSourceMappingStart(funcDecl);
this.writeToOutput("function ");
if (printName) {
var id = funcDecl.identifier.text();
if (id) {
if (funcDecl.identifier) {
this.recordSourceMappingStart(funcDecl.identifier);
}
this.writeToOutput(id);
if (funcDecl.identifier) {
this.recordSourceMappingEnd(funcDecl.identifier);
}
}
}
this.emitParameterList(funcDecl.callSignature.parameterList);
var parameters = TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList);
this.emitFunctionBodyStatements(funcDecl.identifier.text(), funcDecl, parameters, funcDecl.block, null);
this.recordSourceMappingEnd(funcDecl);
this.recordSourceMappingEnd(funcDecl);
this.emitComments(funcDecl, false);
this.popDecl(pullDecl);
this.setContainer(temp);
this.inArrowFunction = savedInArrowFunction;
if (funcDecl.block) {
var pullFunctionDecl = this.semanticInfoChain.getDeclForAST(funcDecl);
if ((this.emitState.container === 1 /* Module */ || this.emitState.container === 2 /* DynamicModule */) && pullFunctionDecl && TypeScript.hasFlag(pullFunctionDecl.flags, 1 /* Exported */)) {
this.writeLineToOutput("");
this.emitIndent();
var modName = this.emitState.container === 1 /* Module */ ? this.moduleName : "exports";
this.recordSourceMappingStart(funcDecl);
this.writeToOutput(modName + "." + funcName + " = " + funcName + ";");
this.recordSourceMappingEnd(funcDecl);
}
}
};
Emitter.prototype.emitAmbientVarDecl = function (varDecl) {
this.recordSourceMappingStart(this.currentVariableDeclaration);
if (varDecl.equalsValueClause) {
this.emitComments(varDecl, true);
this.recordSourceMappingStart(varDecl);
this.writeToOutputWithSourceMapRecord(varDecl.propertyName.text(), varDecl.propertyName);
this.emitJavascript(varDecl.equalsValueClause, false);
this.recordSourceMappingEnd(varDecl);
this.emitComments(varDecl, false);
}
};
Emitter.prototype.emitVarDeclVar = function () {
if (this.currentVariableDeclaration) {
this.writeToOutput("var ");
}
};
Emitter.prototype.emitVariableDeclaration = function (declaration) {
var varDecl = declaration.declarators.nonSeparatorAt(0);
var symbol = this.semanticInfoChain.getSymbolForAST(varDecl);
var parentSymbol = symbol ? symbol.getContainer() : null;
var parentKind = parentSymbol ? parentSymbol.kind : 0 /* None */;
this.emitComments(declaration, true);
var pullVarDecl = this.semanticInfoChain.getDeclForAST(varDecl);
var isAmbientWithoutInit = pullVarDecl && TypeScript.hasFlag(pullVarDecl.flags, 8 /* Ambient */) && varDecl.equalsValueClause === null;
if (!isAmbientWithoutInit) {
var prevVariableDeclaration = this.currentVariableDeclaration;
this.currentVariableDeclaration = declaration;
for (var i = 0, n = declaration.declarators.nonSeparatorCount(); i < n; i++) {
var declarator = declaration.declarators.nonSeparatorAt(i);
if (i > 0) {
this.writeToOutput(", ");
}
this.emit(declarator);
}
this.currentVariableDeclaration = prevVariableDeclaration;
this.recordSourceMappingEnd(declaration);
}
this.emitComments(declaration, false);
};
Emitter.prototype.emitMemberVariableDeclaration = function (varDecl) {
TypeScript.Debug.assert(!TypeScript.hasModifier(varDecl.modifiers, 16 /* Static */) && varDecl.variableDeclarator.equalsValueClause);
var pullDecl = this.semanticInfoChain.getDeclForAST(varDecl);
this.pushDecl(pullDecl);
this.emitComments(varDecl, true);
this.recordSourceMappingStart(varDecl);
var varDeclName = varDecl.variableDeclarator.propertyName.text();
var quotedOrNumber = TypeScript.isQuoted(varDeclName) || varDecl.variableDeclarator.propertyName.kind() !== 11 /* IdentifierName */;
var symbol = this.semanticInfoChain.getSymbolForAST(varDecl);
var parentSymbol = symbol ? symbol.getContainer() : null;
var parentDecl = pullDecl && pullDecl.getParentDecl();
if (quotedOrNumber) {
this.writeToOutput("this[");
} else {
this.writeToOutput("this.");
}
this.writeToOutputWithSourceMapRecord(varDecl.variableDeclarator.propertyName.text(), varDecl.variableDeclarator.propertyName);
if (quotedOrNumber) {
this.writeToOutput("]");
}
if (varDecl.variableDeclarator.equalsValueClause) {
var prevVariableDeclaration = this.currentVariableDeclaration;
this.emit(varDecl.variableDeclarator.equalsValueClause);
this.currentVariableDeclaration = prevVariableDeclaration;
}
if (this.emitState.container !== 6 /* Args */) {
this.writeToOutput(";");
}
this.recordSourceMappingEnd(varDecl);
this.emitComments(varDecl, false);
this.popDecl(pullDecl);
};
Emitter.prototype.emitVariableDeclarator = function (varDecl) {
var pullDecl = this.semanticInfoChain.getDeclForAST(varDecl);
this.pushDecl(pullDecl);
if (pullDecl && (pullDecl.flags & 8 /* Ambient */) === 8 /* Ambient */) {
this.emitAmbientVarDecl(varDecl);
} else {
this.emitComments(varDecl, true);
this.recordSourceMappingStart(this.currentVariableDeclaration);
this.recordSourceMappingStart(varDecl);
var varDeclName = varDecl.propertyName.text();
var symbol = this.semanticInfoChain.getSymbolForAST(varDecl);
var parentSymbol = symbol ? symbol.getContainer() : null;
var parentDecl = pullDecl && pullDecl.getParentDecl();
var parentIsModule = parentDecl && (parentDecl.flags & 102400 /* SomeInitializedModule */);
if (parentIsModule) {
if (!TypeScript.hasFlag(pullDecl.flags, 1 /* Exported */)) {
this.emitVarDeclVar();
} else {
if (this.emitState.container === 2 /* DynamicModule */) {
this.writeToOutput("exports.");
} else {
this.writeToOutput(this.moduleName + ".");
}
}
} else {
this.emitVarDeclVar();
}
this.writeToOutputWithSourceMapRecord(varDecl.propertyName.text(), varDecl.propertyName);
if (varDecl.equalsValueClause) {
var prevVariableDeclaration = this.currentVariableDeclaration;
this.emit(varDecl.equalsValueClause);
this.currentVariableDeclaration = prevVariableDeclaration;
}
this.recordSourceMappingEnd(varDecl);
this.emitComments(varDecl, false);
}
this.currentVariableDeclaration = undefined;
this.popDecl(pullDecl);
};
Emitter.prototype.symbolIsUsedInItsEnclosingContainer = function (symbol, dynamic) {
if (typeof dynamic === "undefined") { dynamic = false; }
var symDecls = symbol.getDeclarations();
if (symDecls.length) {
var enclosingDecl = this.getEnclosingDecl();
if (enclosingDecl) {
var parentDecl = symDecls[0].getParentDecl();
if (parentDecl) {
var symbolDeclarationEnclosingContainer = parentDecl;
var enclosingContainer = enclosingDecl;
while (symbolDeclarationEnclosingContainer) {
if (symbolDeclarationEnclosingContainer.kind === (dynamic ? 32 /* DynamicModule */ : 4 /* Container */)) {
break;
}
symbolDeclarationEnclosingContainer = symbolDeclarationEnclosingContainer.getParentDecl();
}
if (symbolDeclarationEnclosingContainer) {
while (enclosingContainer) {
if (enclosingContainer.kind === (dynamic ? 32 /* DynamicModule */ : 4 /* Container */)) {
break;
}
enclosingContainer = enclosingContainer.getParentDecl();
}
}
if (symbolDeclarationEnclosingContainer && enclosingContainer) {
var same = symbolDeclarationEnclosingContainer === enclosingContainer;
if (!same && symbol.anyDeclHasFlag(32768 /* InitializedModule */)) {
same = symbolDeclarationEnclosingContainer === enclosingContainer.getParentDecl();
}
return same;
}
}
}
}
return false;
};
Emitter.prototype.getPotentialDeclPathInfoForEmit = function (pullSymbol) {
var decl = pullSymbol.getDeclarations()[0];
var parentDecl = decl.getParentDecl();
var symbolContainerDeclPath = parentDecl ? parentDecl.getParentPath() : [];
var enclosingContextDeclPath = this.declStack;
var commonNodeIndex = -1;
if (enclosingContextDeclPath.length) {
for (var i = symbolContainerDeclPath.length - 1; i >= 0; i--) {
var symbolContainerDeclPathNode = symbolContainerDeclPath[i];
for (var j = enclosingContextDeclPath.length - 1; j >= 0; j--) {
var enclosingContextDeclPathNode = enclosingContextDeclPath[j];
if (symbolContainerDeclPathNode === enclosingContextDeclPathNode) {
commonNodeIndex = i;
break;
}
}
if (commonNodeIndex >= 0) {
break;
}
}
}
var startingIndex = symbolContainerDeclPath.length - 1;
for (var i = startingIndex - 1; i > commonNodeIndex; i--) {
if (symbolContainerDeclPath[i + 1].flags & 1 /* Exported */) {
startingIndex = i;
} else {
break;
}
}
return { potentialPath: symbolContainerDeclPath, startingIndex: startingIndex };
};
Emitter.prototype.emitDottedNameFromDeclPath = function (declPath, startingIndex, lastIndex) {
for (var i = startingIndex; i <= lastIndex; i++) {
if (declPath[i].kind === 32 /* DynamicModule */ || declPath[i].flags & 65536 /* InitializedDynamicModule */) {
this.writeToOutput("exports.");
} else {
this.writeToOutput(this.getModuleName(declPath[i], true) + ".");
}
}
};
Emitter.prototype.emitSymbolContainerNameInEnclosingContext = function (pullSymbol) {
var declPathInfo = this.getPotentialDeclPathInfoForEmit(pullSymbol);
var potentialDeclPath = declPathInfo.potentialPath;
var startingIndex = declPathInfo.startingIndex;
this.emitDottedNameFromDeclPath(potentialDeclPath, startingIndex, potentialDeclPath.length - 1);
};
Emitter.prototype.getSymbolForEmit = function (ast) {
var pullSymbol = this.semanticInfoChain.getSymbolForAST(ast);
var pullSymbolAlias = this.semanticInfoChain.getAliasSymbolForAST(ast);
if (pullSymbol && pullSymbolAlias) {
var symbolToCompare = TypeScript.isTypesOnlyLocation(ast) ? pullSymbolAlias.getExportAssignedTypeSymbol() : pullSymbolAlias.getExportAssignedValueSymbol();
if (pullSymbol === symbolToCompare) {
pullSymbol = pullSymbolAlias;
pullSymbolAlias = null;
}
}
return { symbol: pullSymbol, aliasSymbol: pullSymbolAlias };
};
Emitter.prototype.emitName = function (name, addThis) {
this.emitComments(name, true);
this.recordSourceMappingStart(name);
if (name.text().length > 0) {
var symbolForEmit = this.getSymbolForEmit(name);
var pullSymbol = symbolForEmit.symbol;
if (!pullSymbol) {
pullSymbol = this.semanticInfoChain.anyTypeSymbol;
}
var pullSymbolAlias = symbolForEmit.aliasSymbol;
var pullSymbolKind = pullSymbol.kind;
var isLocalAlias = pullSymbolAlias && (pullSymbolAlias.getDeclarations()[0].getParentDecl() === this.getEnclosingDecl());
if (addThis && (this.emitState.container !== 6 /* Args */) && pullSymbol) {
var pullSymbolContainer = pullSymbol.getContainer();
if (pullSymbolContainer) {
var pullSymbolContainerKind = pullSymbolContainer.kind;
if (pullSymbolContainerKind === 8 /* Class */) {
if (pullSymbol.anyDeclHasFlag(16 /* Static */)) {
this.emitSymbolContainerNameInEnclosingContext(pullSymbol);
} else if (pullSymbolKind === 4096 /* Property */) {
this.emitThis();
this.writeToOutput(".");
}
} else if (TypeScript.PullHelpers.symbolIsModule(pullSymbolContainer) || pullSymbolContainerKind === 64 /* Enum */ || pullSymbolContainer.anyDeclHasFlag(32768 /* InitializedModule */ | 4096 /* Enum */)) {
if (pullSymbolKind === 4096 /* Property */ || pullSymbolKind === 67108864 /* EnumMember */) {
this.emitSymbolContainerNameInEnclosingContext(pullSymbol);
} else if (pullSymbol.anyDeclHasFlag(1 /* Exported */) && pullSymbolKind === 512 /* Variable */ && !pullSymbol.anyDeclHasFlag(32768 /* InitializedModule */ | 4096 /* Enum */)) {
this.emitSymbolContainerNameInEnclosingContext(pullSymbol);
} else if (pullSymbol.anyDeclHasFlag(1 /* Exported */) && !this.symbolIsUsedInItsEnclosingContainer(pullSymbol)) {
this.emitSymbolContainerNameInEnclosingContext(pullSymbol);
}
} else if (pullSymbolContainerKind === 32 /* DynamicModule */ || pullSymbolContainer.anyDeclHasFlag(65536 /* InitializedDynamicModule */)) {
if (pullSymbolKind === 4096 /* Property */) {
this.writeToOutput("exports.");
} else if (pullSymbol.anyDeclHasFlag(1 /* Exported */) && !isLocalAlias && !pullSymbol.anyDeclHasFlag(118784 /* ImplicitVariable */) && pullSymbol.kind !== 32768 /* ConstructorMethod */ && pullSymbol.kind !== 8 /* Class */ && pullSymbol.kind !== 64 /* Enum */) {
this.writeToOutput("exports.");
}
}
}
}
this.writeToOutput(name.text());
}
this.recordSourceMappingEnd(name);
this.emitComments(name, false);
};
Emitter.prototype.recordSourceMappingNameStart = function (name) {
if (this.sourceMapper) {
var nameIndex = -1;
if (name) {
if (this.sourceMapper.currentNameIndex.length > 0) {
var parentNameIndex = this.sourceMapper.currentNameIndex[this.sourceMapper.currentNameIndex.length - 1];
if (parentNameIndex !== -1) {
name = this.sourceMapper.names[parentNameIndex] + "." + name;
}
}
var nameIndex = this.sourceMapper.names.length - 1;
for (nameIndex; nameIndex >= 0; nameIndex--) {
if (this.sourceMapper.names[nameIndex] === name) {
break;
}
}
if (nameIndex === -1) {
nameIndex = this.sourceMapper.names.length;
this.sourceMapper.names.push(name);
}
}
this.sourceMapper.currentNameIndex.push(nameIndex);
}
};
Emitter.prototype.recordSourceMappingNameEnd = function () {
if (this.sourceMapper) {
this.sourceMapper.currentNameIndex.pop();
}
};
Emitter.prototype.recordSourceMappingStart = function (ast) {
if (this.sourceMapper && TypeScript.ASTHelpers.isValidAstNode(ast)) {
var lineCol = { line: -1, character: -1 };
var sourceMapping = new TypeScript.SourceMapping();
sourceMapping.start.emittedColumn = this.emitState.column;
sourceMapping.start.emittedLine = this.emitState.line;
var lineMap = this.document.lineMap();
lineMap.fillLineAndCharacterFromPosition(ast.start(), lineCol);
sourceMapping.start.sourceColumn = lineCol.character;
sourceMapping.start.sourceLine = lineCol.line + 1;
lineMap.fillLineAndCharacterFromPosition(ast.end(), lineCol);
sourceMapping.end.sourceColumn = lineCol.character;
sourceMapping.end.sourceLine = lineCol.line + 1;
TypeScript.Debug.assert(!isNaN(sourceMapping.start.emittedColumn));
TypeScript.Debug.assert(!isNaN(sourceMapping.start.emittedLine));
TypeScript.Debug.assert(!isNaN(sourceMapping.start.sourceColumn));
TypeScript.Debug.assert(!isNaN(sourceMapping.start.sourceLine));
TypeScript.Debug.assert(!isNaN(sourceMapping.end.sourceColumn));
TypeScript.Debug.assert(!isNaN(sourceMapping.end.sourceLine));
if (this.sourceMapper.currentNameIndex.length > 0) {
sourceMapping.nameIndex = this.sourceMapper.currentNameIndex[this.sourceMapper.currentNameIndex.length - 1];
}
var siblings = this.sourceMapper.currentMappings[this.sourceMapper.currentMappings.length - 1];
siblings.push(sourceMapping);
this.sourceMapper.currentMappings.push(sourceMapping.childMappings);
this.sourceMapper.increaseMappingLevel(ast);
}
};
Emitter.prototype.recordSourceMappingEnd = function (ast) {
if (this.sourceMapper && TypeScript.ASTHelpers.isValidAstNode(ast)) {
this.sourceMapper.currentMappings.pop();
var siblings = this.sourceMapper.currentMappings[this.sourceMapper.currentMappings.length - 1];
var sourceMapping = siblings[siblings.length - 1];
sourceMapping.end.emittedColumn = this.emitState.column;
sourceMapping.end.emittedLine = this.emitState.line;
TypeScript.Debug.assert(!isNaN(sourceMapping.end.emittedColumn));
TypeScript.Debug.assert(!isNaN(sourceMapping.end.emittedLine));
this.sourceMapper.decreaseMappingLevel(ast);
}
};
Emitter.prototype.getOutputFiles = function () {
var result = [];
if (this.sourceMapper !== null) {
this.sourceMapper.emitSourceMapping();
result.push(this.sourceMapper.getOutputFile());
}
result.push(this.outfile.getOutputFile());
return result;
};
Emitter.prototype.emitParameterPropertyAndMemberVariableAssignments = function () {
var constructorDecl = getLastConstructor(this.thisClassNode);
if (constructorDecl) {
for (var i = 0, n = constructorDecl.callSignature.parameterList.parameters.nonSeparatorCount(); i < n; i++) {
var parameter = constructorDecl.callSignature.parameterList.parameters.nonSeparatorAt(i);
var parameterDecl = this.semanticInfoChain.getDeclForAST(parameter);
if (TypeScript.hasFlag(parameterDecl.flags, 8388608 /* PropertyParameter */)) {
this.emitIndent();
this.recordSourceMappingStart(parameter);
this.writeToOutputWithSourceMapRecord("this." + parameter.identifier.text(), parameter.identifier);
this.writeToOutput(" = ");
this.writeToOutputWithSourceMapRecord(parameter.identifier.text(), parameter.identifier);
this.writeLineToOutput(";");
this.recordSourceMappingEnd(parameter);
}
}
}
for (var i = 0, n = this.thisClassNode.classElements.childCount(); i < n; i++) {
if (this.thisClassNode.classElements.childAt(i).kind() === 136 /* MemberVariableDeclaration */) {
var varDecl = this.thisClassNode.classElements.childAt(i);
if (!TypeScript.hasModifier(varDecl.modifiers, 16 /* Static */) && varDecl.variableDeclarator.equalsValueClause) {
this.emitIndent();
this.emitMemberVariableDeclaration(varDecl);
this.writeLineToOutput("");
}
}
}
};
Emitter.prototype.isOnSameLine = function (pos1, pos2) {
var lineMap = this.document.lineMap();
return lineMap.getLineNumberFromPosition(pos1) === lineMap.getLineNumberFromPosition(pos2);
};
Emitter.prototype.emitCommaSeparatedList = function (parent, list, buffer, preserveNewLines) {
if (list === null || list.nonSeparatorCount() === 0) {
return;
}
var startLine = preserveNewLines && !this.isOnSameLine(parent.end(), list.nonSeparatorAt(0).end());
if (preserveNewLines) {
this.indenter.increaseIndent();
}
if (startLine) {
this.writeLineToOutput("");
} else {
this.writeToOutput(buffer);
}
for (var i = 0, n = list.nonSeparatorCount(); i < n; i++) {
var emitNode = list.nonSeparatorAt(i);
this.emitJavascript(emitNode, startLine);
if (i < (n - 1)) {
startLine = preserveNewLines && !this.isOnSameLine(emitNode.end(), list.nonSeparatorAt(i + 1).start());
if (startLine) {
this.writeLineToOutput(",");
} else {
this.writeToOutput(", ");
}
}
}
if (preserveNewLines) {
this.indenter.decreaseIndent();
}
if (preserveNewLines && !this.isOnSameLine(parent.end(), list.nonSeparatorAt(list.nonSeparatorCount() - 1).end())) {
this.writeLineToOutput("");
this.emitIndent();
} else {
this.writeToOutput(buffer);
}
};
Emitter.prototype.emitList = function (list, useNewLineSeparator, startInclusive, endExclusive) {
if (typeof useNewLineSeparator === "undefined") { useNewLineSeparator = true; }
if (typeof startInclusive === "undefined") { startInclusive = 0; }
if (typeof endExclusive === "undefined") { endExclusive = list.childCount(); }
if (list === null) {
return;
}
this.emitComments(list, true);
var lastEmittedNode = null;
for (var i = startInclusive; i < endExclusive; i++) {
var node = list.childAt(i);
if (this.shouldEmit(node)) {
this.emitSpaceBetweenConstructs(lastEmittedNode, node);
this.emitJavascript(node, true);
if (useNewLineSeparator) {
this.writeLineToOutput("");
}
lastEmittedNode = node;
}
}
this.emitComments(list, false);
};
Emitter.prototype.emitSeparatedList = function (list, useNewLineSeparator, startInclusive, endExclusive) {
if (typeof useNewLineSeparator === "undefined") { useNewLineSeparator = true; }
if (typeof startInclusive === "undefined") { startInclusive = 0; }
if (typeof endExclusive === "undefined") { endExclusive = list.nonSeparatorCount(); }
if (list === null) {
return;
}
this.emitComments(list, true);
var lastEmittedNode = null;
for (var i = startInclusive; i < endExclusive; i++) {
var node = list.nonSeparatorAt(i);
if (this.shouldEmit(node)) {
this.emitSpaceBetweenConstructs(lastEmittedNode, node);
this.emitJavascript(node, true);
if (useNewLineSeparator) {
this.writeLineToOutput("");
}
lastEmittedNode = node;
}
}
this.emitComments(list, false);
};
Emitter.prototype.isDirectivePrologueElement = function (node) {
if (node.kind() === 149 /* ExpressionStatement */) {
var exprStatement = node;
return exprStatement.expression.kind() === 14 /* StringLiteral */;
}
return false;
};
Emitter.prototype.emitSpaceBetweenConstructs = function (node1, node2) {
if (node1 === null || node2 === null) {
return;
}
if (node1.start() === -1 || node1.end() === -1 || node2.start() === -1 || node2.end() === -1) {
return;
}
var lineMap = this.document.lineMap();
var node1EndLine = lineMap.getLineNumberFromPosition(node1.end());
var node2StartLine = lineMap.getLineNumberFromPosition(node2.start());
if ((node2StartLine - node1EndLine) > 1) {
this.writeLineToOutput("", true);
}
};
Emitter.prototype.getDetachedComments = function (element) {
var preComments = element.preComments();
if (preComments) {
var lineMap = this.document.lineMap();
var detachedComments = [];
var lastComment = null;
for (var i = 0, n = preComments.length; i < n; i++) {
var comment = preComments[i];
if (lastComment) {
var lastCommentLine = lineMap.getLineNumberFromPosition(lastComment.end());
var commentLine = lineMap.getLineNumberFromPosition(comment.start());
if (commentLine >= lastCommentLine + 2) {
return detachedComments;
}
}
detachedComments.push(comment);
lastComment = comment;
}
var lastCommentLine = lineMap.getLineNumberFromPosition(TypeScript.ArrayUtilities.last(detachedComments).end());
var astLine = lineMap.getLineNumberFromPosition(element.start());
if (astLine >= lastCommentLine + 2) {
return detachedComments;
}
}
return [];
};
Emitter.prototype.emitPossibleCopyrightHeaders = function (script) {
this.emitDetachedComments(script.moduleElements);
};
Emitter.prototype.emitDetachedComments = function (list) {
if (list.childCount() > 0) {
var firstElement = list.childAt(0);
this.detachedCommentsElement = firstElement;
this.emitCommentsArray(this.getDetachedComments(this.detachedCommentsElement), false);
}
};
Emitter.prototype.emitScriptElements = function (sourceUnit) {
var list = sourceUnit.moduleElements;
this.emitPossibleCopyrightHeaders(sourceUnit);
for (var i = 0, n = list.childCount(); i < n; i++) {
var node = list.childAt(i);
if (!this.isDirectivePrologueElement(node)) {
break;
}
this.emitJavascript(node, true);
this.writeLineToOutput("");
}
this.emitPrologue(sourceUnit);
var isExternalModule = this.document.isExternalModule();
var isNonElidedExternalModule = isExternalModule && !TypeScript.ASTHelpers.scriptIsElided(sourceUnit);
if (isNonElidedExternalModule) {
this.recordSourceMappingStart(sourceUnit);
if (this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */) {
var dependencyList = "[\"require\", \"exports\"";
var importList = "require, exports";
var importAndDependencyList = this.getModuleImportAndDependencyList(sourceUnit);
importList += importAndDependencyList.importList;
dependencyList += importAndDependencyList.dependencyList + "]";
this.writeLineToOutput("define(" + dependencyList + "," + " function(" + importList + ") {");
}
}
if (isExternalModule) {
var temp = this.setContainer(2 /* DynamicModule */);
var svModuleName = this.moduleName;
this.moduleName = sourceUnit.fileName();
if (TypeScript.isTSFile(this.moduleName)) {
this.moduleName = this.moduleName.substring(0, this.moduleName.length - ".ts".length);
}
this.setExportAssignment(null);
if (this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */) {
this.indenter.increaseIndent();
}
var externalModule = this.semanticInfoChain.getDeclForAST(this.document.sourceUnit());
if (TypeScript.hasFlag(externalModule.flags, 262144 /* MustCaptureThis */)) {
this.writeCaptureThisStatement(sourceUnit);
}
this.pushDecl(externalModule);
}
this.emitList(list, true, i, n);
if (isExternalModule) {
if (this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */) {
this.indenter.decreaseIndent();
}
if (isNonElidedExternalModule) {
var exportAssignment = this.getExportAssignment();
var exportAssignmentIdentifierText = exportAssignment ? exportAssignment.identifier.text() : null;
var exportAssignmentValueSymbol = externalModule.getSymbol().getExportAssignedValueSymbol();
if (this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */) {
if (exportAssignmentIdentifierText && exportAssignmentValueSymbol && !(exportAssignmentValueSymbol.kind & 58720272 /* SomeTypeReference */)) {
this.indenter.increaseIndent();
this.emitIndent();
this.writeToOutputWithSourceMapRecord("return " + exportAssignmentIdentifierText, exportAssignment);
this.writeLineToOutput(";");
this.indenter.decreaseIndent();
}
this.writeToOutput("});");
} else if (exportAssignmentIdentifierText && exportAssignmentValueSymbol && !(exportAssignmentValueSymbol.kind & 58720272 /* SomeTypeReference */)) {
this.emitIndent();
this.writeToOutputWithSourceMapRecord("module.exports = " + exportAssignmentIdentifierText, exportAssignment);
this.writeToOutput(";");
}
this.recordSourceMappingEnd(sourceUnit);
this.writeLineToOutput("");
}
this.setContainer(temp);
this.moduleName = svModuleName;
this.popDecl(externalModule);
}
};
Emitter.prototype.emitConstructorStatements = function (funcDecl) {
var list = funcDecl.block.statements;
if (list === null) {
return;
}
this.emitComments(list, true);
var emitPropertyAssignmentsAfterSuperCall = TypeScript.ASTHelpers.getExtendsHeritageClause(this.thisClassNode.heritageClauses) !== null;
var propertyAssignmentIndex = emitPropertyAssignmentsAfterSuperCall ? 1 : 0;
var lastEmittedNode = null;
for (var i = 0, n = list.childCount(); i < n; i++) {
if (i === propertyAssignmentIndex) {
this.emitParameterPropertyAndMemberVariableAssignments();
}
var node = list.childAt(i);
if (this.shouldEmit(node)) {
this.emitSpaceBetweenConstructs(lastEmittedNode, node);
this.emitJavascript(node, true);
this.writeLineToOutput("");
lastEmittedNode = node;
}
}
if (i === propertyAssignmentIndex) {
this.emitParameterPropertyAndMemberVariableAssignments();
}
this.emitComments(list, false);
};
Emitter.prototype.emitJavascript = function (ast, startLine) {
if (ast === null) {
return;
}
if (startLine && this.indenter.indentAmt > 0) {
this.emitIndent();
}
this.emit(ast);
};
Emitter.prototype.emitAccessorMemberDeclaration = function (funcDecl, name, className, isProto) {
if (funcDecl.kind() !== 139 /* GetAccessor */) {
var accessorSymbol = TypeScript.PullHelpers.getAccessorSymbol(funcDecl, this.semanticInfoChain);
if (accessorSymbol.getGetter()) {
return;
}
}
this.emitIndent();
this.recordSourceMappingStart(funcDecl);
this.writeToOutput("Object.defineProperty(" + className);
if (isProto) {
this.writeToOutput(".prototype, ");
} else {
this.writeToOutput(", ");
}
var functionName = name.text();
if (TypeScript.isQuoted(functionName)) {
this.writeToOutput(functionName);
} else {
this.writeToOutput('"' + functionName + '"');
}
this.writeLineToOutput(", {");
this.indenter.increaseIndent();
var accessors = TypeScript.PullHelpers.getGetterAndSetterFunction(funcDecl, this.semanticInfoChain);
if (accessors.getter) {
this.emitIndent();
this.recordSourceMappingStart(accessors.getter);
this.emitComments(accessors.getter, true);
this.writeToOutput("get: ");
this.emitAccessorBody(accessors.getter, accessors.getter.parameterList, accessors.getter.block);
this.writeLineToOutput(",");
}
if (accessors.setter) {
this.emitIndent();
this.recordSourceMappingStart(accessors.setter);
this.emitComments(accessors.setter, true);
this.writeToOutput("set: ");
this.emitAccessorBody(accessors.setter, accessors.setter.parameterList, accessors.setter.block);
this.writeLineToOutput(",");
}
this.emitIndent();
this.writeLineToOutput("enumerable: true,");
this.emitIndent();
this.writeLineToOutput("configurable: true");
this.indenter.decreaseIndent();
this.emitIndent();
this.writeLineToOutput("});");
this.recordSourceMappingEnd(funcDecl);
};
Emitter.prototype.emitAccessorBody = function (funcDecl, parameterList, block) {
var pullDecl = this.semanticInfoChain.getDeclForAST(funcDecl);
this.pushDecl(pullDecl);
this.recordSourceMappingStart(funcDecl);
this.writeToOutput("function ");
this.writeToOutput("(");
var parameters = TypeScript.ASTHelpers.parametersFromParameterList(parameterList);
this.emitFunctionParameters(parameters);
this.writeToOutput(")");
this.emitFunctionBodyStatements(null, funcDecl, parameters, block, null);
this.recordSourceMappingEnd(funcDecl);
this.recordSourceMappingEnd(funcDecl);
this.popDecl(pullDecl);
};
Emitter.prototype.emitClass = function (classDecl) {
var pullDecl = this.semanticInfoChain.getDeclForAST(classDecl);
this.pushDecl(pullDecl);
var svClassNode = this.thisClassNode;
this.thisClassNode = classDecl;
var className = classDecl.identifier.text();
this.emitComments(classDecl, true);
var temp = this.setContainer(3 /* Class */);
this.recordSourceMappingStart(classDecl);
this.writeToOutput("var " + className);
var hasBaseClass = TypeScript.ASTHelpers.getExtendsHeritageClause(classDecl.heritageClauses) !== null;
var baseTypeReference = null;
var varDecl = null;
if (hasBaseClass) {
this.writeLineToOutput(" = (function (_super) {");
} else {
this.writeLineToOutput(" = (function () {");
}
this.recordSourceMappingNameStart(className);
this.indenter.increaseIndent();
if (hasBaseClass) {
baseTypeReference = TypeScript.ASTHelpers.getExtendsHeritageClause(classDecl.heritageClauses).typeNames.nonSeparatorAt(0);
this.emitIndent();
this.writeToOutputWithSourceMapRecord("__extends(" + className + ", _super)", baseTypeReference);
this.writeLineToOutput(";");
}
this.emitIndent();
var constrDecl = getLastConstructor(classDecl);
if (constrDecl) {
this.emit(constrDecl);
this.writeLineToOutput("");
} else {
this.recordSourceMappingStart(classDecl);
this.indenter.increaseIndent();
this.writeLineToOutput("function " + classDecl.identifier.text() + "() {");
this.recordSourceMappingNameStart("constructor");
if (hasBaseClass) {
this.emitIndent();
this.writeToOutputWithSourceMapRecord("_super.apply(this, arguments)", baseTypeReference);
this.writeLineToOutput(";");
}
if (this.shouldCaptureThis(classDecl)) {
this.writeCaptureThisStatement(classDecl);
}
this.emitParameterPropertyAndMemberVariableAssignments();
this.indenter.decreaseIndent();
this.emitIndent();
this.writeToOutputWithSourceMapRecord("}", classDecl.closeBraceToken);
this.writeLineToOutput("");
this.recordSourceMappingNameEnd();
this.recordSourceMappingEnd(classDecl);
}
this.emitClassMembers(classDecl);
this.emitIndent();
this.writeToOutputWithSourceMapRecord("return " + className + ";", classDecl.closeBraceToken);
this.writeLineToOutput("");
this.indenter.decreaseIndent();
this.emitIndent();
this.writeToOutputWithSourceMapRecord("}", classDecl.closeBraceToken);
this.recordSourceMappingNameEnd();
this.recordSourceMappingStart(classDecl);
this.writeToOutput(")(");
if (hasBaseClass) {
this.emitJavascript(baseTypeReference, false);
}
this.writeToOutput(");");
this.recordSourceMappingEnd(classDecl);
if ((temp === 1 /* Module */ || temp === 2 /* DynamicModule */) && TypeScript.hasFlag(pullDecl.flags, 1 /* Exported */)) {
this.writeLineToOutput("");
this.emitIndent();
var modName = temp === 1 /* Module */ ? this.moduleName : "exports";
this.writeToOutputWithSourceMapRecord(modName + "." + className + " = " + className + ";", classDecl);
}
this.recordSourceMappingEnd(classDecl);
this.emitComments(classDecl, false);
this.setContainer(temp);
this.thisClassNode = svClassNode;
this.popDecl(pullDecl);
};
Emitter.prototype.emitClassMembers = function (classDecl) {
var lastEmittedMember = null;
for (var i = 0, n = classDecl.classElements.childCount(); i < n; i++) {
var memberDecl = classDecl.classElements.childAt(i);
if (memberDecl.kind() === 139 /* GetAccessor */) {
this.emitSpaceBetweenConstructs(lastEmittedMember, memberDecl);
var getter = memberDecl;
this.emitAccessorMemberDeclaration(getter, getter.propertyName, classDecl.identifier.text(), !TypeScript.hasModifier(getter.modifiers, 16 /* Static */));
lastEmittedMember = memberDecl;
} else if (memberDecl.kind() === 140 /* SetAccessor */) {
this.emitSpaceBetweenConstructs(lastEmittedMember, memberDecl);
var setter = memberDecl;
this.emitAccessorMemberDeclaration(setter, setter.propertyName, classDecl.identifier.text(), !TypeScript.hasModifier(setter.modifiers, 16 /* Static */));
lastEmittedMember = memberDecl;
} else if (memberDecl.kind() === 135 /* MemberFunctionDeclaration */) {
var memberFunction = memberDecl;
if (memberFunction.block) {
this.emitSpaceBetweenConstructs(lastEmittedMember, memberDecl);
this.emitClassMemberFunctionDeclaration(classDecl, memberFunction);
lastEmittedMember = memberDecl;
}
}
}
for (var i = 0, n = classDecl.classElements.childCount(); i < n; i++) {
var memberDecl = classDecl.classElements.childAt(i);
if (memberDecl.kind() === 136 /* MemberVariableDeclaration */) {
var varDecl = memberDecl;
if (TypeScript.hasModifier(varDecl.modifiers, 16 /* Static */) && varDecl.variableDeclarator.equalsValueClause) {
this.emitSpaceBetweenConstructs(lastEmittedMember, varDecl);
this.emitIndent();
this.recordSourceMappingStart(varDecl);
var varDeclName = varDecl.variableDeclarator.propertyName.text();
if (TypeScript.isQuoted(varDeclName) || varDecl.variableDeclarator.propertyName.kind() !== 11 /* IdentifierName */) {
this.writeToOutput(classDecl.identifier.text() + "[" + varDeclName + "]");
} else {
this.writeToOutput(classDecl.identifier.text() + "." + varDeclName);
}
this.emit(varDecl.variableDeclarator.equalsValueClause);
this.recordSourceMappingEnd(varDecl);
this.writeLineToOutput(";");
lastEmittedMember = varDecl;
}
}
}
};
Emitter.prototype.emitClassMemberFunctionDeclaration = function (classDecl, funcDecl) {
this.emitIndent();
this.recordSourceMappingStart(funcDecl);
this.emitComments(funcDecl, true);
var functionName = funcDecl.propertyName.text();
this.writeToOutput(classDecl.identifier.text());
if (!TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */)) {
this.writeToOutput(".prototype");
}
if (TypeScript.isQuoted(functionName) || funcDecl.propertyName.kind() !== 11 /* IdentifierName */) {
this.writeToOutput("[" + functionName + "] = ");
} else {
this.writeToOutput("." + functionName + " = ");
}
var pullDecl = this.semanticInfoChain.getDeclForAST(funcDecl);
this.pushDecl(pullDecl);
this.recordSourceMappingStart(funcDecl);
this.writeToOutput("function ");
this.emitParameterList(funcDecl.callSignature.parameterList);
var parameters = TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList);
this.emitFunctionBodyStatements(funcDecl.propertyName.text(), funcDecl, parameters, funcDecl.block, null);
this.recordSourceMappingEnd(funcDecl);
this.emitComments(funcDecl, false);
this.recordSourceMappingEnd(funcDecl);
this.popDecl(pullDecl);
this.writeLineToOutput(";");
};
Emitter.prototype.requiresExtendsBlock = function (moduleElements) {
for (var i = 0, n = moduleElements.childCount(); i < n; i++) {
var moduleElement = moduleElements.childAt(i);
if (moduleElement.kind() === 130 /* ModuleDeclaration */) {
var moduleAST = moduleElement;
if (!TypeScript.hasModifier(moduleAST.modifiers, 8 /* Ambient */) && this.requiresExtendsBlock(moduleAST.moduleElements)) {
return true;
}
} else if (moduleElement.kind() === 131 /* ClassDeclaration */) {
var classDeclaration = moduleElement;
if (!TypeScript.hasModifier(classDeclaration.modifiers, 8 /* Ambient */) && TypeScript.ASTHelpers.getExtendsHeritageClause(classDeclaration.heritageClauses) !== null) {
return true;
}
}
}
return false;
};
Emitter.prototype.emitPrologue = function (sourceUnit) {
if (!this.extendsPrologueEmitted) {
if (this.requiresExtendsBlock(sourceUnit.moduleElements)) {
this.extendsPrologueEmitted = true;
this.writeLineToOutput("var __extends = this.__extends || function (d, b) {");
this.writeLineToOutput(" for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];");
this.writeLineToOutput(" function __() { this.constructor = d; }");
this.writeLineToOutput(" __.prototype = b.prototype;");
this.writeLineToOutput(" d.prototype = new __();");
this.writeLineToOutput("};");
}
}
if (!this.globalThisCapturePrologueEmitted) {
if (this.shouldCaptureThis(sourceUnit)) {
this.globalThisCapturePrologueEmitted = true;
this.writeLineToOutput(this.captureThisStmtString);
}
}
};
Emitter.prototype.emitThis = function () {
if (!this.inWithBlock && this.inArrowFunction) {
this.writeToOutput("_this");
} else {
this.writeToOutput("this");
}
};
Emitter.prototype.emitBlockOrStatement = function (node) {
if (node.kind() === 146 /* Block */) {
this.emit(node);
} else {
this.writeLineToOutput("");
this.indenter.increaseIndent();
this.emitJavascript(node, true);
this.indenter.decreaseIndent();
}
};
Emitter.prototype.emitLiteralExpression = function (expression) {
switch (expression.kind()) {
case 32 /* NullKeyword */:
this.writeToOutputWithSourceMapRecord("null", expression);
break;
case 24 /* FalseKeyword */:
this.writeToOutputWithSourceMapRecord("false", expression);
break;
case 37 /* TrueKeyword */:
this.writeToOutputWithSourceMapRecord("true", expression);
break;
default:
throw TypeScript.Errors.abstract();
}
};
Emitter.prototype.emitThisExpression = function (expression) {
if (!this.inWithBlock && this.inArrowFunction) {
this.writeToOutputWithSourceMapRecord("_this", expression);
} else {
this.writeToOutputWithSourceMapRecord("this", expression);
}
};
Emitter.prototype.emitSuperExpression = function (expression) {
this.writeToOutputWithSourceMapRecord("_super.prototype", expression);
};
Emitter.prototype.emitParenthesizedExpression = function (parenthesizedExpression) {
if (parenthesizedExpression.expression.kind() === 220 /* CastExpression */ && parenthesizedExpression.openParenTrailingComments === null) {
this.emit(parenthesizedExpression.expression);
} else {
this.recordSourceMappingStart(parenthesizedExpression);
this.writeToOutput("(");
this.emitCommentsArray(parenthesizedExpression.openParenTrailingComments, false);
this.emit(parenthesizedExpression.expression);
this.writeToOutput(")");
this.recordSourceMappingEnd(parenthesizedExpression);
}
};
Emitter.prototype.emitCastExpression = function (expression) {
this.emit(expression.expression);
};
Emitter.prototype.emitPrefixUnaryExpression = function (expression) {
var nodeType = expression.kind();
this.recordSourceMappingStart(expression);
switch (nodeType) {
case 167 /* LogicalNotExpression */:
this.writeToOutput("!");
this.emit(expression.operand);
break;
case 166 /* BitwiseNotExpression */:
this.writeToOutput("~");
this.emit(expression.operand);
break;
case 165 /* NegateExpression */:
this.writeToOutput("-");
if (expression.operand.kind() === 165 /* NegateExpression */ || expression.operand.kind() === 169 /* PreDecrementExpression */) {
this.writeToOutput(" ");
}
this.emit(expression.operand);
break;
case 164 /* PlusExpression */:
this.writeToOutput("+");
if (expression.operand.kind() === 164 /* PlusExpression */ || expression.operand.kind() === 168 /* PreIncrementExpression */) {
this.writeToOutput(" ");
}
this.emit(expression.operand);
break;
case 168 /* PreIncrementExpression */:
this.writeToOutput("++");
this.emit(expression.operand);
break;
case 169 /* PreDecrementExpression */:
this.writeToOutput("--");
this.emit(expression.operand);
break;
default:
throw TypeScript.Errors.abstract();
}
this.recordSourceMappingEnd(expression);
};
Emitter.prototype.emitPostfixUnaryExpression = function (expression) {
var nodeType = expression.kind();
this.recordSourceMappingStart(expression);
switch (nodeType) {
case 210 /* PostIncrementExpression */:
this.emit(expression.operand);
this.writeToOutput("++");
break;
case 211 /* PostDecrementExpression */:
this.emit(expression.operand);
this.writeToOutput("--");
break;
default:
throw TypeScript.Errors.abstract();
}
this.recordSourceMappingEnd(expression);
};
Emitter.prototype.emitTypeOfExpression = function (expression) {
this.recordSourceMappingStart(expression);
this.writeToOutput("typeof ");
this.emit(expression.expression);
this.recordSourceMappingEnd(expression);
};
Emitter.prototype.emitDeleteExpression = function (expression) {
this.recordSourceMappingStart(expression);
this.writeToOutput("delete ");
this.emit(expression.expression);
this.recordSourceMappingEnd(expression);
};
Emitter.prototype.emitVoidExpression = function (expression) {
this.recordSourceMappingStart(expression);
this.writeToOutput("void ");
this.emit(expression.expression);
this.recordSourceMappingEnd(expression);
};
Emitter.prototype.canEmitDottedNameMemberAccessExpression = function (expression) {
var memberExpressionNodeType = expression.expression.kind();
if (memberExpressionNodeType === 11 /* IdentifierName */ || memberExpressionNodeType == 212 /* MemberAccessExpression */) {
var memberAccessSymbol = this.getSymbolForEmit(expression).symbol;
var memberAccessExpressionSymbol = this.getSymbolForEmit(expression.expression).symbol;
if (memberAccessSymbol && memberAccessExpressionSymbol && !this.semanticInfoChain.getAliasSymbolForAST(expression.expression) && (TypeScript.PullHelpers.symbolIsModule(memberAccessExpressionSymbol) || memberAccessExpressionSymbol.kind === 64 /* Enum */ || memberAccessExpressionSymbol.anyDeclHasFlag(32768 /* InitializedModule */ | 4096 /* Enum */))) {
var memberAccessSymbolKind = memberAccessSymbol.kind;
if (memberAccessSymbolKind === 4096 /* Property */ || memberAccessSymbolKind === 67108864 /* EnumMember */ || (memberAccessSymbol.anyDeclHasFlag(1 /* Exported */) && memberAccessSymbolKind === 512 /* Variable */ && !memberAccessSymbol.anyDeclHasFlag(32768 /* InitializedModule */ | 4096 /* Enum */)) || ((memberAccessSymbol.anyDeclHasFlag(1 /* Exported */) && !this.symbolIsUsedInItsEnclosingContainer(memberAccessSymbol)))) {
if (memberExpressionNodeType === 212 /* MemberAccessExpression */) {
return this.canEmitDottedNameMemberAccessExpression(expression.expression);
}
return true;
}
}
}
return false;
};
Emitter.prototype.emitDottedNameMemberAccessExpressionWorker = function (expression, potentialPath, startingIndex, lastIndex) {
this.recordSourceMappingStart(expression);
if (expression.expression.kind() === 212 /* MemberAccessExpression */) {
this.emitDottedNameMemberAccessExpressionRecurse(expression.expression, potentialPath, startingIndex, lastIndex - 1);
} else {
this.emitComments(expression.expression, true);
this.recordSourceMappingStart(expression.expression);
this.emitDottedNameFromDeclPath(potentialPath, startingIndex, lastIndex - 2);
this.writeToOutput(expression.expression.text());
this.recordSourceMappingEnd(expression.expression);
this.emitComments(expression.expression, false);
}
this.writeToOutput(".");
this.emitName(expression.name, false);
this.recordSourceMappingEnd(expression);
};
Emitter.prototype.emitDottedNameMemberAccessExpressionRecurse = function (expression, potentialPath, startingIndex, lastIndex) {
this.emitComments(expression, true);
if (lastIndex - startingIndex < 1) {
startingIndex = lastIndex - 1;
TypeScript.Debug.assert(startingIndex >= 0);
}
this.emitDottedNameMemberAccessExpressionWorker(expression, potentialPath, startingIndex, lastIndex);
this.emitComments(expression, false);
};
Emitter.prototype.emitDottedNameMemberAccessExpression = function (expression) {
var memberAccessSymbol = this.getSymbolForEmit(expression).symbol;
var potentialDeclInfo = this.getPotentialDeclPathInfoForEmit(memberAccessSymbol);
this.emitDottedNameMemberAccessExpressionWorker(expression, potentialDeclInfo.potentialPath, potentialDeclInfo.startingIndex, potentialDeclInfo.potentialPath.length);
};
Emitter.prototype.emitMemberAccessExpression = function (expression) {
if (!this.tryEmitConstant(expression)) {
if (this.canEmitDottedNameMemberAccessExpression(expression)) {
this.emitDottedNameMemberAccessExpression(expression);
} else {
this.recordSourceMappingStart(expression);
this.emit(expression.expression);
this.writeToOutput(".");
this.emitName(expression.name, false);
this.recordSourceMappingEnd(expression);
}
}
};
Emitter.prototype.emitQualifiedName = function (name) {
this.recordSourceMappingStart(name);
this.emit(name.left);
this.writeToOutput(".");
this.emitName(name.right, false);
this.recordSourceMappingEnd(name);
};
Emitter.prototype.emitBinaryExpression = function (expression) {
this.recordSourceMappingStart(expression);
switch (expression.kind()) {
case 173 /* CommaExpression */:
this.emit(expression.left);
this.writeToOutput(", ");
this.emit(expression.right);
break;
default: {
this.emit(expression.left);
var binOp = TypeScript.SyntaxFacts.getText(TypeScript.SyntaxFacts.getOperatorTokenFromBinaryExpression(expression.kind()));
if (binOp === "instanceof") {
this.writeToOutput(" instanceof ");
} else if (binOp === "in") {
this.writeToOutput(" in ");
} else {
this.writeToOutput(" " + binOp + " ");
}
this.emit(expression.right);
}
}
this.recordSourceMappingEnd(expression);
};
Emitter.prototype.emitSimplePropertyAssignment = function (property) {
this.recordSourceMappingStart(property);
this.emit(property.propertyName);
this.writeToOutput(": ");
this.emit(property.expression);
this.recordSourceMappingEnd(property);
};
Emitter.prototype.emitFunctionPropertyAssignment = function (funcProp) {
this.recordSourceMappingStart(funcProp);
this.emit(funcProp.propertyName);
this.writeToOutput(": ");
var pullFunctionDecl = this.semanticInfoChain.getDeclForAST(funcProp);
var savedInArrowFunction = this.inArrowFunction;
this.inArrowFunction = false;
var temp = this.setContainer(5 /* Function */);
var funcName = funcProp.propertyName;
var pullDecl = this.semanticInfoChain.getDeclForAST(funcProp);
this.pushDecl(pullDecl);
this.recordSourceMappingStart(funcProp);
this.writeToOutput("function ");
this.writeToOutput("(");
var parameters = TypeScript.ASTHelpers.parametersFromParameterList(funcProp.callSignature.parameterList);
this.emitFunctionParameters(parameters);
this.writeToOutput(")");
this.emitFunctionBodyStatements(funcProp.propertyName.text(), funcProp, parameters, funcProp.block, null);
this.recordSourceMappingEnd(funcProp);
this.recordSourceMappingEnd(funcProp);
this.emitComments(funcProp, false);
this.popDecl(pullDecl);
this.setContainer(temp);
this.inArrowFunction = savedInArrowFunction;
};
Emitter.prototype.emitConditionalExpression = function (expression) {
this.emit(expression.condition);
this.writeToOutput(" ? ");
this.emit(expression.whenTrue);
this.writeToOutput(" : ");
this.emit(expression.whenFalse);
};
Emitter.prototype.emitThrowStatement = function (statement) {
this.recordSourceMappingStart(statement);
this.writeToOutput("throw ");
this.emit(statement.expression);
this.recordSourceMappingEnd(statement);
this.writeToOutput(";");
};
Emitter.prototype.emitExpressionStatement = function (statement) {
var isArrowExpression = statement.expression.kind() === 219 /* SimpleArrowFunctionExpression */ || statement.expression.kind() === 218 /* ParenthesizedArrowFunctionExpression */;
this.recordSourceMappingStart(statement);
if (isArrowExpression) {
this.writeToOutput("(");
}
this.emit(statement.expression);
if (isArrowExpression) {
this.writeToOutput(")");
}
this.recordSourceMappingEnd(statement);
this.writeToOutput(";");
};
Emitter.prototype.emitLabeledStatement = function (statement) {
this.writeToOutputWithSourceMapRecord(statement.identifier.text(), statement.identifier);
this.writeLineToOutput(":");
this.emitJavascript(statement.statement, true);
};
Emitter.prototype.emitBlock = function (block) {
this.recordSourceMappingStart(block);
this.writeLineToOutput(" {");
this.indenter.increaseIndent();
if (block.statements) {
this.emitList(block.statements);
}
this.emitCommentsArray(block.closeBraceLeadingComments, false);
this.indenter.decreaseIndent();
this.emitIndent();
this.writeToOutput("}");
this.recordSourceMappingEnd(block);
};
Emitter.prototype.emitBreakStatement = function (jump) {
this.recordSourceMappingStart(jump);
this.writeToOutput("break");
if (jump.identifier) {
this.writeToOutput(" " + jump.identifier.text());
}
this.recordSourceMappingEnd(jump);
this.writeToOutput(";");
};
Emitter.prototype.emitContinueStatement = function (jump) {
this.recordSourceMappingStart(jump);
this.writeToOutput("continue");
if (jump.identifier) {
this.writeToOutput(" " + jump.identifier.text());
}
this.recordSourceMappingEnd(jump);
this.writeToOutput(";");
};
Emitter.prototype.emitWhileStatement = function (statement) {
this.recordSourceMappingStart(statement);
this.writeToOutput("while (");
this.emit(statement.condition);
this.writeToOutput(")");
this.emitBlockOrStatement(statement.statement);
this.recordSourceMappingEnd(statement);
};
Emitter.prototype.emitDoStatement = function (statement) {
this.recordSourceMappingStart(statement);
this.writeToOutput("do");
this.emitBlockOrStatement(statement.statement);
this.writeToOutputWithSourceMapRecord(" while", statement.whileKeyword);
this.writeToOutput('(');
this.emit(statement.condition);
this.writeToOutput(")");
this.recordSourceMappingEnd(statement);
this.writeToOutput(";");
};
Emitter.prototype.emitIfStatement = function (statement) {
this.recordSourceMappingStart(statement);
this.writeToOutput("if (");
this.emit(statement.condition);
this.writeToOutput(")");
this.emitBlockOrStatement(statement.statement);
if (statement.elseClause) {
if (statement.statement.kind() !== 146 /* Block */) {
this.writeLineToOutput("");
this.emitIndent();
} else {
this.writeToOutput(" ");
}
this.emit(statement.elseClause);
}
this.recordSourceMappingEnd(statement);
};
Emitter.prototype.emitElseClause = function (elseClause) {
if (elseClause.statement.kind() === 147 /* IfStatement */) {
this.writeToOutput("else ");
this.emit(elseClause.statement);
} else {
this.writeToOutput("else");
this.emitBlockOrStatement(elseClause.statement);
}
};
Emitter.prototype.emitReturnStatement = function (statement) {
this.recordSourceMappingStart(statement);
if (statement.expression) {
this.writeToOutput("return ");
this.emit(statement.expression);
} else {
this.writeToOutput("return");
}
this.recordSourceMappingEnd(statement);
this.writeToOutput(";");
};
Emitter.prototype.emitForInStatement = function (statement) {
this.recordSourceMappingStart(statement);
this.writeToOutput("for (");
if (statement.left) {
this.emit(statement.left);
} else {
this.emit(statement.variableDeclaration);
}
this.writeToOutput(" in ");
this.emit(statement.expression);
this.writeToOutput(")");
this.emitBlockOrStatement(statement.statement);
this.recordSourceMappingEnd(statement);
};
Emitter.prototype.emitForStatement = function (statement) {
this.recordSourceMappingStart(statement);
this.writeToOutput("for (");
if (statement.variableDeclaration) {
this.emit(statement.variableDeclaration);
} else if (statement.initializer) {
this.emit(statement.initializer);
}
this.writeToOutput("; ");
this.emitJavascript(statement.condition, false);
this.writeToOutput(";");
if (statement.incrementor) {
this.writeToOutput(" ");
this.emitJavascript(statement.incrementor, false);
}
this.writeToOutput(")");
this.emitBlockOrStatement(statement.statement);
this.recordSourceMappingEnd(statement);
};
Emitter.prototype.emitWithStatement = function (statement) {
this.recordSourceMappingStart(statement);
this.writeToOutput("with (");
if (statement.condition) {
this.emit(statement.condition);
}
this.writeToOutput(")");
var prevInWithBlock = this.inWithBlock;
this.inWithBlock = true;
this.emitBlockOrStatement(statement.statement);
this.inWithBlock = prevInWithBlock;
this.recordSourceMappingEnd(statement);
};
Emitter.prototype.emitSwitchStatement = function (statement) {
this.recordSourceMappingStart(statement);
this.writeToOutput("switch (");
this.emit(statement.expression);
this.recordSourceMappingStart(statement.closeParenToken);
this.writeToOutput(")");
this.recordSourceMappingEnd(statement.closeParenToken);
this.writeLineToOutput(" {");
this.indenter.increaseIndent();
this.emitList(statement.switchClauses, false);
this.indenter.decreaseIndent();
this.emitIndent();
this.writeToOutput("}");
this.recordSourceMappingEnd(statement);
};
Emitter.prototype.emitCaseSwitchClause = function (clause) {
this.recordSourceMappingStart(clause);
this.writeToOutput("case ");
this.emit(clause.expression);
this.writeToOutput(":");
this.emitSwitchClauseBody(clause.statements);
this.recordSourceMappingEnd(clause);
};
Emitter.prototype.emitSwitchClauseBody = function (body) {
if (body.childCount() === 1 && body.childAt(0).kind() === 146 /* Block */) {
this.emit(body.childAt(0));
this.writeLineToOutput("");
} else {
this.writeLineToOutput("");
this.indenter.increaseIndent();
this.emit(body);
this.indenter.decreaseIndent();
}
};
Emitter.prototype.emitDefaultSwitchClause = function (clause) {
this.recordSourceMappingStart(clause);
this.writeToOutput("default:");
this.emitSwitchClauseBody(clause.statements);
this.recordSourceMappingEnd(clause);
};
Emitter.prototype.emitTryStatement = function (statement) {
this.recordSourceMappingStart(statement);
this.writeToOutput("try ");
this.emit(statement.block);
this.emitJavascript(statement.catchClause, false);
if (statement.finallyClause) {
this.emit(statement.finallyClause);
}
this.recordSourceMappingEnd(statement);
};
Emitter.prototype.emitCatchClause = function (clause) {
this.writeToOutput(" ");
this.recordSourceMappingStart(clause);
this.writeToOutput("catch (");
this.emit(clause.identifier);
this.writeToOutput(")");
this.emit(clause.block);
this.recordSourceMappingEnd(clause);
};
Emitter.prototype.emitFinallyClause = function (clause) {
this.writeToOutput(" finally");
this.emit(clause.block);
};
Emitter.prototype.emitDebuggerStatement = function (statement) {
this.writeToOutputWithSourceMapRecord("debugger", statement);
this.writeToOutput(";");
};
Emitter.prototype.emitNumericLiteral = function (literal) {
this.writeToOutputWithSourceMapRecord(literal.text(), literal);
};
Emitter.prototype.emitRegularExpressionLiteral = function (literal) {
this.writeToOutputWithSourceMapRecord(literal.text(), literal);
};
Emitter.prototype.emitStringLiteral = function (literal) {
this.writeToOutputWithSourceMapRecord(literal.text(), literal);
};
Emitter.prototype.emitEqualsValueClause = function (clause) {
this.writeToOutput(" = ");
this.emit(clause.value);
};
Emitter.prototype.emitParameter = function (parameter) {
this.writeToOutputWithSourceMapRecord(parameter.identifier.text(), parameter);
};
Emitter.prototype.emitConstructorDeclaration = function (declaration) {
if (declaration.block) {
this.emitConstructor(declaration);
} else {
this.emitComments(declaration, true, true);
}
};
Emitter.prototype.shouldEmitFunctionDeclaration = function (declaration) {
return declaration.preComments() !== null || (!TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */) && declaration.block !== null);
};
Emitter.prototype.emitFunctionDeclaration = function (declaration) {
if (!TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */) && declaration.block !== null) {
this.emitFunction(declaration);
} else {
this.emitComments(declaration, true, true);
}
};
Emitter.prototype.emitSourceUnit = function (sourceUnit) {
if (!this.document.isDeclareFile()) {
var pullDecl = this.semanticInfoChain.getDeclForAST(sourceUnit);
this.pushDecl(pullDecl);
this.emitScriptElements(sourceUnit);
this.popDecl(pullDecl);
this.emitCommentsArray(sourceUnit.endOfFileTokenLeadingComments, false);
}
};
Emitter.prototype.shouldEmitEnumDeclaration = function (declaration) {
return declaration.preComments() !== null || !TypeScript.ASTHelpers.enumIsElided(declaration);
};
Emitter.prototype.emitEnumDeclaration = function (declaration) {
if (!TypeScript.ASTHelpers.enumIsElided(declaration)) {
this.emitComments(declaration, true);
this.emitEnum(declaration);
this.emitComments(declaration, false);
} else {
this.emitComments(declaration, true, true);
}
};
Emitter.prototype.shouldEmitModuleDeclaration = function (declaration) {
return declaration.preComments() !== null || !TypeScript.ASTHelpers.moduleIsElided(declaration);
};
Emitter.prototype.emitModuleDeclaration = function (declaration) {
if (!TypeScript.ASTHelpers.moduleIsElided(declaration)) {
this.emitModuleDeclarationWorker(declaration);
} else {
this.emitComments(declaration, true, true);
}
};
Emitter.prototype.shouldEmitClassDeclaration = function (declaration) {
return declaration.preComments() !== null || !TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */);
};
Emitter.prototype.emitClassDeclaration = function (declaration) {
if (!TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */)) {
this.emitClass(declaration);
} else {
this.emitComments(declaration, true, true);
}
};
Emitter.prototype.shouldEmitInterfaceDeclaration = function (declaration) {
return declaration.preComments() !== null;
};
Emitter.prototype.emitInterfaceDeclaration = function (declaration) {
this.emitComments(declaration, true, true);
};
Emitter.prototype.firstVariableDeclarator = function (statement) {
return statement.declaration.declarators.nonSeparatorAt(0);
};
Emitter.prototype.isNotAmbientOrHasInitializer = function (variableStatement) {
return !TypeScript.hasModifier(variableStatement.modifiers, 8 /* Ambient */) || this.firstVariableDeclarator(variableStatement).equalsValueClause !== null;
};
Emitter.prototype.shouldEmitVariableStatement = function (statement) {
return statement.preComments() !== null || this.isNotAmbientOrHasInitializer(statement);
};
Emitter.prototype.emitVariableStatement = function (statement) {
if (this.isNotAmbientOrHasInitializer(statement)) {
this.emitComments(statement, true);
this.emit(statement.declaration);
this.writeToOutput(";");
this.emitComments(statement, false);
} else {
this.emitComments(statement, true, true);
}
};
Emitter.prototype.emitGenericType = function (type) {
this.emit(type.name);
};
Emitter.prototype.shouldEmit = function (ast) {
if (!ast) {
return false;
}
switch (ast.kind()) {
case 133 /* ImportDeclaration */:
return this.shouldEmitImportDeclaration(ast);
case 131 /* ClassDeclaration */:
return this.shouldEmitClassDeclaration(ast);
case 128 /* InterfaceDeclaration */:
return this.shouldEmitInterfaceDeclaration(ast);
case 129 /* FunctionDeclaration */:
return this.shouldEmitFunctionDeclaration(ast);
case 130 /* ModuleDeclaration */:
return this.shouldEmitModuleDeclaration(ast);
case 148 /* VariableStatement */:
return this.shouldEmitVariableStatement(ast);
case 223 /* OmittedExpression */:
return false;
case 132 /* EnumDeclaration */:
return this.shouldEmitEnumDeclaration(ast);
}
return true;
};
Emitter.prototype.emit = function (ast) {
if (!ast) {
return;
}
switch (ast.kind()) {
case 2 /* SeparatedList */:
return this.emitSeparatedList(ast);
case 1 /* List */:
return this.emitList(ast);
case 120 /* SourceUnit */:
return this.emitSourceUnit(ast);
case 133 /* ImportDeclaration */:
return this.emitImportDeclaration(ast);
case 134 /* ExportAssignment */:
return this.setExportAssignment(ast);
case 131 /* ClassDeclaration */:
return this.emitClassDeclaration(ast);
case 128 /* InterfaceDeclaration */:
return this.emitInterfaceDeclaration(ast);
case 11 /* IdentifierName */:
return this.emitName(ast, true);
case 225 /* VariableDeclarator */:
return this.emitVariableDeclarator(ast);
case 219 /* SimpleArrowFunctionExpression */:
return this.emitSimpleArrowFunctionExpression(ast);
case 218 /* ParenthesizedArrowFunctionExpression */:
return this.emitParenthesizedArrowFunctionExpression(ast);
case 129 /* FunctionDeclaration */:
return this.emitFunctionDeclaration(ast);
case 130 /* ModuleDeclaration */:
return this.emitModuleDeclaration(ast);
case 224 /* VariableDeclaration */:
return this.emitVariableDeclaration(ast);
case 126 /* GenericType */:
return this.emitGenericType(ast);
case 137 /* ConstructorDeclaration */:
return this.emitConstructorDeclaration(ast);
case 132 /* EnumDeclaration */:
return this.emitEnumDeclaration(ast);
case 243 /* EnumElement */:
return this.emitEnumElement(ast);
case 222 /* FunctionExpression */:
return this.emitFunctionExpression(ast);
case 148 /* VariableStatement */:
return this.emitVariableStatement(ast);
}
this.emitComments(ast, true);
this.emitWorker(ast);
this.emitComments(ast, false);
};
Emitter.prototype.emitWorker = function (ast) {
if (!ast) {
return;
}
switch (ast.kind()) {
case 13 /* NumericLiteral */:
return this.emitNumericLiteral(ast);
case 12 /* RegularExpressionLiteral */:
return this.emitRegularExpressionLiteral(ast);
case 14 /* StringLiteral */:
return this.emitStringLiteral(ast);
case 24 /* FalseKeyword */:
case 32 /* NullKeyword */:
case 37 /* TrueKeyword */:
return this.emitLiteralExpression(ast);
case 35 /* ThisKeyword */:
return this.emitThisExpression(ast);
case 50 /* SuperKeyword */:
return this.emitSuperExpression(ast);
case 217 /* ParenthesizedExpression */:
return this.emitParenthesizedExpression(ast);
case 214 /* ArrayLiteralExpression */:
return this.emitArrayLiteralExpression(ast);
case 211 /* PostDecrementExpression */:
case 210 /* PostIncrementExpression */:
return this.emitPostfixUnaryExpression(ast);
case 167 /* LogicalNotExpression */:
case 166 /* BitwiseNotExpression */:
case 165 /* NegateExpression */:
case 164 /* PlusExpression */:
case 168 /* PreIncrementExpression */:
case 169 /* PreDecrementExpression */:
return this.emitPrefixUnaryExpression(ast);
case 213 /* InvocationExpression */:
return this.emitInvocationExpression(ast);
case 221 /* ElementAccessExpression */:
return this.emitElementAccessExpression(ast);
case 212 /* MemberAccessExpression */:
return this.emitMemberAccessExpression(ast);
case 121 /* QualifiedName */:
return this.emitQualifiedName(ast);
case 173 /* CommaExpression */:
case 174 /* AssignmentExpression */:
case 175 /* AddAssignmentExpression */:
case 176 /* SubtractAssignmentExpression */:
case 177 /* MultiplyAssignmentExpression */:
case 178 /* DivideAssignmentExpression */:
case 179 /* ModuloAssignmentExpression */:
case 180 /* AndAssignmentExpression */:
case 181 /* ExclusiveOrAssignmentExpression */:
case 182 /* OrAssignmentExpression */:
case 183 /* LeftShiftAssignmentExpression */:
case 184 /* SignedRightShiftAssignmentExpression */:
case 185 /* UnsignedRightShiftAssignmentExpression */:
case 187 /* LogicalOrExpression */:
case 188 /* LogicalAndExpression */:
case 189 /* BitwiseOrExpression */:
case 190 /* BitwiseExclusiveOrExpression */:
case 191 /* BitwiseAndExpression */:
case 192 /* EqualsWithTypeConversionExpression */:
case 193 /* NotEqualsWithTypeConversionExpression */:
case 194 /* EqualsExpression */:
case 195 /* NotEqualsExpression */:
case 196 /* LessThanExpression */:
case 197 /* GreaterThanExpression */:
case 198 /* LessThanOrEqualExpression */:
case 199 /* GreaterThanOrEqualExpression */:
case 200 /* InstanceOfExpression */:
case 201 /* InExpression */:
case 202 /* LeftShiftExpression */:
case 203 /* SignedRightShiftExpression */:
case 204 /* UnsignedRightShiftExpression */:
case 205 /* MultiplyExpression */:
case 206 /* DivideExpression */:
case 207 /* ModuloExpression */:
case 208 /* AddExpression */:
case 209 /* SubtractExpression */:
return this.emitBinaryExpression(ast);
case 186 /* ConditionalExpression */:
return this.emitConditionalExpression(ast);
case 232 /* EqualsValueClause */:
return this.emitEqualsValueClause(ast);
case 242 /* Parameter */:
return this.emitParameter(ast);
case 146 /* Block */:
return this.emitBlock(ast);
case 235 /* ElseClause */:
return this.emitElseClause(ast);
case 147 /* IfStatement */:
return this.emitIfStatement(ast);
case 149 /* ExpressionStatement */:
return this.emitExpressionStatement(ast);
case 139 /* GetAccessor */:
return this.emitGetAccessor(ast);
case 140 /* SetAccessor */:
return this.emitSetAccessor(ast);
case 157 /* ThrowStatement */:
return this.emitThrowStatement(ast);
case 150 /* ReturnStatement */:
return this.emitReturnStatement(ast);
case 216 /* ObjectCreationExpression */:
return this.emitObjectCreationExpression(ast);
case 151 /* SwitchStatement */:
return this.emitSwitchStatement(ast);
case 233 /* CaseSwitchClause */:
return this.emitCaseSwitchClause(ast);
case 234 /* DefaultSwitchClause */:
return this.emitDefaultSwitchClause(ast);
case 152 /* BreakStatement */:
return this.emitBreakStatement(ast);
case 153 /* ContinueStatement */:
return this.emitContinueStatement(ast);
case 154 /* ForStatement */:
return this.emitForStatement(ast);
case 155 /* ForInStatement */:
return this.emitForInStatement(ast);
case 158 /* WhileStatement */:
return this.emitWhileStatement(ast);
case 163 /* WithStatement */:
return this.emitWithStatement(ast);
case 220 /* CastExpression */:
return this.emitCastExpression(ast);
case 215 /* ObjectLiteralExpression */:
return this.emitObjectLiteralExpression(ast);
case 240 /* SimplePropertyAssignment */:
return this.emitSimplePropertyAssignment(ast);
case 241 /* FunctionPropertyAssignment */:
return this.emitFunctionPropertyAssignment(ast);
case 156 /* EmptyStatement */:
return this.writeToOutputWithSourceMapRecord(";", ast);
case 159 /* TryStatement */:
return this.emitTryStatement(ast);
case 236 /* CatchClause */:
return this.emitCatchClause(ast);
case 237 /* FinallyClause */:
return this.emitFinallyClause(ast);
case 160 /* LabeledStatement */:
return this.emitLabeledStatement(ast);
case 161 /* DoStatement */:
return this.emitDoStatement(ast);
case 171 /* TypeOfExpression */:
return this.emitTypeOfExpression(ast);
case 170 /* DeleteExpression */:
return this.emitDeleteExpression(ast);
case 172 /* VoidExpression */:
return this.emitVoidExpression(ast);
case 162 /* DebuggerStatement */:
return this.emitDebuggerStatement(ast);
}
};
return Emitter;
})();
TypeScript.Emitter = Emitter;
function getLastConstructor(classDecl) {
return classDecl.classElements.lastOrDefault(function (e) {
return e.kind() === 137 /* ConstructorDeclaration */;
});
}
TypeScript.getLastConstructor = getLastConstructor;
function getTrimmedTextLines(comment) {
if (comment.kind() === 6 /* MultiLineCommentTrivia */) {
return comment.fullText().split("\n").map(function (s) {
return s.trim();
});
} else {
return [comment.fullText().trim()];
}
}
TypeScript.getTrimmedTextLines = getTrimmedTextLines;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var MemberName = (function () {
function MemberName() {
this.prefix = "";
this.suffix = "";
}
MemberName.prototype.isString = function () {
return false;
};
MemberName.prototype.isArray = function () {
return false;
};
MemberName.prototype.isMarker = function () {
return !this.isString() && !this.isArray();
};
MemberName.prototype.toString = function () {
return MemberName.memberNameToString(this);
};
MemberName.memberNameToString = function (memberName, markerInfo, markerBaseLength) {
if (typeof markerBaseLength === "undefined") { markerBaseLength = 0; }
var result = memberName.prefix;
if (memberName.isString()) {
result += memberName.text;
} else if (memberName.isArray()) {
var ar = memberName;
for (var index = 0; index < ar.entries.length; index++) {
if (ar.entries[index].isMarker()) {
if (markerInfo) {
markerInfo.push(markerBaseLength + result.length);
}
continue;
}
result += MemberName.memberNameToString(ar.entries[index], markerInfo, markerBaseLength + result.length);
result += ar.delim;
}
}
result += memberName.suffix;
return result;
};
MemberName.create = function (arg1, arg2, arg3) {
if (typeof arg1 === "string") {
return new MemberNameString(arg1);
} else {
var result = new MemberNameArray();
if (arg2)
result.prefix = arg2;
if (arg3)
result.suffix = arg3;
result.entries.push(arg1);
return result;
}
};
return MemberName;
})();
TypeScript.MemberName = MemberName;
var MemberNameString = (function (_super) {
__extends(MemberNameString, _super);
function MemberNameString(text) {
_super.call(this);
this.text = text;
}
MemberNameString.prototype.isString = function () {
return true;
};
return MemberNameString;
})(MemberName);
TypeScript.MemberNameString = MemberNameString;
var MemberNameArray = (function (_super) {
__extends(MemberNameArray, _super);
function MemberNameArray() {
_super.call(this);
this.delim = "";
this.entries = [];
}
MemberNameArray.prototype.isArray = function () {
return true;
};
MemberNameArray.prototype.add = function (entry) {
this.entries.push(entry);
};
MemberNameArray.prototype.addAll = function (entries) {
for (var i = 0; i < entries.length; i++) {
this.entries.push(entries[i]);
}
};
return MemberNameArray;
})(MemberName);
TypeScript.MemberNameArray = MemberNameArray;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
function stripStartAndEndQuotes(str) {
var firstCharCode = str && str.charCodeAt(0);
if (str && str.length >= 2 && firstCharCode === str.charCodeAt(str.length - 1) && (firstCharCode === 39 /* singleQuote */ || firstCharCode === 34 /* doubleQuote */)) {
return str.substring(1, str.length - 1);
}
return str;
}
TypeScript.stripStartAndEndQuotes = stripStartAndEndQuotes;
function isSingleQuoted(str) {
return str && str.length >= 2 && str.charCodeAt(0) === str.charCodeAt(str.length - 1) && str.charCodeAt(0) === 39 /* singleQuote */;
}
TypeScript.isSingleQuoted = isSingleQuoted;
function isDoubleQuoted(str) {
return str && str.length >= 2 && str.charCodeAt(0) === str.charCodeAt(str.length - 1) && str.charCodeAt(0) === 34 /* doubleQuote */;
}
TypeScript.isDoubleQuoted = isDoubleQuoted;
function isQuoted(str) {
return isDoubleQuoted(str) || isSingleQuoted(str);
}
TypeScript.isQuoted = isQuoted;
function quoteStr(str) {
return "\"" + str + "\"";
}
TypeScript.quoteStr = quoteStr;
var switchToForwardSlashesRegEx = /\\/g;
function switchToForwardSlashes(path) {
return path.replace(switchToForwardSlashesRegEx, "/");
}
TypeScript.switchToForwardSlashes = switchToForwardSlashes;
function trimModName(modName) {
if (modName.length > 5 && modName.substring(modName.length - 5, modName.length) === ".d.ts") {
return modName.substring(0, modName.length - 5);
}
if (modName.length > 3 && modName.substring(modName.length - 3, modName.length) === ".ts") {
return modName.substring(0, modName.length - 3);
}
if (modName.length > 3 && modName.substring(modName.length - 3, modName.length) === ".js") {
return modName.substring(0, modName.length - 3);
}
return modName;
}
TypeScript.trimModName = trimModName;
function getDeclareFilePath(fname) {
return isTSFile(fname) ? changePathToDTS(fname) : changePathToDTS(fname);
}
TypeScript.getDeclareFilePath = getDeclareFilePath;
function isFileOfExtension(fname, ext) {
var invariantFname = fname.toLocaleUpperCase();
var invariantExt = ext.toLocaleUpperCase();
var extLength = invariantExt.length;
return invariantFname.length > extLength && invariantFname.substring(invariantFname.length - extLength, invariantFname.length) === invariantExt;
}
function isTSFile(fname) {
return isFileOfExtension(fname, ".ts");
}
TypeScript.isTSFile = isTSFile;
function isDTSFile(fname) {
return isFileOfExtension(fname, ".d.ts");
}
TypeScript.isDTSFile = isDTSFile;
function getPrettyName(modPath, quote, treatAsFileName) {
if (typeof quote === "undefined") { quote = true; }
if (typeof treatAsFileName === "undefined") { treatAsFileName = false; }
var modName = treatAsFileName ? switchToForwardSlashes(modPath) : trimModName(stripStartAndEndQuotes(modPath));
var components = this.getPathComponents(modName);
return components.length ? (quote ? quoteStr(components[components.length - 1]) : components[components.length - 1]) : modPath;
}
TypeScript.getPrettyName = getPrettyName;
function getPathComponents(path) {
return path.split("/");
}
TypeScript.getPathComponents = getPathComponents;
function getRelativePathToFixedPath(fixedModFilePath, absoluteModPath, isAbsoultePathURL) {
if (typeof isAbsoultePathURL === "undefined") { isAbsoultePathURL = true; }
absoluteModPath = switchToForwardSlashes(absoluteModPath);
var modComponents = this.getPathComponents(absoluteModPath);
var fixedModComponents = this.getPathComponents(fixedModFilePath);
var joinStartIndex = 0;
for (; joinStartIndex < modComponents.length && joinStartIndex < fixedModComponents.length; joinStartIndex++) {
if (fixedModComponents[joinStartIndex] !== modComponents[joinStartIndex]) {
break;
}
}
if (joinStartIndex !== 0) {
var relativePath = "";
var relativePathComponents = modComponents.slice(joinStartIndex, modComponents.length);
for (; joinStartIndex < fixedModComponents.length; joinStartIndex++) {
if (fixedModComponents[joinStartIndex] !== "") {
relativePath = relativePath + "../";
}
}
return relativePath + relativePathComponents.join("/");
}
if (isAbsoultePathURL && absoluteModPath.indexOf("://") === -1) {
absoluteModPath = "file:///" + absoluteModPath;
}
return absoluteModPath;
}
TypeScript.getRelativePathToFixedPath = getRelativePathToFixedPath;
function changePathToDTS(modPath) {
return trimModName(stripStartAndEndQuotes(modPath)) + ".d.ts";
}
TypeScript.changePathToDTS = changePathToDTS;
function isRelative(path) {
return path.length > 0 && path.charAt(0) === ".";
}
TypeScript.isRelative = isRelative;
function isRooted(path) {
return path.length > 0 && (path.charAt(0) === "\\" || path.charAt(0) === "/" || (path.indexOf(":\\") !== -1) || (path.indexOf(":/") !== -1));
}
TypeScript.isRooted = isRooted;
function getRootFilePath(outFname) {
if (outFname === "") {
return outFname;
} else {
var isPath = outFname.indexOf("/") !== -1;
return isPath ? filePath(outFname) : "";
}
}
TypeScript.getRootFilePath = getRootFilePath;
function filePathComponents(fullPath) {
fullPath = switchToForwardSlashes(fullPath);
var components = getPathComponents(fullPath);
return components.slice(0, components.length - 1);
}
TypeScript.filePathComponents = filePathComponents;
function filePath(fullPath) {
var path = filePathComponents(fullPath);
return path.join("/") + "/";
}
TypeScript.filePath = filePath;
function convertToDirectoryPath(dirPath) {
if (dirPath && dirPath.charAt(dirPath.length - 1) !== "/") {
dirPath += "/";
}
return dirPath;
}
TypeScript.convertToDirectoryPath = convertToDirectoryPath;
var normalizePathRegEx = /^\\\\[^\\]/;
function normalizePath(path) {
if (normalizePathRegEx.test(path)) {
path = "file:" + path;
}
var parts = this.getPathComponents(switchToForwardSlashes(path));
var normalizedParts = [];
for (var i = 0; i < parts.length; i++) {
var part = parts[i];
if (part === ".") {
continue;
}
if (normalizedParts.length > 0 && TypeScript.ArrayUtilities.last(normalizedParts) !== ".." && part === "..") {
normalizedParts.pop();
continue;
}
normalizedParts.push(part);
}
return normalizedParts.join("/");
}
TypeScript.normalizePath = normalizePath;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
function isNoDefaultLibMatch(comment) {
var isNoDefaultLibRegex = /^(\/\/\/\s*<reference\s+no-default-lib=)('|")(.+?)\2\s*\/>/gim;
return isNoDefaultLibRegex.exec(comment);
}
TypeScript.tripleSlashReferenceRegExp = /^(\/\/\/\s*<reference\s+path=)('|")(.+?)\2\s*(static=('|")(.+?)\2\s*)*\/>/;
function getFileReferenceFromReferencePath(fileName, lineMap, position, comment, diagnostics) {
var simpleReferenceRegEx = /^\/\/\/\s*<reference\s+/gim;
if (simpleReferenceRegEx.exec(comment)) {
var isNoDefaultLib = isNoDefaultLibMatch(comment);
if (!isNoDefaultLib) {
var fullReferenceRegEx = TypeScript.tripleSlashReferenceRegExp;
var fullReference = fullReferenceRegEx.exec(comment);
if (!fullReference) {
diagnostics.push(new TypeScript.Diagnostic(fileName, lineMap, position, comment.length, TypeScript.DiagnosticCode.Invalid_reference_directive_syntax));
} else {
var path = TypeScript.normalizePath(fullReference[3]);
var adjustedPath = TypeScript.normalizePath(path);
var isResident = fullReference.length >= 7 && fullReference[6] === "true";
if (isResident) {
TypeScript.CompilerDiagnostics.debugPrint(path + " is resident");
}
return {
line: 0,
character: 0,
position: 0,
length: 0,
path: TypeScript.switchToForwardSlashes(adjustedPath),
isResident: isResident
};
}
}
}
return null;
}
var scannerWindow = TypeScript.ArrayUtilities.createArray(2048, 0);
var scannerDiagnostics = [];
function processImports(lineMap, scanner, token, importedFiles) {
var position = 0;
var lineChar = { line: -1, character: -1 };
var start = new Date().getTime();
while (token.tokenKind !== 10 /* EndOfFileToken */) {
if (token.tokenKind === 49 /* ImportKeyword */) {
var importStart = position + token.leadingTriviaWidth();
token = scanner.scan(scannerDiagnostics, false);
if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token)) {
token = scanner.scan(scannerDiagnostics, false);
if (token.tokenKind === 107 /* EqualsToken */) {
token = scanner.scan(scannerDiagnostics, false);
if (token.tokenKind === 65 /* ModuleKeyword */ || token.tokenKind === 66 /* RequireKeyword */) {
token = scanner.scan(scannerDiagnostics, false);
if (token.tokenKind === 72 /* OpenParenToken */) {
var afterOpenParenPosition = scanner.absoluteIndex();
token = scanner.scan(scannerDiagnostics, false);
lineMap.fillLineAndCharacterFromPosition(importStart, lineChar);
if (token.tokenKind === 14 /* StringLiteral */) {
var ref = {
line: lineChar.line,
character: lineChar.character,
position: afterOpenParenPosition + token.leadingTriviaWidth(),
length: token.width(),
path: TypeScript.stripStartAndEndQuotes(TypeScript.switchToForwardSlashes(token.text())),
isResident: false
};
importedFiles.push(ref);
}
}
}
}
}
}
position = scanner.absoluteIndex();
token = scanner.scan(scannerDiagnostics, false);
}
var totalTime = new Date().getTime() - start;
TypeScript.fileResolutionScanImportsTime += totalTime;
}
function processTripleSlashDirectives(fileName, lineMap, firstToken) {
var leadingTrivia = firstToken.leadingTrivia();
var position = 0;
var lineChar = { line: -1, character: -1 };
var noDefaultLib = false;
var diagnostics = [];
var referencedFiles = [];
for (var i = 0, n = leadingTrivia.count(); i < n; i++) {
var trivia = leadingTrivia.syntaxTriviaAt(i);
if (trivia.kind() === 7 /* SingleLineCommentTrivia */) {
var triviaText = trivia.fullText();
var referencedCode = getFileReferenceFromReferencePath(fileName, lineMap, position, triviaText, diagnostics);
if (referencedCode) {
lineMap.fillLineAndCharacterFromPosition(position, lineChar);
referencedCode.position = position;
referencedCode.length = trivia.fullWidth();
referencedCode.line = lineChar.line;
referencedCode.character = lineChar.character;
referencedFiles.push(referencedCode);
}
var isNoDefaultLib = isNoDefaultLibMatch(triviaText);
if (isNoDefaultLib) {
noDefaultLib = isNoDefaultLib[3] === "true";
}
}
position += trivia.fullWidth();
}
return { noDefaultLib: noDefaultLib, diagnostics: diagnostics, referencedFiles: referencedFiles };
}
function preProcessFile(fileName, sourceText, readImportFiles) {
if (typeof readImportFiles === "undefined") { readImportFiles = true; }
var text = TypeScript.SimpleText.fromScriptSnapshot(sourceText);
var scanner = new TypeScript.Scanner(fileName, text, 1 /* EcmaScript5 */, scannerWindow);
var firstToken = scanner.scan(scannerDiagnostics, false);
var importedFiles = [];
if (readImportFiles) {
processImports(text.lineMap(), scanner, firstToken, importedFiles);
}
var properties = processTripleSlashDirectives(fileName, text.lineMap(), firstToken);
scannerDiagnostics.length = 0;
return { referencedFiles: properties.referencedFiles, importedFiles: importedFiles, isLibFile: properties.noDefaultLib, diagnostics: properties.diagnostics };
}
TypeScript.preProcessFile = preProcessFile;
function getParseOptions(settings) {
return new TypeScript.ParseOptions(settings.codeGenTarget(), settings.allowAutomaticSemicolonInsertion());
}
TypeScript.getParseOptions = getParseOptions;
function getReferencedFiles(fileName, sourceText) {
return preProcessFile(fileName, sourceText, false).referencedFiles;
}
TypeScript.getReferencedFiles = getReferencedFiles;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var ReferenceResolutionResult = (function () {
function ReferenceResolutionResult() {
this.resolvedFiles = [];
this.diagnostics = [];
this.seenNoDefaultLibTag = false;
}
return ReferenceResolutionResult;
})();
TypeScript.ReferenceResolutionResult = ReferenceResolutionResult;
var ReferenceLocation = (function () {
function ReferenceLocation(filePath, lineMap, position, length, isImported) {
this.filePath = filePath;
this.lineMap = lineMap;
this.position = position;
this.length = length;
this.isImported = isImported;
}
return ReferenceLocation;
})();
var ReferenceResolver = (function () {
function ReferenceResolver(inputFileNames, host, useCaseSensitiveFileResolution) {
this.useCaseSensitiveFileResolution = useCaseSensitiveFileResolution;
this.inputFileNames = inputFileNames;
this.host = host;
this.visited = {};
}
ReferenceResolver.resolve = function (inputFileNames, host, useCaseSensitiveFileResolution) {
var resolver = new ReferenceResolver(inputFileNames, host, useCaseSensitiveFileResolution);
return resolver.resolveInputFiles();
};
ReferenceResolver.prototype.resolveInputFiles = function () {
var _this = this;
var result = new ReferenceResolutionResult();
if (!this.inputFileNames || this.inputFileNames.length <= 0) {
return result;
}
var referenceLocation = new ReferenceLocation(null, null, 0, 0, false);
this.inputFileNames.forEach(function (fileName) {
return _this.resolveIncludedFile(fileName, referenceLocation, result);
});
return result;
};
ReferenceResolver.prototype.resolveIncludedFile = function (path, referenceLocation, resolutionResult) {
var normalizedPath = this.getNormalizedFilePath(path, referenceLocation.filePath);
if (this.isSameFile(normalizedPath, referenceLocation.filePath)) {
if (!referenceLocation.isImported) {
resolutionResult.diagnostics.push(new TypeScript.Diagnostic(referenceLocation.filePath, referenceLocation.lineMap, referenceLocation.position, referenceLocation.length, TypeScript.DiagnosticCode.A_file_cannot_have_a_reference_to_itself, null));
}
return normalizedPath;
}
if (!TypeScript.isTSFile(normalizedPath) && !TypeScript.isDTSFile(normalizedPath)) {
var dtsFile = normalizedPath + ".d.ts";
var tsFile = normalizedPath + ".ts";
if (this.host.fileExists(tsFile)) {
normalizedPath = tsFile;
} else {
normalizedPath = dtsFile;
}
}
if (!this.host.fileExists(normalizedPath)) {
if (!referenceLocation.isImported) {
resolutionResult.diagnostics.push(new TypeScript.Diagnostic(referenceLocation.filePath, referenceLocation.lineMap, referenceLocation.position, referenceLocation.length, TypeScript.DiagnosticCode.Cannot_resolve_referenced_file_0, [path]));
}
return normalizedPath;
}
return this.resolveFile(normalizedPath, resolutionResult);
};
ReferenceResolver.prototype.resolveImportedFile = function (path, referenceLocation, resolutionResult) {
var isRelativePath = TypeScript.isRelative(path);
var isRootedPath = isRelativePath ? false : TypeScript.isRooted(path);
if (isRelativePath || isRootedPath) {
return this.resolveIncludedFile(path, referenceLocation, resolutionResult);
} else {
var parentDirectory = this.host.getParentDirectory(referenceLocation.filePath);
var searchFilePath = null;
var dtsFileName = path + ".d.ts";
var tsFilePath = path + ".ts";
var start = new Date().getTime();
do {
currentFilePath = this.host.resolveRelativePath(tsFilePath, parentDirectory);
if (this.host.fileExists(currentFilePath)) {
searchFilePath = currentFilePath;
break;
}
var currentFilePath = this.host.resolveRelativePath(dtsFileName, parentDirectory);
if (this.host.fileExists(currentFilePath)) {
searchFilePath = currentFilePath;
break;
}
parentDirectory = this.host.getParentDirectory(parentDirectory);
} while(parentDirectory);
TypeScript.fileResolutionImportFileSearchTime += new Date().getTime() - start;
if (!searchFilePath) {
return path;
}
return this.resolveFile(searchFilePath, resolutionResult);
}
};
ReferenceResolver.prototype.resolveFile = function (normalizedPath, resolutionResult) {
var _this = this;
var visitedPath = this.isVisited(normalizedPath);
if (!visitedPath) {
this.recordVisitedFile(normalizedPath);
var start = new Date().getTime();
var scriptSnapshot = this.host.getScriptSnapshot(normalizedPath);
var totalTime = new Date().getTime() - start;
TypeScript.fileResolutionIOTime += totalTime;
var lineMap = TypeScript.LineMap1.fromScriptSnapshot(scriptSnapshot);
var preprocessedFileInformation = TypeScript.preProcessFile(normalizedPath, scriptSnapshot);
resolutionResult.diagnostics.push.apply(resolutionResult.diagnostics, preprocessedFileInformation.diagnostics);
if (preprocessedFileInformation.isLibFile) {
resolutionResult.seenNoDefaultLibTag = true;
}
var normalizedReferencePaths = [];
preprocessedFileInformation.referencedFiles.forEach(function (fileReference) {
var currentReferenceLocation = new ReferenceLocation(normalizedPath, lineMap, fileReference.position, fileReference.length, false);
var normalizedReferencePath = _this.resolveIncludedFile(fileReference.path, currentReferenceLocation, resolutionResult);
normalizedReferencePaths.push(normalizedReferencePath);
});
var normalizedImportPaths = [];
for (var i = 0; i < preprocessedFileInformation.importedFiles.length; i++) {
var fileImport = preprocessedFileInformation.importedFiles[i];
var currentReferenceLocation = new ReferenceLocation(normalizedPath, lineMap, fileImport.position, fileImport.length, true);
var normalizedImportPath = this.resolveImportedFile(fileImport.path, currentReferenceLocation, resolutionResult);
normalizedImportPaths.push(normalizedImportPath);
}
resolutionResult.resolvedFiles.push({
path: normalizedPath,
referencedFiles: normalizedReferencePaths,
importedFiles: normalizedImportPaths
});
} else {
normalizedPath = visitedPath;
}
return normalizedPath;
};
ReferenceResolver.prototype.getNormalizedFilePath = function (path, parentFilePath) {
var parentFileDirectory = parentFilePath ? this.host.getParentDirectory(parentFilePath) : "";
var normalizedPath = this.host.resolveRelativePath(path, parentFileDirectory);
return normalizedPath;
};
ReferenceResolver.prototype.getUniqueFileId = function (filePath) {
return this.useCaseSensitiveFileResolution ? filePath : filePath.toLocaleUpperCase();
};
ReferenceResolver.prototype.recordVisitedFile = function (filePath) {
this.visited[this.getUniqueFileId(filePath)] = filePath;
};
ReferenceResolver.prototype.isVisited = function (filePath) {
return this.visited[this.getUniqueFileId(filePath)];
};
ReferenceResolver.prototype.isSameFile = function (filePath1, filePath2) {
if (!filePath1 || !filePath2) {
return false;
}
if (this.useCaseSensitiveFileResolution) {
return filePath1 === filePath2;
} else {
return filePath1.toLocaleUpperCase() === filePath2.toLocaleUpperCase();
}
};
return ReferenceResolver;
})();
TypeScript.ReferenceResolver = ReferenceResolver;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var TextWriter = (function () {
function TextWriter(name, writeByteOrderMark, outputFileType) {
this.name = name;
this.writeByteOrderMark = writeByteOrderMark;
this.outputFileType = outputFileType;
this.contents = "";
this.onNewLine = true;
}
TextWriter.prototype.Write = function (s) {
this.contents += s;
this.onNewLine = false;
};
TextWriter.prototype.WriteLine = function (s) {
this.contents += s;
this.contents += TypeScript.newLine();
this.onNewLine = true;
};
TextWriter.prototype.Close = function () {
};
TextWriter.prototype.getOutputFile = function () {
return new TypeScript.OutputFile(this.name, this.writeByteOrderMark, this.contents, this.outputFileType);
};
return TextWriter;
})();
TypeScript.TextWriter = TextWriter;
var DeclarationEmitter = (function () {
function DeclarationEmitter(emittingFileName, document, compiler, emitOptions, semanticInfoChain) {
this.emittingFileName = emittingFileName;
this.document = document;
this.compiler = compiler;
this.emitOptions = emitOptions;
this.semanticInfoChain = semanticInfoChain;
this.declFile = null;
this.indenter = new TypeScript.Indenter();
this.emittedReferencePaths = false;
this.declFile = new TextWriter(emittingFileName, this.document.byteOrderMark !== 0 /* None */, 2 /* Declaration */);
}
DeclarationEmitter.prototype.getOutputFile = function () {
return this.declFile.getOutputFile();
};
DeclarationEmitter.prototype.emitDeclarations = function (sourceUnit) {
this.emitDeclarationsForSourceUnit(sourceUnit);
};
DeclarationEmitter.prototype.emitDeclarationsForList = function (list) {
for (var i = 0, n = list.childCount(); i < n; i++) {
this.emitDeclarationsForAST(list.childAt(i));
}
};
DeclarationEmitter.prototype.emitSeparatedList = function (list) {
for (var i = 0, n = list.nonSeparatorCount(); i < n; i++) {
this.emitDeclarationsForAST(list.nonSeparatorAt(i));
}
};
DeclarationEmitter.prototype.emitDeclarationsForAST = function (ast) {
switch (ast.kind()) {
case 148 /* VariableStatement */:
return this.emitDeclarationsForVariableStatement(ast);
case 141 /* PropertySignature */:
return this.emitPropertySignature(ast);
case 225 /* VariableDeclarator */:
return this.emitVariableDeclarator(ast, true, true);
case 136 /* MemberVariableDeclaration */:
return this.emitDeclarationsForMemberVariableDeclaration(ast);
case 137 /* ConstructorDeclaration */:
return this.emitDeclarationsForConstructorDeclaration(ast);
case 139 /* GetAccessor */:
return this.emitDeclarationsForGetAccessor(ast);
case 140 /* SetAccessor */:
return this.emitDeclarationsForSetAccessor(ast);
case 138 /* IndexMemberDeclaration */:
return this.emitIndexMemberDeclaration(ast);
case 144 /* IndexSignature */:
return this.emitIndexSignature(ast);
case 142 /* CallSignature */:
return this.emitCallSignature(ast);
case 143 /* ConstructSignature */:
return this.emitConstructSignature(ast);
case 145 /* MethodSignature */:
return this.emitMethodSignature(ast);
case 129 /* FunctionDeclaration */:
return this.emitDeclarationsForFunctionDeclaration(ast);
case 135 /* MemberFunctionDeclaration */:
return this.emitMemberFunctionDeclaration(ast);
case 131 /* ClassDeclaration */:
return this.emitDeclarationsForClassDeclaration(ast);
case 128 /* InterfaceDeclaration */:
return this.emitDeclarationsForInterfaceDeclaration(ast);
case 133 /* ImportDeclaration */:
return this.emitDeclarationsForImportDeclaration(ast);
case 130 /* ModuleDeclaration */:
return this.emitDeclarationsForModuleDeclaration(ast);
case 132 /* EnumDeclaration */:
return this.emitDeclarationsForEnumDeclaration(ast);
case 134 /* ExportAssignment */:
return this.emitDeclarationsForExportAssignment(ast);
}
};
DeclarationEmitter.prototype.getIndentString = function (declIndent) {
if (typeof declIndent === "undefined") { declIndent = false; }
return this.indenter.getIndent();
};
DeclarationEmitter.prototype.emitIndent = function () {
this.declFile.Write(this.getIndentString());
};
DeclarationEmitter.prototype.canEmitDeclarations = function (declAST) {
var container = this.getEnclosingContainer(declAST);
if (container.kind() === 130 /* ModuleDeclaration */ || container.kind() === 120 /* SourceUnit */) {
var pullDecl = this.semanticInfoChain.getDeclForAST(declAST);
if (!TypeScript.hasFlag(pullDecl.flags, 1 /* Exported */)) {
var start = new Date().getTime();
var declSymbol = this.semanticInfoChain.getSymbolForAST(declAST);
var result = declSymbol && declSymbol.isExternallyVisible();
TypeScript.declarationEmitIsExternallyVisibleTime += new Date().getTime() - start;
return result;
}
}
return true;
};
DeclarationEmitter.prototype.getDeclFlagsString = function (pullDecl, typeString) {
var result = this.getIndentString();
var pullFlags = pullDecl.flags;
if (TypeScript.hasFlag(pullFlags, 16 /* Static */)) {
if (TypeScript.hasFlag(pullFlags, 2 /* Private */)) {
result += "private ";
}
result += "static ";
} else {
if (TypeScript.hasFlag(pullFlags, 2 /* Private */)) {
result += "private ";
} else if (TypeScript.hasFlag(pullFlags, 4 /* Public */)) {
result += "public ";
} else {
var emitDeclare = !TypeScript.hasFlag(pullFlags, 1 /* Exported */);
var declAST = this.semanticInfoChain.getASTForDecl(pullDecl);
var container = this.getEnclosingContainer(declAST);
if (container.kind() === 130 /* ModuleDeclaration */ && TypeScript.ASTHelpers.isAnyNameOfModule(container, declAST)) {
container = this.getEnclosingContainer(container);
}
var isExternalModule = container.kind() === 120 /* SourceUnit */ && this.document.isExternalModule();
if (isExternalModule && TypeScript.hasFlag(pullFlags, 1 /* Exported */)) {
result += "export ";
emitDeclare = true;
}
if (isExternalModule || container.kind() === 120 /* SourceUnit */) {
if (emitDeclare && typeString !== "interface" && typeString !== "import") {
result += "declare ";
}
}
result += typeString + " ";
}
}
return result;
};
DeclarationEmitter.prototype.emitDeclFlags = function (declarationAST, typeString) {
this.declFile.Write(this.getDeclFlagsString(this.semanticInfoChain.getDeclForAST(declarationAST), typeString));
};
DeclarationEmitter.prototype.emitTypeNamesMember = function (memberName, emitIndent) {
if (typeof emitIndent === "undefined") { emitIndent = false; }
if (memberName.prefix === "{ ") {
if (emitIndent) {
this.emitIndent();
}
this.declFile.WriteLine("{");
this.indenter.increaseIndent();
emitIndent = true;
} else if (memberName.prefix !== "") {
if (emitIndent) {
this.emitIndent();
}
this.declFile.Write(memberName.prefix);
emitIndent = false;
}
if (memberName.isString()) {
if (emitIndent) {
this.emitIndent();
}
this.declFile.Write(memberName.text);
} else if (memberName.isArray()) {
var ar = memberName;
for (var index = 0; index < ar.entries.length; index++) {
this.emitTypeNamesMember(ar.entries[index], emitIndent);
if (ar.delim === "; ") {
this.declFile.WriteLine(";");
}
}
}
if (memberName.suffix === "}") {
this.indenter.decreaseIndent();
this.emitIndent();
this.declFile.Write(memberName.suffix);
} else {
this.declFile.Write(memberName.suffix);
}
};
DeclarationEmitter.prototype.emitTypeSignature = function (ast, type) {
var declarationContainerAst = this.getEnclosingContainer(ast);
var start = new Date().getTime();
var declarationContainerDecl = this.semanticInfoChain.getDeclForAST(declarationContainerAst);
var declarationPullSymbol = declarationContainerDecl.getSymbol();
TypeScript.declarationEmitTypeSignatureTime += new Date().getTime() - start;
var isNotAGenericType = ast.kind() !== 126 /* GenericType */;
var typeNameMembers = type.getScopedNameEx(declarationPullSymbol, false, false, false, false, false, isNotAGenericType);
this.emitTypeNamesMember(typeNameMembers);
};
DeclarationEmitter.prototype.emitComment = function (comment) {
var text = TypeScript.getTrimmedTextLines(comment);
if (this.declFile.onNewLine) {
this.emitIndent();
} else if (comment.kind() !== 6 /* MultiLineCommentTrivia */) {
this.declFile.WriteLine("");
this.emitIndent();
}
this.declFile.Write(text[0]);
for (var i = 1; i < text.length; i++) {
this.declFile.WriteLine("");
this.emitIndent();
this.declFile.Write(text[i]);
}
if (comment.endsLine || comment.kind() !== 6 /* MultiLineCommentTrivia */) {
this.declFile.WriteLine("");
} else {
this.declFile.Write(" ");
}
};
DeclarationEmitter.prototype.emitDeclarationComments = function (astOrSymbol, endLine) {
if (typeof endLine === "undefined") { endLine = true; }
if (this.emitOptions.compilationSettings().removeComments()) {
return;
}
var declComments = astOrSymbol.docComments ? astOrSymbol.docComments() : TypeScript.ASTHelpers.docComments(astOrSymbol);
this.writeDeclarationComments(declComments, endLine);
};
DeclarationEmitter.prototype.writeDeclarationComments = function (declComments, endLine) {
if (typeof endLine === "undefined") { endLine = true; }
if (declComments.length > 0) {
for (var i = 0; i < declComments.length; i++) {
this.emitComment(declComments[i]);
}
if (endLine) {
if (!this.declFile.onNewLine) {
this.declFile.WriteLine("");
}
} else {
if (this.declFile.onNewLine) {
this.emitIndent();
}
}
}
};
DeclarationEmitter.prototype.emitTypeOfVariableDeclaratorOrParameter = function (boundDecl) {
var start = new Date().getTime();
var decl = this.semanticInfoChain.getDeclForAST(boundDecl);
var pullSymbol = decl.getSymbol();
TypeScript.declarationEmitGetBoundDeclTypeTime += new Date().getTime() - start;
var type = pullSymbol.type;
TypeScript.Debug.assert(type);
this.declFile.Write(": ");
this.emitTypeSignature(boundDecl, type);
};
DeclarationEmitter.prototype.emitPropertySignature = function (varDecl) {
this.emitDeclarationComments(varDecl);
this.emitIndent();
this.declFile.Write(varDecl.propertyName.text());
if (varDecl.questionToken) {
this.declFile.Write("?");
}
this.emitTypeOfVariableDeclaratorOrParameter(varDecl);
this.declFile.WriteLine(";");
};
DeclarationEmitter.prototype.emitVariableDeclarator = function (varDecl, isFirstVarInList, isLastVarInList) {
if (this.canEmitDeclarations(varDecl)) {
this.emitDeclarationComments(varDecl);
if (isFirstVarInList) {
this.emitDeclFlags(varDecl, "var");
}
this.declFile.Write(varDecl.propertyName.text());
if (!TypeScript.hasModifier(TypeScript.ASTHelpers.getVariableDeclaratorModifiers(varDecl), 2 /* Private */)) {
this.emitTypeOfVariableDeclaratorOrParameter(varDecl);
}
if (isLastVarInList) {
this.declFile.WriteLine(";");
} else {
this.declFile.Write(", ");
}
}
};
DeclarationEmitter.prototype.emitClassElementModifiers = function (modifiers) {
if (TypeScript.hasModifier(modifiers, 16 /* Static */)) {
if (TypeScript.hasModifier(modifiers, 2 /* Private */)) {
this.declFile.Write("private ");
}
this.declFile.Write("static ");
} else {
if (TypeScript.hasModifier(modifiers, 2 /* Private */)) {
this.declFile.Write("private ");
} else {
this.declFile.Write("public ");
}
}
};
DeclarationEmitter.prototype.emitDeclarationsForMemberVariableDeclaration = function (varDecl) {
if (this.canEmitDeclarations(varDecl)) {
this.emitDeclarationComments(varDecl);
this.declFile.Write(this.getIndentString());
this.emitClassElementModifiers(varDecl.modifiers);
;
this.declFile.Write(varDecl.variableDeclarator.propertyName.text());
if (!TypeScript.hasModifier(varDecl.modifiers, 2 /* Private */)) {
this.emitTypeOfVariableDeclaratorOrParameter(varDecl);
}
this.declFile.WriteLine(";");
}
};
DeclarationEmitter.prototype.emitDeclarationsForVariableStatement = function (variableStatement) {
this.emitDeclarationsForVariableDeclaration(variableStatement.declaration);
};
DeclarationEmitter.prototype.emitDeclarationsForVariableDeclaration = function (variableDeclaration) {
var varListCount = variableDeclaration.declarators.nonSeparatorCount();
for (var i = 0; i < varListCount; i++) {
this.emitVariableDeclarator(variableDeclaration.declarators.nonSeparatorAt(i), i === 0, i === varListCount - 1);
}
};
DeclarationEmitter.prototype.emitArgDecl = function (argDecl, id, isOptional, isPrivate) {
this.indenter.increaseIndent();
this.emitDeclarationComments(argDecl, false);
this.declFile.Write(id.text());
if (isOptional) {
this.declFile.Write("?");
}
this.indenter.decreaseIndent();
if (!isPrivate) {
this.emitTypeOfVariableDeclaratorOrParameter(argDecl);
}
};
DeclarationEmitter.prototype.isOverloadedCallSignature = function (funcDecl) {
var start = new Date().getTime();
var functionDecl = this.semanticInfoChain.getDeclForAST(funcDecl);
var funcSymbol = functionDecl.getSymbol();
TypeScript.declarationEmitIsOverloadedCallSignatureTime += new Date().getTime() - start;
var funcTypeSymbol = funcSymbol.type;
var signatures = funcTypeSymbol.getCallSignatures();
var result = signatures && signatures.length > 1;
return result;
};
DeclarationEmitter.prototype.emitDeclarationsForConstructorDeclaration = function (funcDecl) {
var start = new Date().getTime();
var funcSymbol = this.semanticInfoChain.getSymbolForAST(funcDecl);
TypeScript.declarationEmitFunctionDeclarationGetSymbolTime += new Date().getTime() - start;
var funcTypeSymbol = funcSymbol.type;
if (funcDecl.block) {
var constructSignatures = funcTypeSymbol.getConstructSignatures();
if (constructSignatures && constructSignatures.length > 1) {
return;
}
}
var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl);
var funcSignature = funcPullDecl.getSignatureSymbol();
this.emitDeclarationComments(funcDecl);
this.emitIndent();
this.declFile.Write("constructor");
this.declFile.Write("(");
this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList));
this.declFile.Write(")");
this.declFile.WriteLine(";");
};
DeclarationEmitter.prototype.emitParameterList = function (isPrivate, parameterList) {
this.declFile.Write("(");
this.emitParameters(isPrivate, TypeScript.ASTHelpers.parametersFromParameterList(parameterList));
this.declFile.Write(")");
};
DeclarationEmitter.prototype.emitParameters = function (isPrivate, parameterList) {
var hasLastParameterRestParameter = parameterList.lastParameterIsRest();
var argsLen = parameterList.length;
if (hasLastParameterRestParameter) {
argsLen--;
}
for (var i = 0; i < argsLen; i++) {
this.emitArgDecl(parameterList.astAt(i), parameterList.identifierAt(i), parameterList.isOptionalAt(i), isPrivate);
if (i < (argsLen - 1)) {
this.declFile.Write(", ");
}
}
if (hasLastParameterRestParameter) {
if (parameterList.length > 1) {
this.declFile.Write(", ...");
} else {
this.declFile.Write("...");
}
var index = parameterList.length - 1;
this.emitArgDecl(parameterList.astAt(index), parameterList.identifierAt(index), parameterList.isOptionalAt(index), isPrivate);
}
};
DeclarationEmitter.prototype.emitMemberFunctionDeclaration = function (funcDecl) {
var start = new Date().getTime();
var funcSymbol = this.semanticInfoChain.getSymbolForAST(funcDecl);
TypeScript.declarationEmitFunctionDeclarationGetSymbolTime += new Date().getTime() - start;
var funcTypeSymbol = funcSymbol.type;
if (funcDecl.block) {
var constructSignatures = funcTypeSymbol.getConstructSignatures();
if (constructSignatures && constructSignatures.length > 1) {
return;
} else if (this.isOverloadedCallSignature(funcDecl)) {
return;
}
} else if (TypeScript.hasModifier(funcDecl.modifiers, 2 /* Private */) && this.isOverloadedCallSignature(funcDecl)) {
var callSignatures = funcTypeSymbol.getCallSignatures();
TypeScript.Debug.assert(callSignatures && callSignatures.length > 1);
var firstSignature = callSignatures[0].isDefinition() ? callSignatures[1] : callSignatures[0];
var firstSignatureDecl = firstSignature.getDeclarations()[0];
var firstFuncDecl = this.semanticInfoChain.getASTForDecl(firstSignatureDecl);
if (firstFuncDecl !== funcDecl) {
return;
}
}
if (!this.canEmitDeclarations(funcDecl)) {
return;
}
var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl);
var funcSignature = funcPullDecl.getSignatureSymbol();
this.emitDeclarationComments(funcDecl);
this.emitDeclFlags(funcDecl, "function");
var id = funcDecl.propertyName.text();
this.declFile.Write(id);
this.emitTypeParameters(funcDecl.callSignature.typeParameterList, funcSignature);
var isPrivate = TypeScript.hasModifier(funcDecl.modifiers, 2 /* Private */);
this.emitParameterList(isPrivate, funcDecl.callSignature.parameterList);
if (!isPrivate) {
var returnType = funcSignature.returnType;
this.declFile.Write(": ");
this.emitTypeSignature(funcDecl, returnType);
}
this.declFile.WriteLine(";");
};
DeclarationEmitter.prototype.emitCallSignature = function (funcDecl) {
var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl);
this.emitDeclarationComments(funcDecl);
var funcSignature = funcPullDecl.getSignatureSymbol();
this.emitTypeParameters(funcDecl.typeParameterList, funcSignature);
this.emitIndent();
this.declFile.Write("(");
this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.parameterList));
this.declFile.Write(")");
var returnType = funcSignature.returnType;
this.declFile.Write(": ");
if (returnType) {
this.emitTypeSignature(funcDecl, returnType);
} else {
this.declFile.Write("any");
}
this.declFile.WriteLine(";");
};
DeclarationEmitter.prototype.emitConstructSignature = function (funcDecl) {
var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl);
var start = new Date().getTime();
var funcSymbol = this.semanticInfoChain.getSymbolForAST(funcDecl);
TypeScript.declarationEmitFunctionDeclarationGetSymbolTime += new Date().getTime() - start;
this.emitDeclarationComments(funcDecl);
this.emitIndent();
this.declFile.Write("new");
var funcSignature = funcPullDecl.getSignatureSymbol();
this.emitTypeParameters(funcDecl.callSignature.typeParameterList, funcSignature);
this.declFile.Write("(");
this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList));
this.declFile.Write(")");
var returnType = funcSignature.returnType;
this.declFile.Write(": ");
if (returnType) {
this.emitTypeSignature(funcDecl, returnType);
} else {
this.declFile.Write("any");
}
this.declFile.WriteLine(";");
};
DeclarationEmitter.prototype.emitMethodSignature = function (funcDecl) {
var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl);
var start = new Date().getTime();
var funcSymbol = this.semanticInfoChain.getSymbolForAST(funcDecl);
TypeScript.declarationEmitFunctionDeclarationGetSymbolTime += new Date().getTime() - start;
this.emitDeclarationComments(funcDecl);
this.emitIndent();
this.declFile.Write(funcDecl.propertyName.text());
if (funcDecl.questionToken) {
this.declFile.Write("? ");
}
var funcSignature = funcPullDecl.getSignatureSymbol();
this.emitTypeParameters(funcDecl.callSignature.typeParameterList, funcSignature);
this.declFile.Write("(");
this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList));
this.declFile.Write(")");
var returnType = funcSignature.returnType;
this.declFile.Write(": ");
if (returnType) {
this.emitTypeSignature(funcDecl, returnType);
} else {
this.declFile.Write("any");
}
this.declFile.WriteLine(";");
};
DeclarationEmitter.prototype.emitDeclarationsForFunctionDeclaration = function (funcDecl) {
var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl);
var start = new Date().getTime();
var funcSymbol = this.semanticInfoChain.getSymbolForAST(funcDecl);
TypeScript.declarationEmitFunctionDeclarationGetSymbolTime += new Date().getTime() - start;
if (funcDecl.block) {
var funcTypeSymbol = funcSymbol.type;
var constructSignatures = funcTypeSymbol.getConstructSignatures();
if (constructSignatures && constructSignatures.length > 1) {
return;
} else if (this.isOverloadedCallSignature(funcDecl)) {
return;
}
}
if (!this.canEmitDeclarations(funcDecl)) {
return;
}
this.emitDeclarationComments(funcDecl);
var id = funcDecl.identifier.text();
this.emitDeclFlags(funcDecl, "function");
if (id !== "" || !funcDecl.identifier || funcDecl.identifier.text().length > 0) {
this.declFile.Write(id);
} else if (funcPullDecl.kind === 2097152 /* ConstructSignature */) {
this.declFile.Write("new");
}
var funcSignature = funcPullDecl.getSignatureSymbol();
this.emitTypeParameters(funcDecl.callSignature.typeParameterList, funcSignature);
this.declFile.Write("(");
this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList));
this.declFile.Write(")");
var returnType = funcSignature.returnType;
this.declFile.Write(": ");
if (returnType) {
this.emitTypeSignature(funcDecl, returnType);
} else {
this.declFile.Write("any");
}
this.declFile.WriteLine(";");
};
DeclarationEmitter.prototype.emitIndexMemberDeclaration = function (funcDecl) {
this.emitDeclarationsForAST(funcDecl.indexSignature);
};
DeclarationEmitter.prototype.emitIndexSignature = function (funcDecl) {
if (!this.canEmitDeclarations(funcDecl)) {
return;
}
this.emitDeclarationComments(funcDecl);
this.emitIndent();
this.declFile.Write("[");
this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameter(funcDecl.parameter));
this.declFile.Write("]");
var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl);
var funcSignature = funcPullDecl.getSignatureSymbol();
var returnType = funcSignature.returnType;
this.declFile.Write(": ");
this.emitTypeSignature(funcDecl, returnType);
this.declFile.WriteLine(";");
};
DeclarationEmitter.prototype.emitBaseList = function (bases, useExtendsList) {
if (bases && (bases.nonSeparatorCount() > 0)) {
var qual = useExtendsList ? "extends" : "implements";
this.declFile.Write(" " + qual + " ");
var basesLen = bases.nonSeparatorCount();
for (var i = 0; i < basesLen; i++) {
if (i > 0) {
this.declFile.Write(", ");
}
var base = bases.nonSeparatorAt(i);
var baseType = this.semanticInfoChain.getSymbolForAST(base);
this.emitTypeSignature(base, baseType);
}
}
};
DeclarationEmitter.prototype.emitAccessorDeclarationComments = function (funcDecl) {
if (this.emitOptions.compilationSettings().removeComments()) {
return;
}
var start = new Date().getTime();
var accessors = TypeScript.PullHelpers.getGetterAndSetterFunction(funcDecl, this.semanticInfoChain);
TypeScript.declarationEmitGetAccessorFunctionTime += new Date().getTime();
var comments = [];
if (accessors.getter) {
comments = comments.concat(TypeScript.ASTHelpers.docComments(accessors.getter));
}
if (accessors.setter) {
comments = comments.concat(TypeScript.ASTHelpers.docComments(accessors.setter));
}
this.writeDeclarationComments(comments);
};
DeclarationEmitter.prototype.emitDeclarationsForGetAccessor = function (funcDecl) {
this.emitMemberAccessorDeclaration(funcDecl, funcDecl.modifiers, funcDecl.propertyName);
};
DeclarationEmitter.prototype.emitDeclarationsForSetAccessor = function (funcDecl) {
this.emitMemberAccessorDeclaration(funcDecl, funcDecl.modifiers, funcDecl.propertyName);
};
DeclarationEmitter.prototype.emitMemberAccessorDeclaration = function (funcDecl, modifiers, name) {
var start = new Date().getTime();
var accessorSymbol = TypeScript.PullHelpers.getAccessorSymbol(funcDecl, this.semanticInfoChain);
TypeScript.declarationEmitGetAccessorFunctionTime += new Date().getTime();
if (funcDecl.kind() === 140 /* SetAccessor */ && accessorSymbol.getGetter()) {
return;
}
var isPrivate = TypeScript.hasModifier(modifiers, 2 /* Private */);
this.emitAccessorDeclarationComments(funcDecl);
this.declFile.Write(this.getIndentString());
this.emitClassElementModifiers(modifiers);
this.declFile.Write(name.text());
if (!isPrivate) {
this.declFile.Write(" : ");
var type = accessorSymbol.type;
this.emitTypeSignature(funcDecl, type);
}
this.declFile.WriteLine(";");
};
DeclarationEmitter.prototype.emitClassMembersFromConstructorDefinition = function (funcDecl) {
var argsLen = funcDecl.callSignature.parameterList.parameters.nonSeparatorCount();
if (TypeScript.lastParameterIsRest(funcDecl.callSignature.parameterList)) {
argsLen--;
}
for (var i = 0; i < argsLen; i++) {
var parameter = funcDecl.callSignature.parameterList.parameters.nonSeparatorAt(i);
var parameterDecl = this.semanticInfoChain.getDeclForAST(parameter);
if (TypeScript.hasFlag(parameterDecl.flags, 8388608 /* PropertyParameter */)) {
var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl);
this.emitDeclarationComments(parameter);
this.declFile.Write(this.getIndentString());
this.emitClassElementModifiers(parameter.modifiers);
this.declFile.Write(parameter.identifier.text());
if (!TypeScript.hasModifier(parameter.modifiers, 2 /* Private */)) {
this.emitTypeOfVariableDeclaratorOrParameter(parameter);
}
this.declFile.WriteLine(";");
}
}
};
DeclarationEmitter.prototype.emitDeclarationsForClassDeclaration = function (classDecl) {
if (!this.canEmitDeclarations(classDecl)) {
return;
}
var className = classDecl.identifier.text();
this.emitDeclarationComments(classDecl);
var classPullDecl = this.semanticInfoChain.getDeclForAST(classDecl);
this.emitDeclFlags(classDecl, "class");
this.declFile.Write(className);
this.emitTypeParameters(classDecl.typeParameterList);
this.emitHeritageClauses(classDecl.heritageClauses);
this.declFile.WriteLine(" {");
this.indenter.increaseIndent();
var constructorDecl = TypeScript.getLastConstructor(classDecl);
if (constructorDecl) {
this.emitClassMembersFromConstructorDefinition(constructorDecl);
}
this.emitDeclarationsForList(classDecl.classElements);
this.indenter.decreaseIndent();
this.emitIndent();
this.declFile.WriteLine("}");
};
DeclarationEmitter.prototype.emitHeritageClauses = function (clauses) {
if (clauses) {
for (var i = 0, n = clauses.childCount(); i < n; i++) {
this.emitHeritageClause(clauses.childAt(i));
}
}
};
DeclarationEmitter.prototype.emitHeritageClause = function (clause) {
this.emitBaseList(clause.typeNames, clause.kind() === 230 /* ExtendsHeritageClause */);
};
DeclarationEmitter.prototype.getEnclosingContainer = function (ast) {
ast = ast.parent;
while (ast) {
if (ast.kind() === 131 /* ClassDeclaration */ || ast.kind() === 128 /* InterfaceDeclaration */ || ast.kind() === 130 /* ModuleDeclaration */ || ast.kind() === 120 /* SourceUnit */) {
return ast;
}
ast = ast.parent;
}
return null;
};
DeclarationEmitter.prototype.emitTypeParameters = function (typeParams, funcSignature) {
if (!typeParams || !typeParams.typeParameters.nonSeparatorCount()) {
return;
}
this.declFile.Write("<");
var containerAst = this.getEnclosingContainer(typeParams);
var start = new Date().getTime();
var containerDecl = this.semanticInfoChain.getDeclForAST(containerAst);
var containerSymbol = containerDecl.getSymbol();
TypeScript.declarationEmitGetTypeParameterSymbolTime += new Date().getTime() - start;
var typars;
if (funcSignature) {
typars = funcSignature.getTypeParameters();
} else {
typars = containerSymbol.getTypeArgumentsOrTypeParameters();
}
for (var i = 0; i < typars.length; i++) {
if (i) {
this.declFile.Write(", ");
}
var memberName = typars[i].getScopedNameEx(containerSymbol, false, true);
this.emitTypeNamesMember(memberName);
}
this.declFile.Write(">");
};
DeclarationEmitter.prototype.emitDeclarationsForInterfaceDeclaration = function (interfaceDecl) {
if (!this.canEmitDeclarations(interfaceDecl)) {
return;
}
var interfaceName = interfaceDecl.identifier.text();
this.emitDeclarationComments(interfaceDecl);
var interfacePullDecl = this.semanticInfoChain.getDeclForAST(interfaceDecl);
this.emitDeclFlags(interfaceDecl, "interface");
this.declFile.Write(interfaceName);
this.emitTypeParameters(interfaceDecl.typeParameterList);
this.emitHeritageClauses(interfaceDecl.heritageClauses);
this.declFile.WriteLine(" {");
this.indenter.increaseIndent();
this.emitSeparatedList(interfaceDecl.body.typeMembers);
this.indenter.decreaseIndent();
this.emitIndent();
this.declFile.WriteLine("}");
};
DeclarationEmitter.prototype.emitDeclarationsForImportDeclaration = function (importDeclAST) {
var importDecl = this.semanticInfoChain.getDeclForAST(importDeclAST);
var importSymbol = importDecl.getSymbol();
var isExportedImportDecl = TypeScript.hasModifier(importDeclAST.modifiers, 1 /* Exported */);
if (isExportedImportDecl || importSymbol.typeUsedExternally() || TypeScript.PullContainerSymbol.usedAsSymbol(importSymbol.getContainer(), importSymbol)) {
this.emitDeclarationComments(importDeclAST);
this.emitIndent();
if (isExportedImportDecl) {
this.declFile.Write("export ");
}
this.declFile.Write("import ");
this.declFile.Write(importDeclAST.identifier.text() + " = ");
if (importDeclAST.moduleReference.kind() === 245 /* ExternalModuleReference */) {
this.declFile.WriteLine("require(" + importDeclAST.moduleReference.stringLiteral.text() + ");");
} else {
this.declFile.WriteLine(TypeScript.ASTHelpers.getNameOfIdenfierOrQualifiedName(importDeclAST.moduleReference.moduleName) + ";");
}
}
};
DeclarationEmitter.prototype.emitDeclarationsForEnumDeclaration = function (moduleDecl) {
if (!this.canEmitDeclarations(moduleDecl)) {
return;
}
this.emitDeclarationComments(moduleDecl);
var modulePullDecl = this.semanticInfoChain.getDeclForAST(moduleDecl);
this.emitDeclFlags(moduleDecl, "enum");
this.declFile.WriteLine(moduleDecl.identifier.text() + " {");
this.indenter.increaseIndent();
var membersLen = moduleDecl.enumElements.nonSeparatorCount();
for (var j = 0; j < membersLen; j++) {
var memberDecl = moduleDecl.enumElements.nonSeparatorAt(j);
var enumElement = memberDecl;
var enumElementDecl = this.semanticInfoChain.getDeclForAST(enumElement);
this.emitDeclarationComments(enumElement);
this.emitIndent();
this.declFile.Write(enumElement.propertyName.text());
if (enumElementDecl.constantValue !== null) {
this.declFile.Write(" = " + enumElementDecl.constantValue);
}
this.declFile.WriteLine(",");
}
this.indenter.decreaseIndent();
this.emitIndent();
this.declFile.WriteLine("}");
};
DeclarationEmitter.prototype.emitDeclarationsForModuleDeclaration = function (moduleDecl) {
if (!this.canEmitDeclarations(moduleDecl)) {
return;
}
var modulePullDecl = this.semanticInfoChain.getDeclForAST(moduleDecl);
this.emitDeclarationComments(moduleDecl);
var name = moduleDecl.stringLiteral || TypeScript.ArrayUtilities.first(TypeScript.getModuleNames(moduleDecl.name));
this.emitDeclFlags(name, "module");
if (moduleDecl.stringLiteral) {
this.declFile.Write(moduleDecl.stringLiteral.text());
} else {
this.declFile.Write(TypeScript.ASTHelpers.getNameOfIdenfierOrQualifiedName(moduleDecl.name));
}
this.declFile.WriteLine(" {");
this.indenter.increaseIndent();
this.emitDeclarationsForList(moduleDecl.moduleElements);
this.indenter.decreaseIndent();
this.emitIndent();
this.declFile.WriteLine("}");
};
DeclarationEmitter.prototype.emitDeclarationsForExportAssignment = function (ast) {
this.emitIndent();
this.declFile.Write("export = ");
this.declFile.Write(ast.identifier.text());
this.declFile.WriteLine(";");
};
DeclarationEmitter.prototype.resolveScriptReference = function (document, reference) {
if (!this.emitOptions.compilationSettings().noResolve() || TypeScript.isRooted(reference)) {
return reference;
}
var documentDir = TypeScript.convertToDirectoryPath(TypeScript.switchToForwardSlashes(TypeScript.getRootFilePath(document.fileName)));
var resolvedReferencePath = this.emitOptions.resolvePath(documentDir + reference);
return resolvedReferencePath;
};
DeclarationEmitter.prototype.emitReferencePaths = function (sourceUnit) {
if (this.emittedReferencePaths) {
return;
}
var documents = [];
if (this.document.emitToOwnOutputFile()) {
var scriptReferences = this.document.referencedFiles;
var addedGlobalDocument = false;
for (var j = 0; j < scriptReferences.length; j++) {
var currentReference = this.resolveScriptReference(this.document, scriptReferences[j]);
var document = this.compiler.getDocument(currentReference);
if (document && (document.emitToOwnOutputFile() || document.isDeclareFile() || !addedGlobalDocument)) {
documents = documents.concat(document);
if (!document.isDeclareFile() && document.isExternalModule()) {
addedGlobalDocument = true;
}
}
}
} else {
var fileNames = this.compiler.fileNames();
for (var i = 0; i < fileNames.length; i++) {
var doc = this.compiler.getDocument(fileNames[i]);
if (!doc.isDeclareFile() && !doc.isExternalModule()) {
var scriptReferences = doc.referencedFiles;
for (var j = 0; j < scriptReferences.length; j++) {
var currentReference = this.resolveScriptReference(doc, scriptReferences[j]);
var document = this.compiler.getDocument(currentReference);
if (document && (document.isDeclareFile() || document.isExternalModule())) {
for (var k = 0; k < documents.length; k++) {
if (documents[k] === document) {
break;
}
}
if (k === documents.length) {
documents = documents.concat(document);
}
}
}
}
}
}
var emittingFilePath = documents.length ? TypeScript.getRootFilePath(this.emittingFileName) : null;
for (var i = 0; i < documents.length; i++) {
var document = documents[i];
var declFileName;
if (document.isDeclareFile()) {
declFileName = document.fileName;
} else {
declFileName = this.compiler.mapOutputFileName(document, this.emitOptions, TypeScript.TypeScriptCompiler.mapToDTSFileName);
}
declFileName = TypeScript.getRelativePathToFixedPath(emittingFilePath, declFileName, false);
this.declFile.WriteLine('/// <reference path="' + declFileName + '" />');
}
this.emittedReferencePaths = true;
};
DeclarationEmitter.prototype.emitDeclarationsForSourceUnit = function (sourceUnit) {
this.emitReferencePaths(sourceUnit);
this.emitDeclarationsForList(sourceUnit.moduleElements);
};
return DeclarationEmitter;
})();
TypeScript.DeclarationEmitter = DeclarationEmitter;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var BloomFilter = (function () {
function BloomFilter(expectedCount) {
var m = Math.max(1, BloomFilter.computeM(expectedCount));
var k = Math.max(1, BloomFilter.computeK(expectedCount));
;
var sizeInEvenBytes = (m + 7) & ~7;
this.bitArray = [];
for (var i = 0, len = sizeInEvenBytes; i < len; i++) {
this.bitArray[i] = false;
}
this.hashFunctionCount = k;
}
BloomFilter.computeM = function (expectedCount) {
var p = BloomFilter.falsePositiveProbability;
var n = expectedCount;
var numerator = n * Math.log(p);
var denominator = Math.log(1.0 / Math.pow(2.0, Math.log(2.0)));
return Math.ceil(numerator / denominator);
};
BloomFilter.computeK = function (expectedCount) {
var n = expectedCount;
var m = BloomFilter.computeM(expectedCount);
var temp = Math.log(2.0) * m / n;
return Math.round(temp);
};
BloomFilter.prototype.computeHash = function (key, seed) {
return TypeScript.Hash.computeMurmur2StringHashCode(key, seed);
};
BloomFilter.prototype.addKeys = function (keys) {
for (var name in keys) {
if (keys[name]) {
this.add(name);
}
}
};
BloomFilter.prototype.add = function (value) {
for (var i = 0; i < this.hashFunctionCount; i++) {
var hash = this.computeHash(value, i);
hash = hash % this.bitArray.length;
this.bitArray[Math.abs(hash)] = true;
}
};
BloomFilter.prototype.probablyContains = function (value) {
for (var i = 0; i < this.hashFunctionCount; i++) {
var hash = this.computeHash(value, i);
hash = hash % this.bitArray.length;
if (!this.bitArray[Math.abs(hash)]) {
return false;
}
}
return true;
};
BloomFilter.prototype.isEquivalent = function (filter) {
return BloomFilter.isEquivalent(this.bitArray, filter.bitArray) && this.hashFunctionCount === filter.hashFunctionCount;
};
BloomFilter.isEquivalent = function (array1, array2) {
if (array1.length !== array2.length) {
return false;
}
for (var i = 0; i < array1.length; i++) {
if (array1[i] !== array2[i]) {
return false;
}
}
return true;
};
BloomFilter.falsePositiveProbability = 0.0001;
return BloomFilter;
})();
TypeScript.BloomFilter = BloomFilter;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var IdentifierWalker = (function (_super) {
__extends(IdentifierWalker, _super);
function IdentifierWalker(list) {
_super.call(this);
this.list = list;
}
IdentifierWalker.prototype.visitToken = function (token) {
this.list[token.text()] = true;
};
return IdentifierWalker;
})(TypeScript.SyntaxWalker);
TypeScript.IdentifierWalker = IdentifierWalker;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var CompilationSettings = (function () {
function CompilationSettings() {
this.propagateEnumConstants = false;
this.removeComments = false;
this.watch = false;
this.noResolve = false;
this.allowAutomaticSemicolonInsertion = true;
this.noImplicitAny = false;
this.noLib = false;
this.codeGenTarget = 0 /* EcmaScript3 */;
this.moduleGenTarget = 0 /* Unspecified */;
this.outFileOption = "";
this.outDirOption = "";
this.mapSourceFiles = false;
this.mapRoot = "";
this.sourceRoot = "";
this.generateDeclarationFiles = false;
this.useCaseSensitiveFileResolution = false;
this.gatherDiagnostics = false;
this.codepage = null;
this.createFileLog = false;
}
return CompilationSettings;
})();
TypeScript.CompilationSettings = CompilationSettings;
var ImmutableCompilationSettings = (function () {
function ImmutableCompilationSettings(propagateEnumConstants, removeComments, watch, noResolve, allowAutomaticSemicolonInsertion, noImplicitAny, noLib, codeGenTarget, moduleGenTarget, outFileOption, outDirOption, mapSourceFiles, mapRoot, sourceRoot, generateDeclarationFiles, useCaseSensitiveFileResolution, gatherDiagnostics, codepage, createFileLog) {
this._propagateEnumConstants = propagateEnumConstants;
this._removeComments = removeComments;
this._watch = watch;
this._noResolve = noResolve;
this._allowAutomaticSemicolonInsertion = allowAutomaticSemicolonInsertion;
this._noImplicitAny = noImplicitAny;
this._noLib = noLib;
this._codeGenTarget = codeGenTarget;
this._moduleGenTarget = moduleGenTarget;
this._outFileOption = outFileOption;
this._outDirOption = outDirOption;
this._mapSourceFiles = mapSourceFiles;
this._mapRoot = mapRoot;
this._sourceRoot = sourceRoot;
this._generateDeclarationFiles = generateDeclarationFiles;
this._useCaseSensitiveFileResolution = useCaseSensitiveFileResolution;
this._gatherDiagnostics = gatherDiagnostics;
this._codepage = codepage;
this._createFileLog = createFileLog;
}
ImmutableCompilationSettings.prototype.propagateEnumConstants = function () {
return this._propagateEnumConstants;
};
ImmutableCompilationSettings.prototype.removeComments = function () {
return this._removeComments;
};
ImmutableCompilationSettings.prototype.watch = function () {
return this._watch;
};
ImmutableCompilationSettings.prototype.noResolve = function () {
return this._noResolve;
};
ImmutableCompilationSettings.prototype.allowAutomaticSemicolonInsertion = function () {
return this._allowAutomaticSemicolonInsertion;
};
ImmutableCompilationSettings.prototype.noImplicitAny = function () {
return this._noImplicitAny;
};
ImmutableCompilationSettings.prototype.noLib = function () {
return this._noLib;
};
ImmutableCompilationSettings.prototype.codeGenTarget = function () {
return this._codeGenTarget;
};
ImmutableCompilationSettings.prototype.moduleGenTarget = function () {
return this._moduleGenTarget;
};
ImmutableCompilationSettings.prototype.outFileOption = function () {
return this._outFileOption;
};
ImmutableCompilationSettings.prototype.outDirOption = function () {
return this._outDirOption;
};
ImmutableCompilationSettings.prototype.mapSourceFiles = function () {
return this._mapSourceFiles;
};
ImmutableCompilationSettings.prototype.mapRoot = function () {
return this._mapRoot;
};
ImmutableCompilationSettings.prototype.sourceRoot = function () {
return this._sourceRoot;
};
ImmutableCompilationSettings.prototype.generateDeclarationFiles = function () {
return this._generateDeclarationFiles;
};
ImmutableCompilationSettings.prototype.useCaseSensitiveFileResolution = function () {
return this._useCaseSensitiveFileResolution;
};
ImmutableCompilationSettings.prototype.gatherDiagnostics = function () {
return this._gatherDiagnostics;
};
ImmutableCompilationSettings.prototype.codepage = function () {
return this._codepage;
};
ImmutableCompilationSettings.prototype.createFileLog = function () {
return this._createFileLog;
};
ImmutableCompilationSettings.defaultSettings = function () {
if (!ImmutableCompilationSettings._defaultSettings) {
ImmutableCompilationSettings._defaultSettings = ImmutableCompilationSettings.fromCompilationSettings(new CompilationSettings());
}
return ImmutableCompilationSettings._defaultSettings;
};
ImmutableCompilationSettings.fromCompilationSettings = function (settings) {
return new ImmutableCompilationSettings(settings.propagateEnumConstants, settings.removeComments, settings.watch, settings.noResolve, settings.allowAutomaticSemicolonInsertion, settings.noImplicitAny, settings.noLib, settings.codeGenTarget, settings.moduleGenTarget, settings.outFileOption, settings.outDirOption, settings.mapSourceFiles, settings.mapRoot, settings.sourceRoot, settings.generateDeclarationFiles, settings.useCaseSensitiveFileResolution, settings.gatherDiagnostics, settings.codepage, settings.createFileLog);
};
ImmutableCompilationSettings.prototype.toCompilationSettings = function () {
var result = new CompilationSettings();
var thisAsIndexable = this;
var resultAsIndexable = result;
for (var name in this) {
if (this.hasOwnProperty(name) && TypeScript.StringUtilities.startsWith(name, "_")) {
resultAsIndexable[name.substr(1)] = thisAsIndexable[name];
}
}
return result;
};
return ImmutableCompilationSettings;
})();
TypeScript.ImmutableCompilationSettings = ImmutableCompilationSettings;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (PullElementFlags) {
PullElementFlags[PullElementFlags["None"] = 0] = "None";
PullElementFlags[PullElementFlags["Exported"] = 1] = "Exported";
PullElementFlags[PullElementFlags["Private"] = 1 << 1] = "Private";
PullElementFlags[PullElementFlags["Public"] = 1 << 2] = "Public";
PullElementFlags[PullElementFlags["Ambient"] = 1 << 3] = "Ambient";
PullElementFlags[PullElementFlags["Static"] = 1 << 4] = "Static";
PullElementFlags[PullElementFlags["Optional"] = 1 << 7] = "Optional";
PullElementFlags[PullElementFlags["Signature"] = 1 << 11] = "Signature";
PullElementFlags[PullElementFlags["Enum"] = 1 << 12] = "Enum";
PullElementFlags[PullElementFlags["ArrowFunction"] = 1 << 13] = "ArrowFunction";
PullElementFlags[PullElementFlags["ClassConstructorVariable"] = 1 << 14] = "ClassConstructorVariable";
PullElementFlags[PullElementFlags["InitializedModule"] = 1 << 15] = "InitializedModule";
PullElementFlags[PullElementFlags["InitializedDynamicModule"] = 1 << 16] = "InitializedDynamicModule";
PullElementFlags[PullElementFlags["MustCaptureThis"] = 1 << 18] = "MustCaptureThis";
PullElementFlags[PullElementFlags["DeclaredInAWithBlock"] = 1 << 21] = "DeclaredInAWithBlock";
PullElementFlags[PullElementFlags["HasReturnStatement"] = 1 << 22] = "HasReturnStatement";
PullElementFlags[PullElementFlags["PropertyParameter"] = 1 << 23] = "PropertyParameter";
PullElementFlags[PullElementFlags["IsAnnotatedWithAny"] = 1 << 24] = "IsAnnotatedWithAny";
PullElementFlags[PullElementFlags["HasDefaultArgs"] = 1 << 25] = "HasDefaultArgs";
PullElementFlags[PullElementFlags["ConstructorParameter"] = 1 << 26] = "ConstructorParameter";
PullElementFlags[PullElementFlags["ImplicitVariable"] = PullElementFlags.ClassConstructorVariable | PullElementFlags.InitializedModule | PullElementFlags.InitializedDynamicModule | PullElementFlags.Enum] = "ImplicitVariable";
PullElementFlags[PullElementFlags["SomeInitializedModule"] = PullElementFlags.InitializedModule | PullElementFlags.InitializedDynamicModule | PullElementFlags.Enum] = "SomeInitializedModule";
})(TypeScript.PullElementFlags || (TypeScript.PullElementFlags = {}));
var PullElementFlags = TypeScript.PullElementFlags;
function hasModifier(modifiers, flag) {
for (var i = 0, n = modifiers.length; i < n; i++) {
if (TypeScript.hasFlag(modifiers[i], flag)) {
return true;
}
}
return false;
}
TypeScript.hasModifier = hasModifier;
(function (PullElementKind) {
PullElementKind[PullElementKind["None"] = 0] = "None";
PullElementKind[PullElementKind["Global"] = 0] = "Global";
PullElementKind[PullElementKind["Script"] = 1 << 0] = "Script";
PullElementKind[PullElementKind["Primitive"] = 1 << 1] = "Primitive";
PullElementKind[PullElementKind["Container"] = 1 << 2] = "Container";
PullElementKind[PullElementKind["Class"] = 1 << 3] = "Class";
PullElementKind[PullElementKind["Interface"] = 1 << 4] = "Interface";
PullElementKind[PullElementKind["DynamicModule"] = 1 << 5] = "DynamicModule";
PullElementKind[PullElementKind["Enum"] = 1 << 6] = "Enum";
PullElementKind[PullElementKind["TypeAlias"] = 1 << 7] = "TypeAlias";
PullElementKind[PullElementKind["ObjectLiteral"] = 1 << 8] = "ObjectLiteral";
PullElementKind[PullElementKind["Variable"] = 1 << 9] = "Variable";
PullElementKind[PullElementKind["CatchVariable"] = 1 << 10] = "CatchVariable";
PullElementKind[PullElementKind["Parameter"] = 1 << 11] = "Parameter";
PullElementKind[PullElementKind["Property"] = 1 << 12] = "Property";
PullElementKind[PullElementKind["TypeParameter"] = 1 << 13] = "TypeParameter";
PullElementKind[PullElementKind["Function"] = 1 << 14] = "Function";
PullElementKind[PullElementKind["ConstructorMethod"] = 1 << 15] = "ConstructorMethod";
PullElementKind[PullElementKind["Method"] = 1 << 16] = "Method";
PullElementKind[PullElementKind["FunctionExpression"] = 1 << 17] = "FunctionExpression";
PullElementKind[PullElementKind["GetAccessor"] = 1 << 18] = "GetAccessor";
PullElementKind[PullElementKind["SetAccessor"] = 1 << 19] = "SetAccessor";
PullElementKind[PullElementKind["CallSignature"] = 1 << 20] = "CallSignature";
PullElementKind[PullElementKind["ConstructSignature"] = 1 << 21] = "ConstructSignature";
PullElementKind[PullElementKind["IndexSignature"] = 1 << 22] = "IndexSignature";
PullElementKind[PullElementKind["ObjectType"] = 1 << 23] = "ObjectType";
PullElementKind[PullElementKind["FunctionType"] = 1 << 24] = "FunctionType";
PullElementKind[PullElementKind["ConstructorType"] = 1 << 25] = "ConstructorType";
PullElementKind[PullElementKind["EnumMember"] = 1 << 26] = "EnumMember";
PullElementKind[PullElementKind["WithBlock"] = 1 << 27] = "WithBlock";
PullElementKind[PullElementKind["CatchBlock"] = 1 << 28] = "CatchBlock";
PullElementKind[PullElementKind["All"] = PullElementKind.Script | PullElementKind.Global | PullElementKind.Primitive | PullElementKind.Container | PullElementKind.Class | PullElementKind.Interface | PullElementKind.DynamicModule | PullElementKind.Enum | PullElementKind.TypeAlias | PullElementKind.ObjectLiteral | PullElementKind.Variable | PullElementKind.Parameter | PullElementKind.Property | PullElementKind.TypeParameter | PullElementKind.Function | PullElementKind.ConstructorMethod | PullElementKind.Method | PullElementKind.FunctionExpression | PullElementKind.GetAccessor | PullElementKind.SetAccessor | PullElementKind.CallSignature | PullElementKind.ConstructSignature | PullElementKind.IndexSignature | PullElementKind.ObjectType | PullElementKind.FunctionType | PullElementKind.ConstructorType | PullElementKind.EnumMember | PullElementKind.WithBlock | PullElementKind.CatchBlock] = "All";
PullElementKind[PullElementKind["SomeFunction"] = PullElementKind.Function | PullElementKind.ConstructorMethod | PullElementKind.Method | PullElementKind.FunctionExpression | PullElementKind.GetAccessor | PullElementKind.SetAccessor] = "SomeFunction";
PullElementKind[PullElementKind["SomeValue"] = PullElementKind.Variable | PullElementKind.Parameter | PullElementKind.Property | PullElementKind.EnumMember | PullElementKind.SomeFunction] = "SomeValue";
PullElementKind[PullElementKind["SomeType"] = PullElementKind.Script | PullElementKind.Global | PullElementKind.Primitive | PullElementKind.Class | PullElementKind.Interface | PullElementKind.Enum | PullElementKind.ObjectLiteral | PullElementKind.ObjectType | PullElementKind.FunctionType | PullElementKind.ConstructorType | PullElementKind.TypeParameter] = "SomeType";
PullElementKind[PullElementKind["AcceptableAlias"] = PullElementKind.Variable | PullElementKind.SomeFunction | PullElementKind.Class | PullElementKind.Interface | PullElementKind.Enum | PullElementKind.Container | PullElementKind.ObjectType | PullElementKind.FunctionType | PullElementKind.ConstructorType] = "AcceptableAlias";
PullElementKind[PullElementKind["SomeContainer"] = PullElementKind.Container | PullElementKind.DynamicModule | PullElementKind.TypeAlias] = "SomeContainer";
PullElementKind[PullElementKind["SomeSignature"] = PullElementKind.CallSignature | PullElementKind.ConstructSignature | PullElementKind.IndexSignature] = "SomeSignature";
PullElementKind[PullElementKind["SomeTypeReference"] = PullElementKind.Interface | PullElementKind.ObjectType | PullElementKind.FunctionType | PullElementKind.ConstructorType] = "SomeTypeReference";
PullElementKind[PullElementKind["SomeInstantiatableType"] = PullElementKind.Class | PullElementKind.Interface | PullElementKind.TypeParameter] = "SomeInstantiatableType";
})(TypeScript.PullElementKind || (TypeScript.PullElementKind = {}));
var PullElementKind = TypeScript.PullElementKind;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var pullDeclID = 0;
var sentinelEmptyPullDeclArray = [];
var PullDecl = (function () {
function PullDecl(declName, displayName, kind, declFlags, semanticInfoChain) {
this.declID = pullDeclID++;
this.flags = 0 /* None */;
this.declGroups = null;
this.childDecls = null;
this.typeParameters = null;
this.synthesizedValDecl = null;
this.containerDecl = null;
this.childDeclTypeCache = null;
this.childDeclValueCache = null;
this.childDeclNamespaceCache = null;
this.childDeclTypeParameterCache = null;
this.name = declName;
this.kind = kind;
this.flags = declFlags;
this.semanticInfoChain = semanticInfoChain;
if (displayName !== this.name) {
this.declDisplayName = displayName;
}
}
PullDecl.prototype.fileName = function () {
throw TypeScript.Errors.abstract();
};
PullDecl.prototype.getParentPath = function () {
throw TypeScript.Errors.abstract();
};
PullDecl.prototype.getParentDecl = function () {
throw TypeScript.Errors.abstract();
};
PullDecl.prototype.isExternalModule = function () {
throw TypeScript.Errors.abstract();
};
PullDecl.prototype.getEnclosingDecl = function () {
throw TypeScript.Errors.abstract();
};
PullDecl.prototype._getEnclosingDeclFromParentDecl = function () {
var decl = this;
while (decl) {
switch (decl.kind) {
default:
return decl;
case 512 /* Variable */:
case 8192 /* TypeParameter */:
case 2048 /* Parameter */:
case 128 /* TypeAlias */:
case 67108864 /* EnumMember */:
}
decl = decl.getParentDecl();
}
TypeScript.Debug.fail();
};
PullDecl.prototype.getDisplayName = function () {
return this.declDisplayName === undefined ? this.name : this.declDisplayName;
};
PullDecl.prototype.setSymbol = function (symbol) {
this.semanticInfoChain.setSymbolForDecl(this, symbol);
};
PullDecl.prototype.ensureSymbolIsBound = function () {
if (!this.hasBeenBound() && this.kind !== 1 /* Script */) {
var binder = this.semanticInfoChain.getBinder();
binder.bindDeclToPullSymbol(this);
}
};
PullDecl.prototype.getSymbol = function () {
if (this.kind === 1 /* Script */) {
return null;
}
this.ensureSymbolIsBound();
return this.semanticInfoChain.getSymbolForDecl(this);
};
PullDecl.prototype.hasSymbol = function () {
var symbol = this.semanticInfoChain.getSymbolForDecl(this);
return !!symbol;
};
PullDecl.prototype.setSignatureSymbol = function (signatureSymbol) {
this.semanticInfoChain.setSignatureSymbolForDecl(this, signatureSymbol);
};
PullDecl.prototype.getSignatureSymbol = function () {
this.ensureSymbolIsBound();
return this.semanticInfoChain.getSignatureSymbolForDecl(this);
};
PullDecl.prototype.hasSignatureSymbol = function () {
var signatureSymbol = this.semanticInfoChain.getSignatureSymbolForDecl(this);
return !!signatureSymbol;
};
PullDecl.prototype.setFlags = function (flags) {
this.flags = flags;
};
PullDecl.prototype.setFlag = function (flags) {
this.flags |= flags;
};
PullDecl.prototype.setValueDecl = function (valDecl) {
this.synthesizedValDecl = valDecl;
valDecl.containerDecl = this;
};
PullDecl.prototype.getValueDecl = function () {
return this.synthesizedValDecl;
};
PullDecl.prototype.getContainerDecl = function () {
return this.containerDecl;
};
PullDecl.prototype.getChildDeclCache = function (declKind) {
if (declKind === 8192 /* TypeParameter */) {
if (!this.childDeclTypeParameterCache) {
this.childDeclTypeParameterCache = TypeScript.createIntrinsicsObject();
}
return this.childDeclTypeParameterCache;
} else if (TypeScript.hasFlag(declKind, 164 /* SomeContainer */)) {
if (!this.childDeclNamespaceCache) {
this.childDeclNamespaceCache = TypeScript.createIntrinsicsObject();
}
return this.childDeclNamespaceCache;
} else if (TypeScript.hasFlag(declKind, 58728795 /* SomeType */)) {
if (!this.childDeclTypeCache) {
this.childDeclTypeCache = TypeScript.createIntrinsicsObject();
}
return this.childDeclTypeCache;
} else {
if (!this.childDeclValueCache) {
this.childDeclValueCache = TypeScript.createIntrinsicsObject();
}
return this.childDeclValueCache;
}
};
PullDecl.prototype.addChildDecl = function (childDecl) {
if (childDecl.kind === 8192 /* TypeParameter */) {
if (!this.typeParameters) {
this.typeParameters = [];
}
this.typeParameters[this.typeParameters.length] = childDecl;
} else {
if (!this.childDecls) {
this.childDecls = [];
}
this.childDecls[this.childDecls.length] = childDecl;
}
var declName = childDecl.name;
if (!(childDecl.kind & 7340032 /* SomeSignature */)) {
var cache = this.getChildDeclCache(childDecl.kind);
var childrenOfName = cache[declName];
if (!childrenOfName) {
childrenOfName = [];
}
childrenOfName.push(childDecl);
cache[declName] = childrenOfName;
}
};
PullDecl.prototype.searchChildDecls = function (declName, searchKind) {
var cacheVal = null;
if (searchKind & 58728795 /* SomeType */) {
cacheVal = this.childDeclTypeCache ? this.childDeclTypeCache[declName] : null;
} else if (searchKind & 164 /* SomeContainer */) {
cacheVal = this.childDeclNamespaceCache ? this.childDeclNamespaceCache[declName] : null;
} else {
cacheVal = this.childDeclValueCache ? this.childDeclValueCache[declName] : null;
}
if (cacheVal) {
return cacheVal;
} else {
if (searchKind & 58728795 /* SomeType */) {
cacheVal = this.childDeclTypeParameterCache ? this.childDeclTypeParameterCache[declName] : null;
if (cacheVal) {
return cacheVal;
}
}
return sentinelEmptyPullDeclArray;
}
};
PullDecl.prototype.getChildDecls = function () {
return this.childDecls || sentinelEmptyPullDeclArray;
};
PullDecl.prototype.getTypeParameters = function () {
return this.typeParameters || sentinelEmptyPullDeclArray;
};
PullDecl.prototype.addVariableDeclToGroup = function (decl) {
if (!this.declGroups) {
this.declGroups = TypeScript.createIntrinsicsObject();
}
var declGroup = this.declGroups[decl.name];
if (declGroup) {
declGroup.addDecl(decl);
} else {
declGroup = new PullDeclGroup(decl.name);
declGroup.addDecl(decl);
this.declGroups[decl.name] = declGroup;
}
};
PullDecl.prototype.getVariableDeclGroups = function () {
var declGroups = null;
if (this.declGroups) {
for (var declName in this.declGroups) {
if (this.declGroups[declName]) {
if (declGroups === null) {
declGroups = [];
}
declGroups.push(this.declGroups[declName].getDecls());
}
}
}
return declGroups || sentinelEmptyPullDeclArray;
};
PullDecl.prototype.hasBeenBound = function () {
return this.hasSymbol() || this.hasSignatureSymbol();
};
PullDecl.prototype.isSynthesized = function () {
return false;
};
PullDecl.prototype.ast = function () {
return this.semanticInfoChain.getASTForDecl(this);
};
PullDecl.prototype.isRootDecl = function () {
throw TypeScript.Errors.abstract();
};
return PullDecl;
})();
TypeScript.PullDecl = PullDecl;
var RootPullDecl = (function (_super) {
__extends(RootPullDecl, _super);
function RootPullDecl(name, fileName, kind, declFlags, semanticInfoChain, isExternalModule) {
_super.call(this, name, name, kind, declFlags, semanticInfoChain);
this.semanticInfoChain = semanticInfoChain;
this._isExternalModule = isExternalModule;
this._fileName = fileName;
}
RootPullDecl.prototype.fileName = function () {
return this._fileName;
};
RootPullDecl.prototype.getParentPath = function () {
return [this];
};
RootPullDecl.prototype.getParentDecl = function () {
return null;
};
RootPullDecl.prototype.isExternalModule = function () {
return this._isExternalModule;
};
RootPullDecl.prototype.getEnclosingDecl = function () {
return this;
};
RootPullDecl.prototype.isRootDecl = function () {
return true;
};
return RootPullDecl;
})(PullDecl);
TypeScript.RootPullDecl = RootPullDecl;
var NormalPullDecl = (function (_super) {
__extends(NormalPullDecl, _super);
function NormalPullDecl(declName, displayName, kind, declFlags, parentDecl, addToParent) {
if (typeof addToParent === "undefined") { addToParent = true; }
_super.call(this, declName, displayName, kind, declFlags, parentDecl ? parentDecl.semanticInfoChain : null);
this.parentDecl = null;
this.parentPath = null;
this.parentDecl = parentDecl;
if (addToParent) {
parentDecl.addChildDecl(this);
}
if (this.parentDecl) {
if (this.parentDecl.isRootDecl()) {
this._rootDecl = this.parentDecl;
} else {
this._rootDecl = this.parentDecl._rootDecl;
}
} else {
TypeScript.Debug.assert(this.isSynthesized());
this._rootDecl = null;
}
}
NormalPullDecl.prototype.fileName = function () {
return this._rootDecl.fileName();
};
NormalPullDecl.prototype.getParentDecl = function () {
return this.parentDecl;
};
NormalPullDecl.prototype.getParentPath = function () {
if (!this.parentPath) {
var path = [this];
var parentDecl = this.parentDecl;
while (parentDecl) {
if (parentDecl && path[path.length - 1] !== parentDecl && !(parentDecl.kind & (256 /* ObjectLiteral */ | 8388608 /* ObjectType */))) {
path.unshift(parentDecl);
}
parentDecl = parentDecl.getParentDecl();
}
this.parentPath = path;
}
return this.parentPath;
};
NormalPullDecl.prototype.isExternalModule = function () {
return false;
};
NormalPullDecl.prototype.getEnclosingDecl = function () {
return this.parentDecl && this.parentDecl._getEnclosingDeclFromParentDecl();
};
NormalPullDecl.prototype.isRootDecl = function () {
return false;
};
return NormalPullDecl;
})(PullDecl);
TypeScript.NormalPullDecl = NormalPullDecl;
var PullEnumElementDecl = (function (_super) {
__extends(PullEnumElementDecl, _super);
function PullEnumElementDecl(declName, displayName, parentDecl) {
_super.call(this, declName, displayName, 67108864 /* EnumMember */, 4 /* Public */, parentDecl);
this.constantValue = null;
}
return PullEnumElementDecl;
})(NormalPullDecl);
TypeScript.PullEnumElementDecl = PullEnumElementDecl;
var PullFunctionExpressionDecl = (function (_super) {
__extends(PullFunctionExpressionDecl, _super);
function PullFunctionExpressionDecl(expressionName, declFlags, parentDecl, displayName) {
if (typeof displayName === "undefined") { displayName = ""; }
_super.call(this, "", displayName, 131072 /* FunctionExpression */, declFlags, parentDecl);
this.functionExpressionName = expressionName;
}
PullFunctionExpressionDecl.prototype.getFunctionExpressionName = function () {
return this.functionExpressionName;
};
return PullFunctionExpressionDecl;
})(NormalPullDecl);
TypeScript.PullFunctionExpressionDecl = PullFunctionExpressionDecl;
var PullSynthesizedDecl = (function (_super) {
__extends(PullSynthesizedDecl, _super);
function PullSynthesizedDecl(declName, displayName, kind, declFlags, parentDecl, semanticInfoChain) {
_super.call(this, declName, displayName, kind, declFlags, parentDecl, false);
this.semanticInfoChain = semanticInfoChain;
}
PullSynthesizedDecl.prototype.isSynthesized = function () {
return true;
};
PullSynthesizedDecl.prototype.fileName = function () {
return this._rootDecl ? this._rootDecl.fileName() : "";
};
return PullSynthesizedDecl;
})(NormalPullDecl);
TypeScript.PullSynthesizedDecl = PullSynthesizedDecl;
var PullDeclGroup = (function () {
function PullDeclGroup(name) {
this.name = name;
this._decls = [];
}
PullDeclGroup.prototype.addDecl = function (decl) {
if (decl.name === this.name) {
this._decls[this._decls.length] = decl;
}
};
PullDeclGroup.prototype.getDecls = function () {
return this._decls;
};
return PullDeclGroup;
})();
TypeScript.PullDeclGroup = PullDeclGroup;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
TypeScript.pullSymbolID = 0;
TypeScript.sentinelEmptyArray = [];
var PullSymbol = (function () {
function PullSymbol(name, declKind) {
this.pullSymbolID = ++TypeScript.pullSymbolID;
this._container = null;
this.type = null;
this._declarations = null;
this.isResolved = false;
this.isOptional = false;
this.inResolution = false;
this.isSynthesized = false;
this.isVarArg = false;
this.rootSymbol = null;
this._enclosingSignature = null;
this._docComments = null;
this.isPrinting = false;
this.name = name;
this.kind = declKind;
}
PullSymbol.prototype.isAny = function () {
return false;
};
PullSymbol.prototype.isType = function () {
return (this.kind & 58728795 /* SomeType */) !== 0;
};
PullSymbol.prototype.isTypeReference = function () {
return false;
};
PullSymbol.prototype.isSignature = function () {
return (this.kind & 7340032 /* SomeSignature */) !== 0;
};
PullSymbol.prototype.isArrayNamedTypeReference = function () {
return false;
};
PullSymbol.prototype.isPrimitive = function () {
return this.kind === 2 /* Primitive */;
};
PullSymbol.prototype.isAccessor = function () {
return false;
};
PullSymbol.prototype.isError = function () {
return false;
};
PullSymbol.prototype.isInterface = function () {
return this.kind === 16 /* Interface */;
};
PullSymbol.prototype.isMethod = function () {
return this.kind === 65536 /* Method */;
};
PullSymbol.prototype.isProperty = function () {
return this.kind === 4096 /* Property */;
};
PullSymbol.prototype.isAlias = function () {
return false;
};
PullSymbol.prototype.isContainer = function () {
return false;
};
PullSymbol.prototype.findAliasedType = function (scopeSymbol, skipScopeSymbolAliasesLookIn, lookIntoOnlyExportedAlias, aliasSymbols, visitedScopeDeclarations) {
if (typeof aliasSymbols === "undefined") { aliasSymbols = []; }
if (typeof visitedScopeDeclarations === "undefined") { visitedScopeDeclarations = []; }
var scopeDeclarations = scopeSymbol.getDeclarations();
var scopeSymbolAliasesToLookIn = [];
for (var i = 0; i < scopeDeclarations.length; i++) {
var scopeDecl = scopeDeclarations[i];
if (!TypeScript.ArrayUtilities.contains(visitedScopeDeclarations, scopeDecl)) {
visitedScopeDeclarations.push(scopeDecl);
var childDecls = scopeDecl.getChildDecls();
for (var j = 0; j < childDecls.length; j++) {
var childDecl = childDecls[j];
if (childDecl.kind === 128 /* TypeAlias */ && (!lookIntoOnlyExportedAlias || (childDecl.flags & 1 /* Exported */))) {
var symbol = childDecl.getSymbol();
if (PullContainerSymbol.usedAsSymbol(symbol, this) || (this.rootSymbol && PullContainerSymbol.usedAsSymbol(symbol, this.rootSymbol))) {
aliasSymbols.push(symbol);
return aliasSymbols;
}
if (!skipScopeSymbolAliasesLookIn && this.isExternalModuleReferenceAlias(symbol) && (!symbol.assignedContainer().hasExportAssignment() || (symbol.assignedContainer().getExportAssignedContainerSymbol() && symbol.assignedContainer().getExportAssignedContainerSymbol().kind === 32 /* DynamicModule */))) {
scopeSymbolAliasesToLookIn.push(symbol);
}
}
}
}
}
for (var i = 0; i < scopeSymbolAliasesToLookIn.length; i++) {
var scopeSymbolAlias = scopeSymbolAliasesToLookIn[i];
aliasSymbols.push(scopeSymbolAlias);
var result = this.findAliasedType(scopeSymbolAlias.assignedContainer().hasExportAssignment() ? scopeSymbolAlias.assignedContainer().getExportAssignedContainerSymbol() : scopeSymbolAlias.assignedContainer(), false, true, aliasSymbols, visitedScopeDeclarations);
if (result) {
return result;
}
aliasSymbols.pop();
}
return null;
};
PullSymbol.prototype.getExternalAliasedSymbols = function (scopeSymbol) {
if (!scopeSymbol) {
return null;
}
var scopePath = scopeSymbol.pathToRoot();
if (scopePath.length && scopePath[scopePath.length - 1].kind === 32 /* DynamicModule */) {
var symbols = this.findAliasedType(scopePath[scopePath.length - 1]);
return symbols;
}
return null;
};
PullSymbol.prototype.isExternalModuleReferenceAlias = function (aliasSymbol) {
if (aliasSymbol) {
if (aliasSymbol.assignedValue()) {
return false;
}
if (aliasSymbol.assignedType() && aliasSymbol.assignedType() !== aliasSymbol.assignedContainer()) {
return false;
}
if (aliasSymbol.assignedContainer() && aliasSymbol.assignedContainer().kind !== 32 /* DynamicModule */) {
return false;
}
return true;
}
return false;
};
PullSymbol.prototype.getExportedInternalAliasSymbol = function (scopeSymbol) {
if (scopeSymbol) {
if (this.kind !== 128 /* TypeAlias */) {
var scopePath = scopeSymbol.pathToRoot();
for (var i = 0; i < scopePath.length; i++) {
var internalAliases = this.findAliasedType(scopeSymbol, true, true);
if (internalAliases) {
TypeScript.Debug.assert(internalAliases.length === 1);
return internalAliases[0];
}
}
}
}
return null;
};
PullSymbol.prototype.getAliasSymbolName = function (scopeSymbol, aliasNameGetter, aliasPartsNameGetter, skipInternalAlias) {
if (!skipInternalAlias) {
var internalAlias = this.getExportedInternalAliasSymbol(scopeSymbol);
if (internalAlias) {
return aliasNameGetter(internalAlias);
}
}
var externalAliases = this.getExternalAliasedSymbols(scopeSymbol);
if (externalAliases && this.isExternalModuleReferenceAlias(externalAliases[externalAliases.length - 1])) {
var aliasFullName = aliasNameGetter(externalAliases[0]);
if (!aliasFullName) {
return null;
}
for (var i = 1, symbolsLen = externalAliases.length; i < symbolsLen; i++) {
aliasFullName = aliasFullName + "." + aliasPartsNameGetter(externalAliases[i]);
}
return aliasFullName;
}
return null;
};
PullSymbol.prototype._getResolver = function () {
TypeScript.Debug.assert(this._declarations && this._declarations.length > 0);
return this._declarations[0].semanticInfoChain.getResolver();
};
PullSymbol.prototype._resolveDeclaredSymbol = function () {
return this._getResolver().resolveDeclaredSymbol(this);
};
PullSymbol.prototype.getName = function (scopeSymbol, useConstraintInName) {
var aliasName = this.getAliasSymbolName(scopeSymbol, function (symbol) {
return symbol.getName(scopeSymbol, useConstraintInName);
}, function (symbol) {
return symbol.getName();
});
return aliasName || this.name;
};
PullSymbol.prototype.getDisplayName = function (scopeSymbol, useConstraintInName, skipInternalAliasName) {
var aliasDisplayName = this.getAliasSymbolName(scopeSymbol, function (symbol) {
return symbol.getDisplayName(scopeSymbol, useConstraintInName);
}, function (symbol) {
return symbol.getDisplayName();
}, skipInternalAliasName);
if (aliasDisplayName) {
return aliasDisplayName;
}
var decls = this.getDeclarations();
var name = decls.length && decls[0].getDisplayName();
return (name && name.length) ? name : this.name;
};
PullSymbol.prototype.getIsSpecialized = function () {
return false;
};
PullSymbol.prototype.getRootSymbol = function () {
if (!this.rootSymbol) {
return this;
}
return this.rootSymbol;
};
PullSymbol.prototype.setRootSymbol = function (symbol) {
this.rootSymbol = symbol;
};
PullSymbol.prototype.setIsSynthesized = function (value) {
if (typeof value === "undefined") { value = true; }
TypeScript.Debug.assert(this.rootSymbol == null);
this.isSynthesized = value;
};
PullSymbol.prototype.getIsSynthesized = function () {
if (this.rootSymbol) {
return this.rootSymbol.getIsSynthesized();
}
return this.isSynthesized;
};
PullSymbol.prototype.setEnclosingSignature = function (signature) {
this._enclosingSignature = signature;
};
PullSymbol.prototype.getEnclosingSignature = function () {
return this._enclosingSignature;
};
PullSymbol.prototype.addDeclaration = function (decl) {
TypeScript.Debug.assert(!!decl);
if (this.rootSymbol) {
return;
}
if (!this._declarations) {
this._declarations = [decl];
} else {
this._declarations[this._declarations.length] = decl;
}
};
PullSymbol.prototype.getDeclarations = function () {
if (this.rootSymbol) {
return this.rootSymbol.getDeclarations();
}
if (!this._declarations) {
this._declarations = [];
}
return this._declarations;
};
PullSymbol.prototype.hasDeclaration = function (decl) {
if (!this._declarations) {
return false;
}
return TypeScript.ArrayUtilities.any(this._declarations, function (eachDecl) {
return eachDecl === decl;
});
};
PullSymbol.prototype.setContainer = function (containerSymbol) {
if (this.rootSymbol) {
return;
}
this._container = containerSymbol;
};
PullSymbol.prototype.getContainer = function () {
if (this.rootSymbol) {
return this.rootSymbol.getContainer();
}
return this._container;
};
PullSymbol.prototype.setResolved = function () {
this.isResolved = true;
this.inResolution = false;
};
PullSymbol.prototype.startResolving = function () {
this.inResolution = true;
};
PullSymbol.prototype.setUnresolved = function () {
this.isResolved = false;
this.inResolution = false;
};
PullSymbol.prototype.anyDeclHasFlag = function (flag) {
var declarations = this.getDeclarations();
for (var i = 0, n = declarations.length; i < n; i++) {
if (TypeScript.hasFlag(declarations[i].flags, flag)) {
return true;
}
}
return false;
};
PullSymbol.prototype.allDeclsHaveFlag = function (flag) {
var declarations = this.getDeclarations();
for (var i = 0, n = declarations.length; i < n; i++) {
if (!TypeScript.hasFlag(declarations[i].flags, flag)) {
return false;
}
}
return true;
};
PullSymbol.prototype.pathToRoot = function () {
var path = [];
var node = this;
while (node) {
if (node.isType()) {
var associatedContainerSymbol = node.getAssociatedContainerType();
if (associatedContainerSymbol) {
node = associatedContainerSymbol;
}
}
path[path.length] = node;
var nodeKind = node.kind;
if (nodeKind === 2048 /* Parameter */) {
break;
} else {
node = node.getContainer();
}
}
return path;
};
PullSymbol.unqualifiedNameReferencesDifferentSymbolInScope = function (symbol, scopePath, endScopePathIndex) {
var declPath = scopePath[0].getDeclarations()[0].getParentPath();
for (var i = 0, declIndex = declPath.length - 1; i <= endScopePathIndex; i++, declIndex--) {
if (symbol.isContainer() && scopePath[i].isContainer()) {
var scopeType = scopePath[i];
var memberSymbol = scopeType.findContainedNonMemberContainer(symbol.name, 164 /* SomeContainer */);
if (memberSymbol && memberSymbol != symbol && memberSymbol.getDeclarations()[0].getParentDecl() == declPath[declIndex]) {
return true;
}
var memberSymbol = scopeType.findNestedContainer(symbol.name, 164 /* SomeContainer */);
if (memberSymbol && memberSymbol != symbol) {
return true;
}
}
}
return false;
};
PullSymbol.prototype.findQualifyingSymbolPathInScopeSymbol = function (scopeSymbol) {
var thisPath = this.pathToRoot();
if (thisPath.length === 1) {
return thisPath;
}
var scopeSymbolPath;
if (scopeSymbol) {
scopeSymbolPath = scopeSymbol.pathToRoot();
} else {
return thisPath;
}
var thisCommonAncestorIndex = TypeScript.ArrayUtilities.indexOf(thisPath, function (thisNode) {
return TypeScript.ArrayUtilities.contains(scopeSymbolPath, thisNode);
});
if (thisCommonAncestorIndex > 0) {
var thisCommonAncestor = thisPath[thisCommonAncestorIndex];
var scopeCommonAncestorIndex = TypeScript.ArrayUtilities.indexOf(scopeSymbolPath, function (scopeNode) {
return scopeNode === thisCommonAncestor;
});
TypeScript.Debug.assert(thisPath.length - thisCommonAncestorIndex === scopeSymbolPath.length - scopeCommonAncestorIndex);
for (; thisCommonAncestorIndex < thisPath.length; thisCommonAncestorIndex++, scopeCommonAncestorIndex++) {
if (!PullSymbol.unqualifiedNameReferencesDifferentSymbolInScope(thisPath[thisCommonAncestorIndex - 1], scopeSymbolPath, scopeCommonAncestorIndex)) {
break;
}
}
}
if (thisCommonAncestorIndex >= 0 && thisCommonAncestorIndex < thisPath.length) {
return thisPath.slice(0, thisCommonAncestorIndex);
} else {
return thisPath;
}
};
PullSymbol.prototype.toString = function (scopeSymbol, useConstraintInName) {
var str = this.getNameAndTypeName(scopeSymbol);
return str;
};
PullSymbol.prototype.getNamePartForFullName = function () {
return this.getDisplayName(null, true);
};
PullSymbol.prototype.fullName = function (scopeSymbol) {
var _this = this;
var path = this.pathToRoot();
var fullName = "";
var aliasFullName = this.getAliasSymbolName(scopeSymbol, function (symbol) {
return symbol.fullName(scopeSymbol);
}, function (symbol) {
return symbol.getNamePartForFullName();
});
if (aliasFullName) {
return aliasFullName;
}
for (var i = 1; i < path.length; i++) {
var aliasFullName = path[i].getAliasSymbolName(scopeSymbol, function (symbol) {
return symbol === _this ? null : symbol.fullName(scopeSymbol);
}, function (symbol) {
return symbol.getNamePartForFullName();
});
if (aliasFullName) {
fullName = aliasFullName + "." + fullName;
break;
}
var scopedName = path[i].getNamePartForFullName();
if (path[i].kind === 32 /* DynamicModule */ && !TypeScript.isQuoted(scopedName)) {
break;
}
if (scopedName === "") {
break;
}
fullName = scopedName + "." + fullName;
}
fullName = fullName + this.getNamePartForFullName();
return fullName;
};
PullSymbol.prototype.getScopedName = function (scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName) {
var path = this.findQualifyingSymbolPathInScopeSymbol(scopeSymbol);
var fullName = "";
var aliasFullName = this.getAliasSymbolName(scopeSymbol, function (symbol) {
return symbol.getScopedName(scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName);
}, function (symbol) {
return symbol.getNamePartForFullName();
}, skipInternalAliasName);
if (aliasFullName) {
return aliasFullName;
}
for (var i = 1; i < path.length; i++) {
var kind = path[i].kind;
if (kind === 4 /* Container */ || kind === 32 /* DynamicModule */) {
var aliasFullName = path[i].getAliasSymbolName(scopeSymbol, function (symbol) {
return symbol.getScopedName(scopeSymbol, skipTypeParametersInName, false, skipInternalAliasName);
}, function (symbol) {
return symbol.getNamePartForFullName();
}, skipInternalAliasName);
if (aliasFullName) {
fullName = aliasFullName + "." + fullName;
break;
}
if (kind === 4 /* Container */) {
fullName = path[i].getDisplayName() + "." + fullName;
} else {
var displayName = path[i].getDisplayName();
if (TypeScript.isQuoted(displayName)) {
fullName = displayName + "." + fullName;
}
break;
}
} else {
break;
}
}
fullName = fullName + this.getDisplayName(scopeSymbol, useConstraintInName, skipInternalAliasName);
return fullName;
};
PullSymbol.prototype.getScopedNameEx = function (scopeSymbol, skipTypeParametersInName, useConstraintInName, getPrettyTypeName, getTypeParamMarkerInfo, skipInternalAliasName) {
var name = this.getScopedName(scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName);
return TypeScript.MemberName.create(name);
};
PullSymbol.prototype.getTypeName = function (scopeSymbol, getPrettyTypeName) {
var memberName = this.getTypeNameEx(scopeSymbol, getPrettyTypeName);
return memberName.toString();
};
PullSymbol.prototype.getTypeNameEx = function (scopeSymbol, getPrettyTypeName) {
var type = this.type;
if (type) {
var memberName = getPrettyTypeName ? this.getTypeNameForFunctionSignature("", scopeSymbol, getPrettyTypeName) : null;
if (!memberName) {
memberName = type.getScopedNameEx(scopeSymbol, false, true, getPrettyTypeName);
}
return memberName;
}
return TypeScript.MemberName.create("");
};
PullSymbol.prototype.getTypeNameForFunctionSignature = function (prefix, scopeSymbol, getPrettyTypeName) {
var type = this.type;
if (type && !type.isNamedTypeSymbol() && this.kind !== 4096 /* Property */ && this.kind !== 512 /* Variable */ && this.kind !== 2048 /* Parameter */) {
var signatures = type.getCallSignatures();
if (signatures.length === 1 || (getPrettyTypeName && signatures.length)) {
var typeName = new TypeScript.MemberNameArray();
var signatureName = PullSignatureSymbol.getSignaturesTypeNameEx(signatures, prefix, false, false, scopeSymbol, getPrettyTypeName);
typeName.addAll(signatureName);
return typeName;
}
}
return null;
};
PullSymbol.prototype.getNameAndTypeName = function (scopeSymbol) {
var nameAndTypeName = this.getNameAndTypeNameEx(scopeSymbol);
return nameAndTypeName.toString();
};
PullSymbol.prototype.getNameAndTypeNameEx = function (scopeSymbol) {
var type = this.type;
var nameStr = this.getDisplayName(scopeSymbol);
if (type) {
nameStr = nameStr + (this.isOptional ? "?" : "");
var memberName = this.getTypeNameForFunctionSignature(nameStr, scopeSymbol);
if (!memberName) {
var typeNameEx = type.getScopedNameEx(scopeSymbol);
memberName = TypeScript.MemberName.create(typeNameEx, nameStr + ": ", "");
}
return memberName;
}
return TypeScript.MemberName.create(nameStr);
};
PullSymbol.getTypeParameterString = function (typars, scopeSymbol, useContraintInName) {
return PullSymbol.getTypeParameterStringEx(typars, scopeSymbol, undefined, useContraintInName).toString();
};
PullSymbol.getTypeParameterStringEx = function (typeParameters, scopeSymbol, getTypeParamMarkerInfo, useContraintInName) {
var builder = new TypeScript.MemberNameArray();
builder.prefix = "";
if (typeParameters && typeParameters.length) {
builder.add(TypeScript.MemberName.create("<"));
for (var i = 0; i < typeParameters.length; i++) {
if (i) {
builder.add(TypeScript.MemberName.create(", "));
}
if (getTypeParamMarkerInfo) {
builder.add(new TypeScript.MemberName());
}
builder.add(typeParameters[i].getScopedNameEx(scopeSymbol, false, useContraintInName));
if (getTypeParamMarkerInfo) {
builder.add(new TypeScript.MemberName());
}
}
builder.add(TypeScript.MemberName.create(">"));
}
return builder;
};
PullSymbol.getIsExternallyVisible = function (symbol, fromIsExternallyVisibleSymbol, inIsExternallyVisibleSymbols) {
if (inIsExternallyVisibleSymbols) {
for (var i = 0; i < inIsExternallyVisibleSymbols.length; i++) {
if (inIsExternallyVisibleSymbols[i] === symbol) {
return true;
}
}
} else {
inIsExternallyVisibleSymbols = [];
}
if (fromIsExternallyVisibleSymbol === symbol) {
return true;
}
inIsExternallyVisibleSymbols.push(fromIsExternallyVisibleSymbol);
var result = symbol.isExternallyVisible(inIsExternallyVisibleSymbols);
TypeScript.Debug.assert(TypeScript.ArrayUtilities.last(inIsExternallyVisibleSymbols) === fromIsExternallyVisibleSymbol);
inIsExternallyVisibleSymbols.pop();
return result;
};
PullSymbol.prototype.isExternallyVisible = function (inIsExternallyVisibleSymbols) {
var kind = this.kind;
if (kind === 2 /* Primitive */) {
return true;
}
if (this.rootSymbol) {
return PullSymbol.getIsExternallyVisible(this.rootSymbol, this, inIsExternallyVisibleSymbols);
}
if (this.isType()) {
var associatedContainerSymbol = this.getAssociatedContainerType();
if (associatedContainerSymbol) {
return PullSymbol.getIsExternallyVisible(associatedContainerSymbol, this, inIsExternallyVisibleSymbols);
}
}
if (this.anyDeclHasFlag(2 /* Private */)) {
return false;
}
var container = this.getContainer();
if (container === null) {
var decls = this.getDeclarations();
if (decls.length) {
var parentDecl = decls[0].getParentDecl();
if (parentDecl) {
var parentSymbol = parentDecl.getSymbol();
if (!parentSymbol || parentDecl.kind === 1 /* Script */) {
return true;
}
return PullSymbol.getIsExternallyVisible(parentSymbol, this, inIsExternallyVisibleSymbols);
}
}
return true;
}
if (container.kind === 32 /* DynamicModule */ || (container.getAssociatedContainerType() && container.getAssociatedContainerType().kind === 32 /* DynamicModule */)) {
var containerSymbol = container.kind === 32 /* DynamicModule */ ? container : container.getAssociatedContainerType();
if (PullContainerSymbol.usedAsSymbol(containerSymbol, this)) {
return true;
}
}
if (!this.anyDeclHasFlag(1 /* Exported */) && kind !== 4096 /* Property */ && kind !== 65536 /* Method */) {
return false;
}
return PullSymbol.getIsExternallyVisible(container, this, inIsExternallyVisibleSymbols);
};
PullSymbol.prototype.getDocCommentsOfDecl = function (decl) {
var ast = decl.ast();
if (ast) {
var enclosingModuleDeclaration = TypeScript.ASTHelpers.getEnclosingModuleDeclaration(ast);
if (TypeScript.ASTHelpers.isLastNameOfModule(enclosingModuleDeclaration, ast)) {
return TypeScript.ASTHelpers.docComments(enclosingModuleDeclaration);
}
if (ast.kind() !== 130 /* ModuleDeclaration */ || decl.kind !== 512 /* Variable */) {
return TypeScript.ASTHelpers.docComments(ast);
}
}
return [];
};
PullSymbol.prototype.getDocCommentArray = function (symbol) {
var docComments = [];
if (!symbol) {
return docComments;
}
var isParameter = symbol.kind === 2048 /* Parameter */;
var decls = symbol.getDeclarations();
for (var i = 0; i < decls.length; i++) {
if (isParameter && decls[i].kind === 4096 /* Property */) {
continue;
}
docComments = docComments.concat(this.getDocCommentsOfDecl(decls[i]));
}
return docComments;
};
PullSymbol.getDefaultConstructorSymbolForDocComments = function (classSymbol) {
if (classSymbol.getHasDefaultConstructor()) {
var extendedTypes = classSymbol.getExtendedTypes();
if (extendedTypes.length) {
return PullSymbol.getDefaultConstructorSymbolForDocComments(extendedTypes[0]);
}
}
return classSymbol.type.getConstructSignatures()[0];
};
PullSymbol.prototype.getDocCommentText = function (comments) {
var docCommentText = new Array();
for (var c = 0; c < comments.length; c++) {
var commentText = this.getDocCommentTextValue(comments[c]);
if (commentText !== "") {
docCommentText.push(commentText);
}
}
return docCommentText.join("\n");
};
PullSymbol.prototype.getDocCommentTextValue = function (comment) {
return this.cleanJSDocComment(comment.fullText());
};
PullSymbol.prototype.docComments = function (useConstructorAsClass) {
var decls = this.getDeclarations();
if (useConstructorAsClass && decls.length && decls[0].kind === 32768 /* ConstructorMethod */) {
var classDecl = decls[0].getParentDecl();
return this.getDocCommentText(this.getDocCommentsOfDecl(classDecl));
}
if (this._docComments === null) {
var docComments = "";
if (!useConstructorAsClass && this.kind === 2097152 /* ConstructSignature */ && decls.length && decls[0].kind === 8 /* Class */) {
var classSymbol = this.returnType;
var extendedTypes = classSymbol.getExtendedTypes();
if (extendedTypes.length) {
docComments = extendedTypes[0].getConstructorMethod().docComments();
} else {
docComments = "";
}
} else if (this.kind === 2048 /* Parameter */) {
var parameterComments = [];
var funcContainer = this.getEnclosingSignature();
var funcDocComments = this.getDocCommentArray(funcContainer);
var paramComment = this.getParameterDocCommentText(this.getDisplayName(), funcDocComments);
if (paramComment != "") {
parameterComments.push(paramComment);
}
var paramSelfComment = this.getDocCommentText(this.getDocCommentArray(this));
if (paramSelfComment != "") {
parameterComments.push(paramSelfComment);
}
docComments = parameterComments.join("\n");
} else {
var getSymbolComments = true;
if (this.kind === 16777216 /* FunctionType */) {
var functionSymbol = this.getFunctionSymbol();
if (functionSymbol) {
docComments = functionSymbol._docComments || "";
getSymbolComments = false;
} else {
var declarationList = this.getDeclarations();
if (declarationList.length > 0) {
docComments = declarationList[0].getSymbol()._docComments || "";
getSymbolComments = false;
}
}
}
if (getSymbolComments) {
docComments = this.getDocCommentText(this.getDocCommentArray(this));
if (docComments === "") {
if (this.kind === 1048576 /* CallSignature */) {
var callTypeSymbol = this.functionType;
if (callTypeSymbol && callTypeSymbol.getCallSignatures().length === 1) {
docComments = callTypeSymbol.docComments();
}
}
}
}
}
this._docComments = docComments;
}
return this._docComments;
};
PullSymbol.prototype.getParameterDocCommentText = function (param, fncDocComments) {
if (fncDocComments.length === 0 || fncDocComments[0].kind() !== 6 /* MultiLineCommentTrivia */) {
return "";
}
for (var i = 0; i < fncDocComments.length; i++) {
var commentContents = fncDocComments[i].fullText();
for (var j = commentContents.indexOf("@param", 0); 0 <= j; j = commentContents.indexOf("@param", j)) {
j += 6;
if (!this.isSpaceChar(commentContents, j)) {
continue;
}
j = this.consumeLeadingSpace(commentContents, j);
if (j === -1) {
break;
}
if (commentContents.charCodeAt(j) === 123 /* openBrace */) {
j++;
var charCode = 0;
for (var curlies = 1; j < commentContents.length; j++) {
charCode = commentContents.charCodeAt(j);
if (charCode === 123 /* openBrace */) {
curlies++;
continue;
}
if (charCode === 125 /* closeBrace */) {
curlies--;
if (curlies === 0) {
break;
} else {
continue;
}
}
if (charCode === 64 /* at */) {
break;
}
}
if (j === commentContents.length) {
break;
}
if (charCode === 64 /* at */) {
continue;
}
j = this.consumeLeadingSpace(commentContents, j + 1);
if (j === -1) {
break;
}
}
if (param !== commentContents.substr(j, param.length) || !this.isSpaceChar(commentContents, j + param.length)) {
continue;
}
j = this.consumeLeadingSpace(commentContents, j + param.length);
if (j === -1) {
return "";
}
var endOfParam = commentContents.indexOf("@", j);
var paramHelpString = commentContents.substring(j, endOfParam < 0 ? commentContents.length : endOfParam);
var paramSpacesToRemove = undefined;
var paramLineIndex = commentContents.substring(0, j).lastIndexOf("\n") + 1;
if (paramLineIndex !== 0) {
if (paramLineIndex < j && commentContents.charAt(paramLineIndex + 1) === "\r") {
paramLineIndex++;
}
}
var startSpaceRemovalIndex = this.consumeLeadingSpace(commentContents, paramLineIndex);
if (startSpaceRemovalIndex !== j && commentContents.charAt(startSpaceRemovalIndex) === "*") {
paramSpacesToRemove = j - startSpaceRemovalIndex - 1;
}
return this.cleanJSDocComment(paramHelpString, paramSpacesToRemove);
}
}
return "";
};
PullSymbol.prototype.cleanJSDocComment = function (content, spacesToRemove) {
var docCommentLines = new Array();
content = content.replace("/**", "");
if (content.length >= 2 && content.charAt(content.length - 1) === "/" && content.charAt(content.length - 2) === "*") {
content = content.substring(0, content.length - 2);
}
var lines = content.split("\n");
var inParamTag = false;
for (var l = 0; l < lines.length; l++) {
var line = lines[l];
var cleanLinePos = this.cleanDocCommentLine(line, true, spacesToRemove);
if (!cleanLinePos) {
continue;
}
var docCommentText = "";
var prevPos = cleanLinePos.start;
for (var i = line.indexOf("@", cleanLinePos.start); 0 <= i && i < cleanLinePos.end; i = line.indexOf("@", i + 1)) {
var wasInParamtag = inParamTag;
if (line.indexOf("param", i + 1) === i + 1 && this.isSpaceChar(line, i + 6)) {
if (!wasInParamtag) {
docCommentText += line.substring(prevPos, i);
}
prevPos = i;
inParamTag = true;
} else if (wasInParamtag) {
prevPos = i;
inParamTag = false;
}
}
if (!inParamTag) {
docCommentText += line.substring(prevPos, cleanLinePos.end);
}
var newCleanPos = this.cleanDocCommentLine(docCommentText, false);
if (newCleanPos) {
if (spacesToRemove === undefined) {
spacesToRemove = cleanLinePos.jsDocSpacesRemoved;
}
docCommentLines.push(docCommentText);
}
}
return docCommentLines.join("\n");
};
PullSymbol.prototype.consumeLeadingSpace = function (line, startIndex, maxSpacesToRemove) {
var endIndex = line.length;
if (maxSpacesToRemove !== undefined) {
endIndex = TypeScript.MathPrototype.min(startIndex + maxSpacesToRemove, endIndex);
}
for (; startIndex < endIndex; startIndex++) {
var charCode = line.charCodeAt(startIndex);
if (charCode !== 32 /* space */ && charCode !== 9 /* tab */) {
return startIndex;
}
}
if (endIndex !== line.length) {
return endIndex;
}
return -1;
};
PullSymbol.prototype.isSpaceChar = function (line, index) {
var length = line.length;
if (index < length) {
var charCode = line.charCodeAt(index);
return charCode === 32 /* space */ || charCode === 9 /* tab */;
}
return index === length;
};
PullSymbol.prototype.cleanDocCommentLine = function (line, jsDocStyleComment, jsDocLineSpaceToRemove) {
var nonSpaceIndex = this.consumeLeadingSpace(line, 0);
if (nonSpaceIndex !== -1) {
var jsDocSpacesRemoved = nonSpaceIndex;
if (jsDocStyleComment && line.charAt(nonSpaceIndex) === '*') {
var startIndex = nonSpaceIndex + 1;
nonSpaceIndex = this.consumeLeadingSpace(line, startIndex, jsDocLineSpaceToRemove);
if (nonSpaceIndex !== -1) {
jsDocSpacesRemoved = nonSpaceIndex - startIndex;
} else {
return null;
}
}
return {
start: nonSpaceIndex,
end: line.charAt(line.length - 1) === "\r" ? line.length - 1 : line.length,
jsDocSpacesRemoved: jsDocSpacesRemoved
};
}
return null;
};
return PullSymbol;
})();
TypeScript.PullSymbol = PullSymbol;
var PullSignatureSymbol = (function (_super) {
__extends(PullSignatureSymbol, _super);
function PullSignatureSymbol(kind, _isDefinition) {
if (typeof _isDefinition === "undefined") { _isDefinition = false; }
_super.call(this, "", kind);
this._isDefinition = _isDefinition;
this._memberTypeParameterNameCache = null;
this._stringConstantOverload = undefined;
this.parameters = TypeScript.sentinelEmptyArray;
this._typeParameters = null;
this.returnType = null;
this.functionType = null;
this.hasOptionalParam = false;
this.nonOptionalParamCount = 0;
this.hasVarArgs = false;
this._allowedToReferenceTypeParameters = null;
this._instantiationCache = null;
this.hasBeenChecked = false;
this.inWrapCheck = false;
this.inWrapInfiniteExpandingReferenceCheck = false;
}
PullSignatureSymbol.prototype.isDefinition = function () {
return this._isDefinition;
};
PullSignatureSymbol.prototype.isGeneric = function () {
var typeParameters = this.getTypeParameters();
return !!typeParameters && typeParameters.length !== 0;
};
PullSignatureSymbol.prototype.addParameter = function (parameter, isOptional) {
if (typeof isOptional === "undefined") { isOptional = false; }
if (this.parameters === TypeScript.sentinelEmptyArray) {
this.parameters = [];
}
this.parameters[this.parameters.length] = parameter;
this.hasOptionalParam = isOptional;
if (!parameter.getEnclosingSignature()) {
parameter.setEnclosingSignature(this);
}
if (!isOptional) {
this.nonOptionalParamCount++;
}
};
PullSignatureSymbol.prototype.addTypeParameter = function (typeParameter) {
if (!this._typeParameters) {
this._typeParameters = [];
}
if (!this._memberTypeParameterNameCache) {
this._memberTypeParameterNameCache = TypeScript.createIntrinsicsObject();
}
this._typeParameters[this._typeParameters.length] = typeParameter;
this._memberTypeParameterNameCache[typeParameter.getName()] = typeParameter;
};
PullSignatureSymbol.prototype.addTypeParametersFromReturnType = function () {
var typeParameters = this.returnType.getTypeParameters();
for (var i = 0; i < typeParameters.length; i++) {
this.addTypeParameter(typeParameters[i]);
}
};
PullSignatureSymbol.prototype.getTypeParameters = function () {
if (!this._typeParameters) {
this._typeParameters = [];
}
return this._typeParameters;
};
PullSignatureSymbol.prototype.findTypeParameter = function (name) {
var memberSymbol;
if (!this._memberTypeParameterNameCache) {
this._memberTypeParameterNameCache = TypeScript.createIntrinsicsObject();
for (var i = 0; i < this.getTypeParameters().length; i++) {
this._memberTypeParameterNameCache[this._typeParameters[i].getName()] = this._typeParameters[i];
}
}
memberSymbol = this._memberTypeParameterNameCache[name];
return memberSymbol;
};
PullSignatureSymbol.prototype.getTypeParameterArgumentMap = function () {
return null;
};
PullSignatureSymbol.prototype.getAllowedToReferenceTypeParameters = function () {
TypeScript.Debug.assert(this.getRootSymbol() == this);
if (!this._allowedToReferenceTypeParameters) {
this._allowedToReferenceTypeParameters = TypeScript.PullInstantiationHelpers.getAllowedToReferenceTypeParametersFromDecl(this.getDeclarations()[0]);
}
return this._allowedToReferenceTypeParameters;
};
PullSignatureSymbol.prototype.addSpecialization = function (specializedVersionOfThisSignature, typeArgumentMap) {
TypeScript.Debug.assert(this.getRootSymbol() == this);
if (!this._instantiationCache) {
this._instantiationCache = TypeScript.createIntrinsicsObject();
}
this._instantiationCache[getIDForTypeSubstitutions(this, typeArgumentMap)] = specializedVersionOfThisSignature;
};
PullSignatureSymbol.prototype.getSpecialization = function (typeArgumentMap) {
TypeScript.Debug.assert(this.getRootSymbol() == this);
if (!this._instantiationCache) {
return null;
}
var result = this._instantiationCache[getIDForTypeSubstitutions(this, typeArgumentMap)];
return result || null;
};
PullSignatureSymbol.prototype.isStringConstantOverloadSignature = function () {
if (this._stringConstantOverload === undefined) {
var params = this.parameters;
this._stringConstantOverload = false;
for (var i = 0; i < params.length; i++) {
var paramType = params[i].type;
if (paramType && paramType.isPrimitive() && paramType.isStringConstant()) {
this._stringConstantOverload = true;
}
}
}
return this._stringConstantOverload;
};
PullSignatureSymbol.prototype.getParameterTypeAtIndex = function (iParam) {
if (iParam < this.parameters.length - 1 || (iParam < this.parameters.length && !this.hasVarArgs)) {
return this.parameters[iParam].type;
} else if (this.hasVarArgs) {
var paramType = this.parameters[this.parameters.length - 1].type;
if (paramType.isArrayNamedTypeReference()) {
paramType = paramType.getElementType();
}
return paramType;
}
return null;
};
PullSignatureSymbol.getSignatureTypeMemberName = function (candidateSignature, signatures, scopeSymbol) {
var allMemberNames = new TypeScript.MemberNameArray();
var signatureMemberName = PullSignatureSymbol.getSignaturesTypeNameEx(signatures, "", false, false, scopeSymbol, true, candidateSignature);
allMemberNames.addAll(signatureMemberName);
return allMemberNames;
};
PullSignatureSymbol.getSignaturesTypeNameEx = function (signatures, prefix, shortform, brackets, scopeSymbol, getPrettyTypeName, candidateSignature) {
var result = [];
if (!signatures) {
return result;
}
var len = signatures.length;
if (!getPrettyTypeName && len > 1) {
shortform = false;
}
var foundDefinition = false;
if (candidateSignature && candidateSignature.isDefinition() && len > 1) {
candidateSignature = null;
}
for (var i = 0; i < len; i++) {
if (len > 1 && signatures[i].isDefinition()) {
foundDefinition = true;
continue;
}
var signature = signatures[i];
if (getPrettyTypeName && candidateSignature) {
signature = candidateSignature;
}
result.push(signature.getSignatureTypeNameEx(prefix, shortform, brackets, scopeSymbol));
if (getPrettyTypeName) {
break;
}
}
if (getPrettyTypeName && result.length && len > 1) {
var lastMemberName = result[result.length - 1];
for (var i = i + 1; i < len; i++) {
if (signatures[i].isDefinition()) {
foundDefinition = true;
break;
}
}
var overloadString = TypeScript.getLocalizedText(TypeScript.DiagnosticCode._0_overload_s, [foundDefinition ? len - 2 : len - 1]);
lastMemberName.add(TypeScript.MemberName.create(overloadString));
}
return result;
};
PullSignatureSymbol.prototype.toString = function (scopeSymbol, useConstraintInName) {
var s = this.getSignatureTypeNameEx(this.getScopedNameEx().toString(), false, false, scopeSymbol, undefined, useConstraintInName).toString();
return s;
};
PullSignatureSymbol.prototype.getSignatureTypeNameEx = function (prefix, shortform, brackets, scopeSymbol, getParamMarkerInfo, getTypeParamMarkerInfo) {
var typeParamterBuilder = new TypeScript.MemberNameArray();
typeParamterBuilder.add(PullSymbol.getTypeParameterStringEx(this.getTypeParameters(), scopeSymbol, getTypeParamMarkerInfo, true));
if (brackets) {
typeParamterBuilder.add(TypeScript.MemberName.create("["));
} else {
typeParamterBuilder.add(TypeScript.MemberName.create("("));
}
var builder = new TypeScript.MemberNameArray();
builder.prefix = prefix;
if (getTypeParamMarkerInfo) {
builder.prefix = prefix;
builder.addAll(typeParamterBuilder.entries);
} else {
builder.prefix = prefix + typeParamterBuilder.toString();
}
var params = this.parameters;
var paramLen = params.length;
for (var i = 0; i < paramLen; i++) {
var paramType = params[i].type;
var typeString = paramType ? ": " : "";
var paramIsVarArg = params[i].isVarArg;
var varArgPrefix = paramIsVarArg ? "..." : "";
var optionalString = (!paramIsVarArg && params[i].isOptional) ? "?" : "";
if (getParamMarkerInfo) {
builder.add(new TypeScript.MemberName());
}
builder.add(TypeScript.MemberName.create(varArgPrefix + params[i].getScopedNameEx(scopeSymbol).toString() + optionalString + typeString));
if (paramType) {
builder.add(paramType.getScopedNameEx(scopeSymbol));
}
if (getParamMarkerInfo) {
builder.add(new TypeScript.MemberName());
}
if (i < paramLen - 1) {
builder.add(TypeScript.MemberName.create(", "));
}
}
if (shortform) {
if (brackets) {
builder.add(TypeScript.MemberName.create("] => "));
} else {
builder.add(TypeScript.MemberName.create(") => "));
}
} else {
if (brackets) {
builder.add(TypeScript.MemberName.create("]: "));
} else {
builder.add(TypeScript.MemberName.create("): "));
}
}
if (this.returnType) {
builder.add(this.returnType.getScopedNameEx(scopeSymbol));
} else {
builder.add(TypeScript.MemberName.create("any"));
}
return builder;
};
PullSignatureSymbol.prototype.forAllParameterTypes = function (length, predicate) {
if (this.parameters.length < length && !this.hasVarArgs) {
length = this.parameters.length;
}
for (var i = 0; i < length; i++) {
var paramType = this.getParameterTypeAtIndex(i);
if (!predicate(paramType, i)) {
return false;
}
}
return true;
};
PullSignatureSymbol.prototype.forAllCorrespondingParameterTypesInThisAndOtherSignature = function (otherSignature, predicate) {
var length;
if (this.hasVarArgs) {
length = otherSignature.hasVarArgs ? Math.max(this.parameters.length, otherSignature.parameters.length) : otherSignature.parameters.length;
} else {
length = otherSignature.hasVarArgs ? this.parameters.length : Math.min(this.parameters.length, otherSignature.parameters.length);
}
for (var i = 0; i < length; i++) {
var thisParamType = this.getParameterTypeAtIndex(i);
var otherParamType = otherSignature.getParameterTypeAtIndex(i);
if (!predicate(thisParamType, otherParamType, i)) {
return false;
}
}
return true;
};
PullSignatureSymbol.prototype.wrapsSomeTypeParameter = function (typeParameterArgumentMap) {
return this.getWrappingTypeParameterID(typeParameterArgumentMap) !== 0;
};
PullSignatureSymbol.prototype.getWrappingTypeParameterID = function (typeParameterArgumentMap) {
var signature = this;
if (signature.inWrapCheck) {
return 0;
}
this._wrapsTypeParameterCache = this._wrapsTypeParameterCache || new TypeScript.WrapsTypeParameterCache();
var wrappingTypeParameterID = this._wrapsTypeParameterCache.getWrapsTypeParameter(typeParameterArgumentMap);
if (wrappingTypeParameterID === undefined) {
wrappingTypeParameterID = this.getWrappingTypeParameterIDWorker(typeParameterArgumentMap);
this._wrapsTypeParameterCache.setWrapsTypeParameter(typeParameterArgumentMap, wrappingTypeParameterID);
}
return wrappingTypeParameterID;
};
PullSignatureSymbol.prototype.getWrappingTypeParameterIDWorker = function (typeParameterArgumentMap) {
var signature = this;
signature.inWrapCheck = true;
TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(signature);
var wrappingTypeParameterID = signature.returnType ? signature.returnType.getWrappingTypeParameterID(typeParameterArgumentMap) : 0;
var parameters = signature.parameters;
for (var i = 0; !wrappingTypeParameterID && i < parameters.length; i++) {
TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(parameters[i]);
wrappingTypeParameterID = parameters[i].type.getWrappingTypeParameterID(typeParameterArgumentMap);
}
signature.inWrapCheck = false;
return wrappingTypeParameterID;
};
PullSignatureSymbol.prototype._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference = function (enclosingType, knownWrapMap) {
var wrapsIntoInfinitelyExpandingTypeReference = knownWrapMap.valueAt(this.pullSymbolID, enclosingType.pullSymbolID);
if (wrapsIntoInfinitelyExpandingTypeReference != undefined) {
return wrapsIntoInfinitelyExpandingTypeReference;
}
if (this.inWrapInfiniteExpandingReferenceCheck) {
return false;
}
this.inWrapInfiniteExpandingReferenceCheck = true;
wrapsIntoInfinitelyExpandingTypeReference = this._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceWorker(enclosingType, knownWrapMap);
knownWrapMap.setValueAt(this.pullSymbolID, enclosingType.pullSymbolID, wrapsIntoInfinitelyExpandingTypeReference);
this.inWrapInfiniteExpandingReferenceCheck = false;
return wrapsIntoInfinitelyExpandingTypeReference;
};
PullSignatureSymbol.prototype._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceWorker = function (enclosingType, knownWrapMap) {
if (this.returnType && this.returnType._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceRecurse(enclosingType, knownWrapMap)) {
return true;
}
var parameters = this.parameters;
for (var i = 0; i < parameters.length; i++) {
if (parameters[i].type && parameters[i].type._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceRecurse(enclosingType, knownWrapMap)) {
return true;
}
}
return false;
};
return PullSignatureSymbol;
})(PullSymbol);
TypeScript.PullSignatureSymbol = PullSignatureSymbol;
var PullTypeSymbol = (function (_super) {
__extends(PullTypeSymbol, _super);
function PullTypeSymbol(name, kind) {
_super.call(this, name, kind);
this._members = TypeScript.sentinelEmptyArray;
this._enclosedMemberTypes = null;
this._enclosedMemberContainers = null;
this._typeParameters = null;
this._allowedToReferenceTypeParameters = null;
this._specializedVersionsOfThisType = null;
this._arrayVersionOfThisType = null;
this._implementedTypes = null;
this._extendedTypes = null;
this._typesThatExplicitlyImplementThisType = null;
this._typesThatExtendThisType = null;
this._callSignatures = null;
this._allCallSignatures = null;
this._constructSignatures = null;
this._indexSignatures = null;
this._allIndexSignatures = null;
this._allIndexSignaturesOfAugmentedType = null;
this._memberNameCache = null;
this._enclosedTypeNameCache = null;
this._enclosedContainerCache = null;
this._typeParameterNameCache = null;
this._containedNonMemberNameCache = null;
this._containedNonMemberTypeNameCache = null;
this._containedNonMemberContainerCache = null;
this._simpleInstantiationCache = null;
this._complexInstantiationCache = null;
this._hasGenericSignature = false;
this._hasGenericMember = false;
this._hasBaseTypeConflict = false;
this._knownBaseTypeCount = 0;
this._associatedContainerTypeSymbol = null;
this._constructorMethod = null;
this._hasDefaultConstructor = false;
this._functionSymbol = null;
this._inMemberTypeNameEx = false;
this.inSymbolPrivacyCheck = false;
this.inWrapCheck = false;
this.inWrapInfiniteExpandingReferenceCheck = false;
this.typeReference = null;
this._widenedType = null;
this._isArrayNamedTypeReference = undefined;
this.type = this;
}
PullTypeSymbol.prototype.isArrayNamedTypeReference = function () {
if (this._isArrayNamedTypeReference === undefined) {
this._isArrayNamedTypeReference = this.computeIsArrayNamedTypeReference();
}
return this._isArrayNamedTypeReference;
};
PullTypeSymbol.prototype.computeIsArrayNamedTypeReference = function () {
var typeArgs = this.getTypeArguments();
if (typeArgs && this.getTypeArguments().length === 1 && this.name === "Array") {
var declaration = this.getDeclarations()[0];
if (declaration && declaration.getParentDecl() && declaration.getParentDecl().getParentDecl() === null) {
return true;
}
}
return false;
};
PullTypeSymbol.prototype.isType = function () {
return true;
};
PullTypeSymbol.prototype.isClass = function () {
return this.kind === 8 /* Class */ || (this._constructorMethod !== null);
};
PullTypeSymbol.prototype.isFunction = function () {
return (this.kind & (33554432 /* ConstructorType */ | 16777216 /* FunctionType */)) !== 0;
};
PullTypeSymbol.prototype.isConstructor = function () {
return this.kind === 33554432 /* ConstructorType */;
};
PullTypeSymbol.prototype.isTypeParameter = function () {
return false;
};
PullTypeSymbol.prototype.isTypeVariable = function () {
return false;
};
PullTypeSymbol.prototype.isError = function () {
return false;
};
PullTypeSymbol.prototype.isEnum = function () {
return this.kind === 64 /* Enum */;
};
PullTypeSymbol.prototype.getTypeParameterArgumentMap = function () {
return null;
};
PullTypeSymbol.prototype.isObject = function () {
return TypeScript.hasFlag(this.kind, 8 /* Class */ | 33554432 /* ConstructorType */ | 64 /* Enum */ | 16777216 /* FunctionType */ | 16 /* Interface */ | 8388608 /* ObjectType */ | 256 /* ObjectLiteral */);
};
PullTypeSymbol.prototype.isFunctionType = function () {
return this.getCallSignatures().length > 0 || this.getConstructSignatures().length > 0;
};
PullTypeSymbol.prototype.getKnownBaseTypeCount = function () {
return this._knownBaseTypeCount;
};
PullTypeSymbol.prototype.resetKnownBaseTypeCount = function () {
this._knownBaseTypeCount = 0;
};
PullTypeSymbol.prototype.incrementKnownBaseCount = function () {
this._knownBaseTypeCount++;
};
PullTypeSymbol.prototype.setHasBaseTypeConflict = function () {
this._hasBaseTypeConflict = true;
};
PullTypeSymbol.prototype.hasBaseTypeConflict = function () {
return this._hasBaseTypeConflict;
};
PullTypeSymbol.prototype.hasMembers = function () {
if (this._members !== TypeScript.sentinelEmptyArray) {
return true;
}
var parents = this.getExtendedTypes();
for (var i = 0; i < parents.length; i++) {
if (parents[i].hasMembers()) {
return true;
}
}
return false;
};
PullTypeSymbol.prototype.setHasGenericSignature = function () {
this._hasGenericSignature = true;
};
PullTypeSymbol.prototype.getHasGenericSignature = function () {
return this._hasGenericSignature;
};
PullTypeSymbol.prototype.setHasGenericMember = function () {
this._hasGenericMember = true;
};
PullTypeSymbol.prototype.getHasGenericMember = function () {
return this._hasGenericMember;
};
PullTypeSymbol.prototype.setAssociatedContainerType = function (type) {
this._associatedContainerTypeSymbol = type;
};
PullTypeSymbol.prototype.getAssociatedContainerType = function () {
return this._associatedContainerTypeSymbol;
};
PullTypeSymbol.prototype.getArrayType = function () {
return this._arrayVersionOfThisType;
};
PullTypeSymbol.prototype.getElementType = function () {
return null;
};
PullTypeSymbol.prototype.setArrayType = function (arrayType) {
this._arrayVersionOfThisType = arrayType;
};
PullTypeSymbol.prototype.getFunctionSymbol = function () {
return this._functionSymbol;
};
PullTypeSymbol.prototype.setFunctionSymbol = function (symbol) {
if (symbol) {
this._functionSymbol = symbol;
}
};
PullTypeSymbol.prototype.findContainedNonMember = function (name) {
if (!this._containedNonMemberNameCache) {
return null;
}
return this._containedNonMemberNameCache[name];
};
PullTypeSymbol.prototype.findContainedNonMemberType = function (typeName, kind) {
if (typeof kind === "undefined") { kind = 0 /* None */; }
if (!this._containedNonMemberTypeNameCache) {
return null;
}
var nonMemberSymbol = this._containedNonMemberTypeNameCache[typeName];
if (nonMemberSymbol && kind !== 0 /* None */) {
nonMemberSymbol = TypeScript.hasFlag(nonMemberSymbol.kind, kind) ? nonMemberSymbol : null;
}
return nonMemberSymbol;
};
PullTypeSymbol.prototype.findContainedNonMemberContainer = function (containerName, kind) {
if (typeof kind === "undefined") { kind = 0 /* None */; }
if (!this._containedNonMemberContainerCache) {
return null;
}
var nonMemberSymbol = this._containedNonMemberContainerCache[containerName];
if (nonMemberSymbol && kind !== 0 /* None */) {
nonMemberSymbol = TypeScript.hasFlag(nonMemberSymbol.kind, kind) ? nonMemberSymbol : null;
}
return nonMemberSymbol;
};
PullTypeSymbol.prototype.addMember = function (memberSymbol) {
if (!memberSymbol) {
return;
}
memberSymbol.setContainer(this);
if (!this._memberNameCache) {
this._memberNameCache = TypeScript.createIntrinsicsObject();
}
if (this._members === TypeScript.sentinelEmptyArray) {
this._members = [];
}
this._members.push(memberSymbol);
this._memberNameCache[memberSymbol.name] = memberSymbol;
};
PullTypeSymbol.prototype.addEnclosedMemberType = function (enclosedType) {
if (!enclosedType) {
return;
}
enclosedType.setContainer(this);
if (!this._enclosedTypeNameCache) {
this._enclosedTypeNameCache = TypeScript.createIntrinsicsObject();
}
if (!this._enclosedMemberTypes) {
this._enclosedMemberTypes = [];
}
this._enclosedMemberTypes[this._enclosedMemberTypes.length] = enclosedType;
this._enclosedTypeNameCache[enclosedType.name] = enclosedType;
};
PullTypeSymbol.prototype.addEnclosedMemberContainer = function (enclosedContainer) {
if (!enclosedContainer) {
return;
}
enclosedContainer.setContainer(this);
if (!this._enclosedContainerCache) {
this._enclosedContainerCache = TypeScript.createIntrinsicsObject();
}
if (!this._enclosedMemberContainers) {
this._enclosedMemberContainers = [];
}
this._enclosedMemberContainers[this._enclosedMemberContainers.length] = enclosedContainer;
this._enclosedContainerCache[enclosedContainer.name] = enclosedContainer;
};
PullTypeSymbol.prototype.addEnclosedNonMember = function (enclosedNonMember) {
if (!enclosedNonMember) {
return;
}
enclosedNonMember.setContainer(this);
if (!this._containedNonMemberNameCache) {
this._containedNonMemberNameCache = TypeScript.createIntrinsicsObject();
}
this._containedNonMemberNameCache[enclosedNonMember.name] = enclosedNonMember;
};
PullTypeSymbol.prototype.addEnclosedNonMemberType = function (enclosedNonMemberType) {
if (!enclosedNonMemberType) {
return;
}
enclosedNonMemberType.setContainer(this);
if (!this._containedNonMemberTypeNameCache) {
this._containedNonMemberTypeNameCache = TypeScript.createIntrinsicsObject();
}
this._containedNonMemberTypeNameCache[enclosedNonMemberType.name] = enclosedNonMemberType;
};
PullTypeSymbol.prototype.addEnclosedNonMemberContainer = function (enclosedNonMemberContainer) {
if (!enclosedNonMemberContainer) {
return;
}
enclosedNonMemberContainer.setContainer(this);
if (!this._containedNonMemberContainerCache) {
this._containedNonMemberContainerCache = TypeScript.createIntrinsicsObject();
}
this._containedNonMemberContainerCache[enclosedNonMemberContainer.name] = enclosedNonMemberContainer;
};
PullTypeSymbol.prototype.addTypeParameter = function (typeParameter) {
if (!typeParameter) {
return;
}
if (!typeParameter.getContainer()) {
typeParameter.setContainer(this);
}
if (!this._typeParameterNameCache) {
this._typeParameterNameCache = TypeScript.createIntrinsicsObject();
}
if (!this._typeParameters) {
this._typeParameters = [];
}
this._typeParameters[this._typeParameters.length] = typeParameter;
this._typeParameterNameCache[typeParameter.getName()] = typeParameter;
};
PullTypeSymbol.prototype.getMembers = function () {
return this._members;
};
PullTypeSymbol.prototype.setHasDefaultConstructor = function (hasOne) {
if (typeof hasOne === "undefined") { hasOne = true; }
this._hasDefaultConstructor = hasOne;
};
PullTypeSymbol.prototype.getHasDefaultConstructor = function () {
return this._hasDefaultConstructor;
};
PullTypeSymbol.prototype.getConstructorMethod = function () {
return this._constructorMethod;
};
PullTypeSymbol.prototype.setConstructorMethod = function (constructorMethod) {
this._constructorMethod = constructorMethod;
};
PullTypeSymbol.prototype.getTypeParameters = function () {
if (!this._typeParameters) {
return TypeScript.sentinelEmptyArray;
}
return this._typeParameters;
};
PullTypeSymbol.prototype.getAllowedToReferenceTypeParameters = function () {
if (!!(this.kind && 8216 /* SomeInstantiatableType */) && this.isNamedTypeSymbol() && !this.isTypeParameter()) {
return this.getTypeParameters();
}
if (!this._allowedToReferenceTypeParameters) {
this._allowedToReferenceTypeParameters = TypeScript.PullInstantiationHelpers.getAllowedToReferenceTypeParametersFromDecl(this.getDeclarations()[0]);
}
return this._allowedToReferenceTypeParameters;
};
PullTypeSymbol.prototype.isGeneric = function () {
return (this._typeParameters && this._typeParameters.length > 0) || this._hasGenericSignature || this._hasGenericMember || this.isArrayNamedTypeReference();
};
PullTypeSymbol.prototype.canUseSimpleInstantiationCache = function (typeArgumentMap) {
if (this.isTypeParameter()) {
return true;
}
var typeParameters = this.getTypeParameters();
return typeArgumentMap && this.isNamedTypeSymbol() && typeParameters.length === 1 && typeArgumentMap[typeParameters[0].pullSymbolID].kind !== 8388608 /* ObjectType */;
};
PullTypeSymbol.prototype.getSimpleInstantiationCacheId = function (typeArgumentMap) {
if (this.isTypeParameter()) {
return typeArgumentMap[0].pullSymbolID;
}
return typeArgumentMap[this.getTypeParameters()[0].pullSymbolID].pullSymbolID;
};
PullTypeSymbol.prototype.addSpecialization = function (specializedVersionOfThisType, typeArgumentMap) {
if (this.canUseSimpleInstantiationCache(typeArgumentMap)) {
if (!this._simpleInstantiationCache) {
this._simpleInstantiationCache = [];
}
this._simpleInstantiationCache[this.getSimpleInstantiationCacheId(typeArgumentMap)] = specializedVersionOfThisType;
} else {
if (!this._complexInstantiationCache) {
this._complexInstantiationCache = TypeScript.createIntrinsicsObject();
}
this._complexInstantiationCache[getIDForTypeSubstitutions(this, typeArgumentMap)] = specializedVersionOfThisType;
}
if (!this._specializedVersionsOfThisType) {
this._specializedVersionsOfThisType = [];
}
this._specializedVersionsOfThisType.push(specializedVersionOfThisType);
};
PullTypeSymbol.prototype.getSpecialization = function (typeArgumentMap) {
if (this.canUseSimpleInstantiationCache(typeArgumentMap)) {
if (!this._simpleInstantiationCache) {
return null;
}
var result = this._simpleInstantiationCache[this.getSimpleInstantiationCacheId(typeArgumentMap)];
return result || null;
} else {
if (!this._complexInstantiationCache) {
return null;
}
if (this.getAllowedToReferenceTypeParameters().length == 0) {
return this;
}
var result = this._complexInstantiationCache[getIDForTypeSubstitutions(this, typeArgumentMap)];
return result || null;
}
};
PullTypeSymbol.prototype.getKnownSpecializations = function () {
if (!this._specializedVersionsOfThisType) {
return TypeScript.sentinelEmptyArray;
}
return this._specializedVersionsOfThisType;
};
PullTypeSymbol.prototype.getTypeArguments = function () {
return null;
};
PullTypeSymbol.prototype.getTypeArgumentsOrTypeParameters = function () {
return this.getTypeParameters();
};
PullTypeSymbol.prototype.addCallSignaturePrerequisite = function (callSignature) {
if (!this._callSignatures) {
this._callSignatures = [];
}
if (callSignature.isGeneric()) {
this._hasGenericSignature = true;
}
callSignature.functionType = this;
};
PullTypeSymbol.prototype.appendCallSignature = function (callSignature) {
this.addCallSignaturePrerequisite(callSignature);
this._callSignatures.push(callSignature);
};
PullTypeSymbol.prototype.insertCallSignatureAtIndex = function (callSignature, index) {
this.addCallSignaturePrerequisite(callSignature);
TypeScript.Debug.assert(index <= this._callSignatures.length);
if (index === this._callSignatures.length) {
this._callSignatures.push(callSignature);
} else {
this._callSignatures.splice(index, 0, callSignature);
}
};
PullTypeSymbol.prototype.addConstructSignaturePrerequisite = function (constructSignature) {
if (!this._constructSignatures) {
this._constructSignatures = [];
}
if (constructSignature.isGeneric()) {
this._hasGenericSignature = true;
}
constructSignature.functionType = this;
};
PullTypeSymbol.prototype.appendConstructSignature = function (constructSignature) {
this.addConstructSignaturePrerequisite(constructSignature);
this._constructSignatures.push(constructSignature);
};
PullTypeSymbol.prototype.insertConstructSignatureAtIndex = function (constructSignature, index) {
this.addConstructSignaturePrerequisite(constructSignature);
TypeScript.Debug.assert(index <= this._constructSignatures.length);
if (index === this._constructSignatures.length) {
this._constructSignatures.push(constructSignature);
} else {
this._constructSignatures.splice(index, 0, constructSignature);
}
};
PullTypeSymbol.prototype.addIndexSignature = function (indexSignature) {
if (!this._indexSignatures) {
this._indexSignatures = [];
}
this._indexSignatures[this._indexSignatures.length] = indexSignature;
if (indexSignature.isGeneric()) {
this._hasGenericSignature = true;
}
indexSignature.functionType = this;
};
PullTypeSymbol.prototype.hasOwnCallSignatures = function () {
return this._callSignatures !== null;
};
PullTypeSymbol.prototype.getOwnCallSignatures = function () {
return this._callSignatures || TypeScript.sentinelEmptyArray;
};
PullTypeSymbol.prototype.getCallSignatures = function () {
if (this._allCallSignatures) {
return this._allCallSignatures;
}
var signatures = [];
if (this._callSignatures) {
signatures = signatures.concat(this._callSignatures);
}
if (this._extendedTypes && this.kind === 16 /* Interface */) {
for (var i = 0; i < this._extendedTypes.length; i++) {
if (this._extendedTypes[i].hasBase(this)) {
continue;
}
this._getResolver()._addUnhiddenSignaturesFromBaseType(this._callSignatures, this._extendedTypes[i].getCallSignatures(), signatures);
}
}
this._allCallSignatures = signatures;
return signatures;
};
PullTypeSymbol.prototype.hasOwnConstructSignatures = function () {
return this._constructSignatures !== null;
};
PullTypeSymbol.prototype.getOwnConstructSignatures = function () {
return this._constructSignatures || TypeScript.sentinelEmptyArray;
};
PullTypeSymbol.prototype.getConstructSignatures = function () {
var signatures = [];
if (this._constructSignatures) {
signatures = signatures.concat(this._constructSignatures);
}
if (this._extendedTypes && this.kind === 16 /* Interface */) {
for (var i = 0; i < this._extendedTypes.length; i++) {
if (this._extendedTypes[i].hasBase(this)) {
continue;
}
this._getResolver()._addUnhiddenSignaturesFromBaseType(this._constructSignatures, this._extendedTypes[i].getConstructSignatures(), signatures);
}
}
return signatures;
};
PullTypeSymbol.prototype.hasOwnIndexSignatures = function () {
return this._indexSignatures !== null;
};
PullTypeSymbol.prototype.getOwnIndexSignatures = function () {
return this._indexSignatures || TypeScript.sentinelEmptyArray;
};
PullTypeSymbol.prototype.getIndexSignatures = function () {
if (this._allIndexSignatures) {
return this._allIndexSignatures;
}
var signatures = [];
if (this._indexSignatures) {
signatures = signatures.concat(this._indexSignatures);
}
if (this._extendedTypes) {
for (var i = 0; i < this._extendedTypes.length; i++) {
if (this._extendedTypes[i].hasBase(this)) {
continue;
}
this._getResolver()._addUnhiddenSignaturesFromBaseType(this._indexSignatures, this._extendedTypes[i].getIndexSignatures(), signatures);
}
}
this._allIndexSignatures = signatures;
return signatures;
};
PullTypeSymbol.prototype.getIndexSignaturesOfAugmentedType = function (resolver, globalFunctionInterface, globalObjectInterface) {
if (!this._allIndexSignaturesOfAugmentedType) {
var initialIndexSignatures = this.getIndexSignatures();
var shouldAddFunctionSignatures = false;
var shouldAddObjectSignatures = false;
if (globalFunctionInterface && this.isFunctionType() && this !== globalFunctionInterface) {
var functionIndexSignatures = globalFunctionInterface.getIndexSignatures();
if (functionIndexSignatures.length) {
shouldAddFunctionSignatures = true;
}
}
if (globalObjectInterface && this !== globalObjectInterface) {
var objectIndexSignatures = globalObjectInterface.getIndexSignatures();
if (objectIndexSignatures.length) {
shouldAddObjectSignatures = true;
}
}
if (shouldAddFunctionSignatures || shouldAddObjectSignatures) {
this._allIndexSignaturesOfAugmentedType = initialIndexSignatures.slice(0);
if (shouldAddFunctionSignatures) {
resolver._addUnhiddenSignaturesFromBaseType(initialIndexSignatures, functionIndexSignatures, this._allIndexSignaturesOfAugmentedType);
}
if (shouldAddObjectSignatures) {
if (shouldAddFunctionSignatures) {
initialIndexSignatures = initialIndexSignatures.concat(functionIndexSignatures);
}
resolver._addUnhiddenSignaturesFromBaseType(initialIndexSignatures, objectIndexSignatures, this._allIndexSignaturesOfAugmentedType);
}
} else {
this._allIndexSignaturesOfAugmentedType = initialIndexSignatures;
}
}
return this._allIndexSignaturesOfAugmentedType;
};
PullTypeSymbol.prototype.addImplementedType = function (implementedType) {
if (!implementedType) {
return;
}
if (!this._implementedTypes) {
this._implementedTypes = [];
}
this._implementedTypes[this._implementedTypes.length] = implementedType;
implementedType.addTypeThatExplicitlyImplementsThisType(this);
};
PullTypeSymbol.prototype.getImplementedTypes = function () {
if (!this._implementedTypes) {
return TypeScript.sentinelEmptyArray;
}
return this._implementedTypes;
};
PullTypeSymbol.prototype.addExtendedType = function (extendedType) {
if (!extendedType) {
return;
}
if (!this._extendedTypes) {
this._extendedTypes = [];
}
this._extendedTypes[this._extendedTypes.length] = extendedType;
extendedType.addTypeThatExtendsThisType(this);
};
PullTypeSymbol.prototype.getExtendedTypes = function () {
if (!this._extendedTypes) {
return TypeScript.sentinelEmptyArray;
}
return this._extendedTypes;
};
PullTypeSymbol.prototype.addTypeThatExtendsThisType = function (type) {
if (!type) {
return;
}
if (!this._typesThatExtendThisType) {
this._typesThatExtendThisType = [];
}
this._typesThatExtendThisType[this._typesThatExtendThisType.length] = type;
};
PullTypeSymbol.prototype.getTypesThatExtendThisType = function () {
if (!this._typesThatExtendThisType) {
this._typesThatExtendThisType = [];
}
return this._typesThatExtendThisType;
};
PullTypeSymbol.prototype.addTypeThatExplicitlyImplementsThisType = function (type) {
if (!type) {
return;
}
if (!this._typesThatExplicitlyImplementThisType) {
this._typesThatExplicitlyImplementThisType = [];
}
this._typesThatExplicitlyImplementThisType[this._typesThatExplicitlyImplementThisType.length] = type;
};
PullTypeSymbol.prototype.getTypesThatExplicitlyImplementThisType = function () {
if (!this._typesThatExplicitlyImplementThisType) {
this._typesThatExplicitlyImplementThisType = [];
}
return this._typesThatExplicitlyImplementThisType;
};
PullTypeSymbol.prototype.hasBase = function (potentialBase, visited) {
if (typeof visited === "undefined") { visited = []; }
if (this === potentialBase || this.getRootSymbol() === potentialBase || this === potentialBase.getRootSymbol()) {
return true;
}
if (TypeScript.ArrayUtilities.contains(visited, this)) {
return true;
}
visited.push(this);
var extendedTypes = this.getExtendedTypes();
for (var i = 0; i < extendedTypes.length; i++) {
if (extendedTypes[i].hasBase(potentialBase, visited)) {
return true;
}
}
var implementedTypes = this.getImplementedTypes();
for (var i = 0; i < implementedTypes.length; i++) {
if (implementedTypes[i].hasBase(potentialBase, visited)) {
return true;
}
}
visited.pop();
return false;
};
PullTypeSymbol.prototype.isValidBaseKind = function (baseType, isExtendedType) {
if (baseType.isError()) {
return false;
}
var thisIsClass = this.isClass();
if (isExtendedType) {
if (thisIsClass) {
return baseType.kind === 8 /* Class */;
}
} else {
if (!thisIsClass) {
return false;
}
}
return !!(baseType.kind & (16 /* Interface */ | 8 /* Class */));
};
PullTypeSymbol.prototype.findMember = function (name, lookInParent) {
var memberSymbol = null;
if (this._memberNameCache) {
memberSymbol = this._memberNameCache[name];
}
if (memberSymbol || !lookInParent) {
return memberSymbol;
}
if (this._extendedTypes) {
for (var i = 0; i < this._extendedTypes.length; i++) {
memberSymbol = this._extendedTypes[i].findMember(name, lookInParent);
if (memberSymbol) {
return memberSymbol;
}
}
}
return null;
};
PullTypeSymbol.prototype.findNestedType = function (name, kind) {
if (typeof kind === "undefined") { kind = 0 /* None */; }
var memberSymbol;
if (!this._enclosedTypeNameCache) {
return null;
}
memberSymbol = this._enclosedTypeNameCache[name];
if (memberSymbol && kind !== 0 /* None */) {
memberSymbol = TypeScript.hasFlag(memberSymbol.kind, kind) ? memberSymbol : null;
}
return memberSymbol;
};
PullTypeSymbol.prototype.findNestedContainer = function (name, kind) {
if (typeof kind === "undefined") { kind = 0 /* None */; }
var memberSymbol;
if (!this._enclosedContainerCache) {
return null;
}
memberSymbol = this._enclosedContainerCache[name];
if (memberSymbol && kind !== 0 /* None */) {
memberSymbol = TypeScript.hasFlag(memberSymbol.kind, kind) ? memberSymbol : null;
}
return memberSymbol;
};
PullTypeSymbol.prototype.getAllMembers = function (searchDeclKind, memberVisiblity) {
var allMembers = [];
if (this._members !== TypeScript.sentinelEmptyArray) {
for (var i = 0, n = this._members.length; i < n; i++) {
var member = this._members[i];
if ((member.kind & searchDeclKind) && (memberVisiblity !== 2 /* externallyVisible */ || !member.anyDeclHasFlag(2 /* Private */))) {
allMembers[allMembers.length] = member;
}
}
}
if (this._extendedTypes) {
var extenedMembersVisibility = memberVisiblity !== 0 /* all */ ? 2 /* externallyVisible */ : 0 /* all */;
for (var i = 0, n = this._extendedTypes.length; i < n; i++) {
var extendedMembers = this._extendedTypes[i].getAllMembers(searchDeclKind, extenedMembersVisibility);
for (var j = 0, m = extendedMembers.length; j < m; j++) {
var extendedMember = extendedMembers[j];
if (!(this._memberNameCache && this._memberNameCache[extendedMember.name])) {
allMembers[allMembers.length] = extendedMember;
}
}
}
}
if (this.isContainer()) {
if (this._enclosedMemberTypes) {
for (var i = 0; i < this._enclosedMemberTypes.length; i++) {
allMembers[allMembers.length] = this._enclosedMemberTypes[i];
}
}
if (this._enclosedMemberContainers) {
for (var i = 0; i < this._enclosedMemberContainers.length; i++) {
allMembers[allMembers.length] = this._enclosedMemberContainers[i];
}
}
}
return allMembers;
};
PullTypeSymbol.prototype.findTypeParameter = function (name) {
if (!this._typeParameterNameCache) {
return null;
}
return this._typeParameterNameCache[name];
};
PullTypeSymbol.prototype.setResolved = function () {
_super.prototype.setResolved.call(this);
};
PullTypeSymbol.prototype.getNamePartForFullName = function () {
var name = _super.prototype.getNamePartForFullName.call(this);
var typars = this.getTypeArgumentsOrTypeParameters();
var typarString = PullSymbol.getTypeParameterString(typars, this, true);
return name + typarString;
};
PullTypeSymbol.prototype.getScopedName = function (scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName) {
return this.getScopedNameEx(scopeSymbol, skipTypeParametersInName, useConstraintInName, false, false, skipInternalAliasName).toString();
};
PullTypeSymbol.prototype.isNamedTypeSymbol = function () {
var kind = this.kind;
if (kind === 2 /* Primitive */ || kind === 8 /* Class */ || kind === 4 /* Container */ || kind === 32 /* DynamicModule */ || kind === 128 /* TypeAlias */ || kind === 64 /* Enum */ || kind === 8192 /* TypeParameter */ || ((kind === 16 /* Interface */ || kind === 8388608 /* ObjectType */) && this.name !== "")) {
return true;
}
return false;
};
PullTypeSymbol.prototype.toString = function (scopeSymbol, useConstraintInName) {
var s = this.getScopedNameEx(scopeSymbol, false, useConstraintInName).toString();
return s;
};
PullTypeSymbol.prototype.getScopedNameEx = function (scopeSymbol, skipTypeParametersInName, useConstraintInName, getPrettyTypeName, getTypeParamMarkerInfo, skipInternalAliasName, shouldAllowArrayType) {
if (typeof shouldAllowArrayType === "undefined") { shouldAllowArrayType = true; }
if (this.isArrayNamedTypeReference() && shouldAllowArrayType) {
var elementType = this.getElementType();
var elementMemberName = elementType ? (elementType.isArrayNamedTypeReference() || elementType.isNamedTypeSymbol() ? elementType.getScopedNameEx(scopeSymbol, false, false, getPrettyTypeName, getTypeParamMarkerInfo, skipInternalAliasName) : elementType.getMemberTypeNameEx(false, scopeSymbol, getPrettyTypeName)) : TypeScript.MemberName.create("any");
return TypeScript.MemberName.create(elementMemberName, "", "[]");
}
if (!this.isNamedTypeSymbol()) {
return this.getMemberTypeNameEx(true, scopeSymbol, getPrettyTypeName);
}
if (skipTypeParametersInName) {
return TypeScript.MemberName.create(_super.prototype.getScopedName.call(this, scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName));
} else {
var builder = new TypeScript.MemberNameArray();
builder.prefix = _super.prototype.getScopedName.call(this, scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName);
var typars = this.getTypeArgumentsOrTypeParameters();
builder.add(PullSymbol.getTypeParameterStringEx(typars, scopeSymbol, getTypeParamMarkerInfo, useConstraintInName));
return builder;
}
};
PullTypeSymbol.prototype.hasOnlyOverloadCallSignatures = function () {
var members = this.getMembers();
var callSignatures = this.getCallSignatures();
var constructSignatures = this.getConstructSignatures();
return members.length === 0 && constructSignatures.length === 0 && callSignatures.length > 1;
};
PullTypeSymbol.prototype.getTypeOfSymbol = function () {
var associatedContainerType = this.getAssociatedContainerType();
if (associatedContainerType && associatedContainerType.isNamedTypeSymbol()) {
return associatedContainerType;
}
var functionSymbol = this.getFunctionSymbol();
if (functionSymbol && functionSymbol.kind === 16384 /* Function */ && !TypeScript.PullHelpers.isSymbolLocal(functionSymbol)) {
return TypeScript.PullHelpers.isExportedSymbolInClodule(functionSymbol) ? null : functionSymbol;
}
return null;
};
PullTypeSymbol.prototype.getMemberTypeNameEx = function (topLevel, scopeSymbol, getPrettyTypeName) {
var members = this.getMembers();
var callSignatures = this.getCallSignatures();
var constructSignatures = this.getConstructSignatures();
var indexSignatures = this.getIndexSignatures();
if (members.length > 0 || callSignatures.length > 0 || constructSignatures.length > 0 || indexSignatures.length > 0) {
var typeOfSymbol = this.getTypeOfSymbol();
if (typeOfSymbol) {
var nameForTypeOf = typeOfSymbol.getScopedNameEx(scopeSymbol, true);
return TypeScript.MemberName.create(nameForTypeOf, "typeof ", "");
}
if (this._inMemberTypeNameEx) {
return TypeScript.MemberName.create("any");
}
this._inMemberTypeNameEx = true;
var allMemberNames = new TypeScript.MemberNameArray();
var curlies = !topLevel || indexSignatures.length !== 0;
var delim = "; ";
for (var i = 0; i < members.length; i++) {
if (members[i].kind === 65536 /* Method */ && members[i].type.hasOnlyOverloadCallSignatures()) {
var methodCallSignatures = members[i].type.getCallSignatures();
var nameStr = members[i].getDisplayName(scopeSymbol) + (members[i].isOptional ? "?" : "");
;
var methodMemberNames = PullSignatureSymbol.getSignaturesTypeNameEx(methodCallSignatures, nameStr, false, false, scopeSymbol);
allMemberNames.addAll(methodMemberNames);
} else {
var memberTypeName = members[i].getNameAndTypeNameEx(scopeSymbol);
if (memberTypeName.isArray() && memberTypeName.delim === delim) {
allMemberNames.addAll(memberTypeName.entries);
} else {
allMemberNames.add(memberTypeName);
}
}
curlies = true;
}
var getPrettyFunctionOverload = getPrettyTypeName && !curlies && this.hasOnlyOverloadCallSignatures();
var signatureCount = callSignatures.length + constructSignatures.length + indexSignatures.length;
var useShortFormSignature = !curlies && (signatureCount === 1);
var signatureMemberName;
if (callSignatures.length > 0) {
signatureMemberName = PullSignatureSymbol.getSignaturesTypeNameEx(callSignatures, "", useShortFormSignature, false, scopeSymbol, getPrettyFunctionOverload);
allMemberNames.addAll(signatureMemberName);
}
if (constructSignatures.length > 0) {
signatureMemberName = PullSignatureSymbol.getSignaturesTypeNameEx(constructSignatures, "new", useShortFormSignature, false, scopeSymbol);
allMemberNames.addAll(signatureMemberName);
}
if (indexSignatures.length > 0) {
signatureMemberName = PullSignatureSymbol.getSignaturesTypeNameEx(indexSignatures, "", useShortFormSignature, true, scopeSymbol);
allMemberNames.addAll(signatureMemberName);
}
if ((curlies) || (!getPrettyFunctionOverload && (signatureCount > 1) && topLevel)) {
allMemberNames.prefix = "{ ";
allMemberNames.suffix = "}";
allMemberNames.delim = delim;
} else if (allMemberNames.entries.length > 1) {
allMemberNames.delim = delim;
}
this._inMemberTypeNameEx = false;
return allMemberNames;
}
return TypeScript.MemberName.create("{}");
};
PullTypeSymbol.prototype.getGenerativeTypeClassification = function (enclosingType) {
return 2 /* Closed */;
};
PullTypeSymbol.prototype.wrapsSomeTypeParameter = function (typeParameterArgumentMap, skipTypeArgumentCheck) {
return this.getWrappingTypeParameterID(typeParameterArgumentMap, skipTypeArgumentCheck) != 0;
};
PullTypeSymbol.prototype.getWrappingTypeParameterID = function (typeParameterArgumentMap, skipTypeArgumentCheck) {
var type = this;
if (type.isTypeParameter()) {
if (typeParameterArgumentMap[type.pullSymbolID] || typeParameterArgumentMap[type.getRootSymbol().pullSymbolID]) {
return type.pullSymbolID;
}
var constraint = type.getConstraint();
var wrappingTypeParameterID = constraint ? constraint.getWrappingTypeParameterID(typeParameterArgumentMap) : 0;
return wrappingTypeParameterID;
}
if (type.inWrapCheck) {
return 0;
}
this._wrapsTypeParameterCache = this._wrapsTypeParameterCache || new TypeScript.WrapsTypeParameterCache();
var wrappingTypeParameterID = this._wrapsTypeParameterCache.getWrapsTypeParameter(typeParameterArgumentMap);
if (wrappingTypeParameterID === undefined) {
wrappingTypeParameterID = this.getWrappingTypeParameterIDWorker(typeParameterArgumentMap, skipTypeArgumentCheck);
this._wrapsTypeParameterCache.setWrapsTypeParameter(typeParameterArgumentMap, wrappingTypeParameterID);
}
return wrappingTypeParameterID;
};
PullTypeSymbol.prototype.getWrappingTypeParameterIDFromSignatures = function (signatures, typeParameterArgumentMap) {
for (var i = 0; i < signatures.length; i++) {
var wrappingTypeParameterID = signatures[i].getWrappingTypeParameterID(typeParameterArgumentMap);
if (wrappingTypeParameterID !== 0) {
return wrappingTypeParameterID;
}
}
return 0;
};
PullTypeSymbol.prototype.getWrappingTypeParameterIDWorker = function (typeParameterArgumentMap, skipTypeArgumentCheck) {
var type = this;
var wrappingTypeParameterID = 0;
if (!skipTypeArgumentCheck) {
type.inWrapCheck = true;
var typeArguments = type.getTypeArguments();
if (type.isGeneric() && !typeArguments) {
typeArguments = type.getTypeParameters();
}
if (typeArguments) {
for (var i = 0; !wrappingTypeParameterID && i < typeArguments.length; i++) {
wrappingTypeParameterID = typeArguments[i].getWrappingTypeParameterID(typeParameterArgumentMap);
}
}
}
if (skipTypeArgumentCheck || !(type.kind & 8216 /* SomeInstantiatableType */) || !type.name) {
var members = type.getAllMembers(68147712 /* SomeValue */, 0 /* all */);
for (var i = 0; !wrappingTypeParameterID && i < members.length; i++) {
TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(members[i]);
wrappingTypeParameterID = members[i].type.getWrappingTypeParameterID(typeParameterArgumentMap);
}
wrappingTypeParameterID = wrappingTypeParameterID || this.getWrappingTypeParameterIDFromSignatures(type.getCallSignatures(), typeParameterArgumentMap) || this.getWrappingTypeParameterIDFromSignatures(type.getConstructSignatures(), typeParameterArgumentMap) || this.getWrappingTypeParameterIDFromSignatures(type.getIndexSignatures(), typeParameterArgumentMap);
}
if (!skipTypeArgumentCheck) {
type.inWrapCheck = false;
}
return wrappingTypeParameterID;
};
PullTypeSymbol.prototype.wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference = function (enclosingType) {
TypeScript.Debug.assert(this.isNamedTypeSymbol());
TypeScript.Debug.assert(TypeScript.PullHelpers.getRootType(enclosingType) == enclosingType);
var knownWrapMap = TypeScript.BitMatrix.getBitMatrix(true);
var wrapsIntoInfinitelyExpandingTypeReference = this._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceRecurse(enclosingType, knownWrapMap);
knownWrapMap.release();
return wrapsIntoInfinitelyExpandingTypeReference;
};
PullTypeSymbol.prototype._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceRecurse = function (enclosingType, knownWrapMap) {
var wrapsIntoInfinitelyExpandingTypeReference = knownWrapMap.valueAt(this.pullSymbolID, enclosingType.pullSymbolID);
if (wrapsIntoInfinitelyExpandingTypeReference != undefined) {
return wrapsIntoInfinitelyExpandingTypeReference;
}
if (this.inWrapInfiniteExpandingReferenceCheck) {
return false;
}
this.inWrapInfiniteExpandingReferenceCheck = true;
wrapsIntoInfinitelyExpandingTypeReference = this._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceWorker(enclosingType, knownWrapMap);
knownWrapMap.setValueAt(this.pullSymbolID, enclosingType.pullSymbolID, wrapsIntoInfinitelyExpandingTypeReference);
this.inWrapInfiniteExpandingReferenceCheck = false;
return wrapsIntoInfinitelyExpandingTypeReference;
};
PullTypeSymbol.prototype._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceWorker = function (enclosingType, knownWrapMap) {
var thisRootType = TypeScript.PullHelpers.getRootType(this);
if (thisRootType != enclosingType) {
var thisIsNamedType = this.isNamedTypeSymbol();
if (thisIsNamedType) {
if (thisRootType.inWrapInfiniteExpandingReferenceCheck) {
return false;
}
thisRootType.inWrapInfiniteExpandingReferenceCheck = true;
}
var wrapsIntoInfinitelyExpandingTypeReference = this._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceStructure(enclosingType, knownWrapMap);
if (thisIsNamedType) {
thisRootType.inWrapInfiniteExpandingReferenceCheck = false;
}
return wrapsIntoInfinitelyExpandingTypeReference;
}
var enclosingTypeParameters = enclosingType.getTypeParameters();
var typeArguments = this.getTypeArguments();
for (var i = 0; i < typeArguments.length; i++) {
if (TypeScript.ArrayUtilities.contains(enclosingTypeParameters, typeArguments[i])) {
continue;
}
if (typeArguments[i].wrapsSomeTypeParameter(this.getTypeParameterArgumentMap())) {
return true;
}
}
return false;
};
PullTypeSymbol.prototype._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceStructure = function (enclosingType, knownWrapMap) {
var members = this.getAllMembers(68147712 /* SomeValue */, 0 /* all */);
for (var i = 0; i < members.length; i++) {
if (members[i].type && members[i].type._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceRecurse(enclosingType, knownWrapMap)) {
return true;
}
}
var sigs = this.getCallSignatures();
for (var i = 0; i < sigs.length; i++) {
if (sigs[i]._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference(enclosingType, knownWrapMap)) {
return true;
}
}
sigs = this.getConstructSignatures();
for (var i = 0; i < sigs.length; i++) {
if (sigs[i]._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference(enclosingType, knownWrapMap)) {
return true;
}
}
sigs = this.getIndexSignatures();
for (var i = 0; i < sigs.length; i++) {
if (sigs[i]._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference(enclosingType, knownWrapMap)) {
return true;
}
}
return false;
};
PullTypeSymbol.prototype.widenedType = function (resolver, ast, context) {
if (!this._widenedType) {
this._widenedType = resolver.widenType(this, ast, context);
}
return this._widenedType;
};
return PullTypeSymbol;
})(PullSymbol);
TypeScript.PullTypeSymbol = PullTypeSymbol;
var PullPrimitiveTypeSymbol = (function (_super) {
__extends(PullPrimitiveTypeSymbol, _super);
function PullPrimitiveTypeSymbol(name) {
_super.call(this, name, 2 /* Primitive */);
this.isResolved = true;
}
PullPrimitiveTypeSymbol.prototype.isAny = function () {
return !this.isStringConstant() && this.name === "any";
};
PullPrimitiveTypeSymbol.prototype.isNull = function () {
return !this.isStringConstant() && this.name === "null";
};
PullPrimitiveTypeSymbol.prototype.isUndefined = function () {
return !this.isStringConstant() && this.name === "undefined";
};
PullPrimitiveTypeSymbol.prototype.isStringConstant = function () {
return false;
};
PullPrimitiveTypeSymbol.prototype.setUnresolved = function () {
};
PullPrimitiveTypeSymbol.prototype.getDisplayName = function () {
if (this.isNull() || this.isUndefined()) {
return "any";
} else {
return _super.prototype.getDisplayName.call(this);
}
};
return PullPrimitiveTypeSymbol;
})(PullTypeSymbol);
TypeScript.PullPrimitiveTypeSymbol = PullPrimitiveTypeSymbol;
var PullStringConstantTypeSymbol = (function (_super) {
__extends(PullStringConstantTypeSymbol, _super);
function PullStringConstantTypeSymbol(name) {
_super.call(this, name);
}
PullStringConstantTypeSymbol.prototype.isStringConstant = function () {
return true;
};
return PullStringConstantTypeSymbol;
})(PullPrimitiveTypeSymbol);
TypeScript.PullStringConstantTypeSymbol = PullStringConstantTypeSymbol;
var PullErrorTypeSymbol = (function (_super) {
__extends(PullErrorTypeSymbol, _super);
function PullErrorTypeSymbol(_anyType, name) {
_super.call(this, name);
this._anyType = _anyType;
TypeScript.Debug.assert(this._anyType);
this.isResolved = true;
}
PullErrorTypeSymbol.prototype.isError = function () {
return true;
};
PullErrorTypeSymbol.prototype._getResolver = function () {
return this._anyType._getResolver();
};
PullErrorTypeSymbol.prototype.getName = function (scopeSymbol, useConstraintInName) {
return this._anyType.getName(scopeSymbol, useConstraintInName);
};
PullErrorTypeSymbol.prototype.getDisplayName = function (scopeSymbol, useConstraintInName, skipInternalAliasName) {
return this._anyType.getName(scopeSymbol, useConstraintInName);
};
PullErrorTypeSymbol.prototype.toString = function (scopeSymbol, useConstraintInName) {
return this._anyType.getName(scopeSymbol, useConstraintInName);
};
return PullErrorTypeSymbol;
})(PullPrimitiveTypeSymbol);
TypeScript.PullErrorTypeSymbol = PullErrorTypeSymbol;
var PullContainerSymbol = (function (_super) {
__extends(PullContainerSymbol, _super);
function PullContainerSymbol(name, kind) {
_super.call(this, name, kind);
this.instanceSymbol = null;
this.assignedValue = null;
this.assignedType = null;
this.assignedContainer = null;
}
PullContainerSymbol.prototype.isContainer = function () {
return true;
};
PullContainerSymbol.prototype.setInstanceSymbol = function (symbol) {
this.instanceSymbol = symbol;
};
PullContainerSymbol.prototype.getInstanceSymbol = function () {
return this.instanceSymbol;
};
PullContainerSymbol.prototype.setExportAssignedValueSymbol = function (symbol) {
this.assignedValue = symbol;
};
PullContainerSymbol.prototype.getExportAssignedValueSymbol = function () {
return this.assignedValue;
};
PullContainerSymbol.prototype.setExportAssignedTypeSymbol = function (type) {
this.assignedType = type;
};
PullContainerSymbol.prototype.getExportAssignedTypeSymbol = function () {
return this.assignedType;
};
PullContainerSymbol.prototype.setExportAssignedContainerSymbol = function (container) {
this.assignedContainer = container;
};
PullContainerSymbol.prototype.getExportAssignedContainerSymbol = function () {
return this.assignedContainer;
};
PullContainerSymbol.prototype.hasExportAssignment = function () {
return !!this.assignedValue || !!this.assignedType || !!this.assignedContainer;
};
PullContainerSymbol.usedAsSymbol = function (containerSymbol, symbol) {
if (!containerSymbol || !containerSymbol.isContainer()) {
return false;
}
if (!containerSymbol.isAlias() && containerSymbol.type === symbol) {
return true;
}
var moduleSymbol = containerSymbol;
var valueExportSymbol = moduleSymbol.getExportAssignedValueSymbol();
var typeExportSymbol = moduleSymbol.getExportAssignedTypeSymbol();
var containerExportSymbol = moduleSymbol.getExportAssignedContainerSymbol();
if (valueExportSymbol || typeExportSymbol || containerExportSymbol) {
return valueExportSymbol === symbol || typeExportSymbol == symbol || containerExportSymbol == symbol || PullContainerSymbol.usedAsSymbol(containerExportSymbol, symbol);
}
return false;
};
PullContainerSymbol.prototype.getInstanceType = function () {
return this.instanceSymbol ? this.instanceSymbol.type : null;
};
return PullContainerSymbol;
})(PullTypeSymbol);
TypeScript.PullContainerSymbol = PullContainerSymbol;
var PullTypeAliasSymbol = (function (_super) {
__extends(PullTypeAliasSymbol, _super);
function PullTypeAliasSymbol(name) {
_super.call(this, name, 128 /* TypeAlias */);
this._assignedValue = null;
this._assignedType = null;
this._assignedContainer = null;
this._isUsedAsValue = false;
this._typeUsedExternally = false;
this._isUsedInExportAlias = false;
this.retrievingExportAssignment = false;
this.linkedAliasSymbols = null;
}
PullTypeAliasSymbol.prototype.isUsedInExportedAlias = function () {
this._resolveDeclaredSymbol();
return this._isUsedInExportAlias;
};
PullTypeAliasSymbol.prototype.typeUsedExternally = function () {
this._resolveDeclaredSymbol();
return this._typeUsedExternally;
};
PullTypeAliasSymbol.prototype.isUsedAsValue = function () {
this._resolveDeclaredSymbol();
return this._isUsedAsValue;
};
PullTypeAliasSymbol.prototype.setTypeUsedExternally = function () {
this._typeUsedExternally = true;
};
PullTypeAliasSymbol.prototype.setIsUsedInExportedAlias = function () {
this._isUsedInExportAlias = true;
if (this.linkedAliasSymbols) {
this.linkedAliasSymbols.forEach(function (s) {
return s.setIsUsedInExportedAlias();
});
}
};
PullTypeAliasSymbol.prototype.addLinkedAliasSymbol = function (contingentValueSymbol) {
if (!this.linkedAliasSymbols) {
this.linkedAliasSymbols = [contingentValueSymbol];
} else {
this.linkedAliasSymbols.push(contingentValueSymbol);
}
};
PullTypeAliasSymbol.prototype.setIsUsedAsValue = function () {
this._isUsedAsValue = true;
if (this.linkedAliasSymbols) {
this.linkedAliasSymbols.forEach(function (s) {
return s.setIsUsedAsValue();
});
}
};
PullTypeAliasSymbol.prototype.assignedValue = function () {
this._resolveDeclaredSymbol();
return this._assignedValue;
};
PullTypeAliasSymbol.prototype.assignedType = function () {
this._resolveDeclaredSymbol();
return this._assignedType;
};
PullTypeAliasSymbol.prototype.assignedContainer = function () {
this._resolveDeclaredSymbol();
return this._assignedContainer;
};
PullTypeAliasSymbol.prototype.isAlias = function () {
return true;
};
PullTypeAliasSymbol.prototype.isContainer = function () {
return true;
};
PullTypeAliasSymbol.prototype.setAssignedValueSymbol = function (symbol) {
this._assignedValue = symbol;
};
PullTypeAliasSymbol.prototype.getExportAssignedValueSymbol = function () {
if (this._assignedValue) {
return this._assignedValue;
}
if (this.retrievingExportAssignment) {
return null;
}
if (this._assignedContainer) {
this.retrievingExportAssignment = true;
var sym = this._assignedContainer.getExportAssignedValueSymbol();
this.retrievingExportAssignment = false;
return sym;
}
return null;
};
PullTypeAliasSymbol.prototype.setAssignedTypeSymbol = function (type) {
this._assignedType = type;
};
PullTypeAliasSymbol.prototype.getExportAssignedTypeSymbol = function () {
if (this.retrievingExportAssignment) {
return null;
}
if (this._assignedType) {
if (this._assignedType.isAlias()) {
this.retrievingExportAssignment = true;
var sym = this._assignedType.getExportAssignedTypeSymbol();
this.retrievingExportAssignment = false;
} else if (this._assignedType !== this._assignedContainer) {
return this._assignedType;
}
}
if (this._assignedContainer) {
this.retrievingExportAssignment = true;
var sym = this._assignedContainer.getExportAssignedTypeSymbol();
this.retrievingExportAssignment = false;
if (sym) {
return sym;
}
}
return this._assignedContainer;
};
PullTypeAliasSymbol.prototype.setAssignedContainerSymbol = function (container) {
this._assignedContainer = container;
};
PullTypeAliasSymbol.prototype.getExportAssignedContainerSymbol = function () {
if (this.retrievingExportAssignment) {
return null;
}
if (this._assignedContainer) {
this.retrievingExportAssignment = true;
var sym = this._assignedContainer.getExportAssignedContainerSymbol();
this.retrievingExportAssignment = false;
if (sym) {
return sym;
}
}
return this._assignedContainer;
};
PullTypeAliasSymbol.prototype.getMembers = function () {
if (this._assignedType) {
return this._assignedType.getMembers();
}
return TypeScript.sentinelEmptyArray;
};
PullTypeAliasSymbol.prototype.getCallSignatures = function () {
if (this._assignedType) {
return this._assignedType.getCallSignatures();
}
return TypeScript.sentinelEmptyArray;
};
PullTypeAliasSymbol.prototype.getConstructSignatures = function () {
if (this._assignedType) {
return this._assignedType.getConstructSignatures();
}
return TypeScript.sentinelEmptyArray;
};
PullTypeAliasSymbol.prototype.getIndexSignatures = function () {
if (this._assignedType) {
return this._assignedType.getIndexSignatures();
}
return TypeScript.sentinelEmptyArray;
};
PullTypeAliasSymbol.prototype.findMember = function (name) {
if (this._assignedType) {
return this._assignedType.findMember(name, true);
}
return null;
};
PullTypeAliasSymbol.prototype.findNestedType = function (name) {
if (this._assignedType) {
return this._assignedType.findNestedType(name);
}
return null;
};
PullTypeAliasSymbol.prototype.findNestedContainer = function (name) {
if (this._assignedType) {
return this._assignedType.findNestedContainer(name);
}
return null;
};
PullTypeAliasSymbol.prototype.getAllMembers = function (searchDeclKind, memberVisibility) {
if (this._assignedType) {
return this._assignedType.getAllMembers(searchDeclKind, memberVisibility);
}
return TypeScript.sentinelEmptyArray;
};
return PullTypeAliasSymbol;
})(PullTypeSymbol);
TypeScript.PullTypeAliasSymbol = PullTypeAliasSymbol;
var PullTypeParameterSymbol = (function (_super) {
__extends(PullTypeParameterSymbol, _super);
function PullTypeParameterSymbol(name) {
_super.call(this, name, 8192 /* TypeParameter */);
this._constraint = null;
}
PullTypeParameterSymbol.prototype.isTypeParameter = function () {
return true;
};
PullTypeParameterSymbol.prototype.setConstraint = function (constraintType) {
this._constraint = constraintType;
};
PullTypeParameterSymbol.prototype.getConstraint = function () {
return this._constraint;
};
PullTypeParameterSymbol.prototype.getBaseConstraint = function (semanticInfoChain) {
var preBaseConstraint = this.getConstraintRecursively({});
TypeScript.Debug.assert(preBaseConstraint === null || !preBaseConstraint.isTypeParameter());
return preBaseConstraint || semanticInfoChain.emptyTypeSymbol;
};
PullTypeParameterSymbol.prototype.getConstraintRecursively = function (visitedTypeParameters) {
var constraint = this.getConstraint();
if (constraint) {
if (constraint.isTypeParameter()) {
var constraintAsTypeParameter = constraint;
if (!visitedTypeParameters[constraintAsTypeParameter.pullSymbolID]) {
visitedTypeParameters[constraintAsTypeParameter.pullSymbolID] = constraintAsTypeParameter;
return constraintAsTypeParameter.getConstraintRecursively(visitedTypeParameters);
}
} else {
return constraint;
}
}
return null;
};
PullTypeParameterSymbol.prototype.getDefaultConstraint = function (semanticInfoChain) {
return this._constraint || semanticInfoChain.emptyTypeSymbol;
};
PullTypeParameterSymbol.prototype.getCallSignatures = function () {
if (this._constraint) {
return this._constraint.getCallSignatures();
}
return _super.prototype.getCallSignatures.call(this);
};
PullTypeParameterSymbol.prototype.getConstructSignatures = function () {
if (this._constraint) {
return this._constraint.getConstructSignatures();
}
return _super.prototype.getConstructSignatures.call(this);
};
PullTypeParameterSymbol.prototype.getIndexSignatures = function () {
if (this._constraint) {
return this._constraint.getIndexSignatures();
}
return _super.prototype.getIndexSignatures.call(this);
};
PullTypeParameterSymbol.prototype.isGeneric = function () {
return true;
};
PullTypeParameterSymbol.prototype.fullName = function (scopeSymbol) {
var name = this.getDisplayName(scopeSymbol);
var container = this.getContainer();
if (container) {
var containerName = container.fullName(scopeSymbol);
name = name + " in " + containerName;
}
return name;
};
PullTypeParameterSymbol.prototype.getName = function (scopeSymbol, useConstraintInName) {
var name = _super.prototype.getName.call(this, scopeSymbol);
if (this.isPrinting) {
return name;
}
this.isPrinting = true;
if (useConstraintInName && this._constraint) {
name += " extends " + this._constraint.toString(scopeSymbol);
}
this.isPrinting = false;
return name;
};
PullTypeParameterSymbol.prototype.getDisplayName = function (scopeSymbol, useConstraintInName, skipInternalAliasName) {
var name = _super.prototype.getDisplayName.call(this, scopeSymbol, useConstraintInName, skipInternalAliasName);
if (this.isPrinting) {
return name;
}
this.isPrinting = true;
if (useConstraintInName && this._constraint) {
name += " extends " + this._constraint.toString(scopeSymbol);
}
this.isPrinting = false;
return name;
};
PullTypeParameterSymbol.prototype.isExternallyVisible = function (inIsExternallyVisibleSymbols) {
return true;
};
return PullTypeParameterSymbol;
})(PullTypeSymbol);
TypeScript.PullTypeParameterSymbol = PullTypeParameterSymbol;
var PullAccessorSymbol = (function (_super) {
__extends(PullAccessorSymbol, _super);
function PullAccessorSymbol(name) {
_super.call(this, name, 4096 /* Property */);
this._getterSymbol = null;
this._setterSymbol = null;
}
PullAccessorSymbol.prototype.isAccessor = function () {
return true;
};
PullAccessorSymbol.prototype.setSetter = function (setter) {
if (!setter) {
return;
}
this._setterSymbol = setter;
};
PullAccessorSymbol.prototype.getSetter = function () {
return this._setterSymbol;
};
PullAccessorSymbol.prototype.setGetter = function (getter) {
if (!getter) {
return;
}
this._getterSymbol = getter;
};
PullAccessorSymbol.prototype.getGetter = function () {
return this._getterSymbol;
};
return PullAccessorSymbol;
})(PullSymbol);
TypeScript.PullAccessorSymbol = PullAccessorSymbol;
function getIDForTypeSubstitutions(instantiatingTypeOrSignature, typeArgumentMap) {
var substitution = "";
var members = null;
var allowedToReferenceTypeParameters = instantiatingTypeOrSignature.getAllowedToReferenceTypeParameters();
for (var i = 0; i < allowedToReferenceTypeParameters.length; i++) {
var typeParameter = allowedToReferenceTypeParameters[i];
var typeParameterID = typeParameter.pullSymbolID;
var typeArg = typeArgumentMap[typeParameterID];
if (!typeArg) {
typeArg = typeParameter;
}
substitution += typeParameterID + ":" + getIDForTypeSubstitutionsOfType(typeArg);
}
return substitution;
}
TypeScript.getIDForTypeSubstitutions = getIDForTypeSubstitutions;
function getIDForTypeSubstitutionsOfType(type) {
var structure;
if (type.isError()) {
structure = "E" + getIDForTypeSubstitutionsOfType(type._anyType);
} else if (!type.isNamedTypeSymbol()) {
structure = getIDForTypeSubstitutionsFromObjectType(type);
}
if (!structure) {
structure = type.pullSymbolID + "#";
}
return structure;
}
function getIDForTypeSubstitutionsFromObjectType(type) {
if (type.isResolved) {
var getIDForTypeSubStitutionWalker = new GetIDForTypeSubStitutionWalker();
TypeScript.PullHelpers.walkPullTypeSymbolStructure(type, getIDForTypeSubStitutionWalker);
}
return null;
}
var GetIDForTypeSubStitutionWalker = (function () {
function GetIDForTypeSubStitutionWalker() {
this.structure = "";
}
GetIDForTypeSubStitutionWalker.prototype.memberSymbolWalk = function (memberSymbol) {
this.structure += memberSymbol.name + "@" + getIDForTypeSubstitutionsOfType(memberSymbol.type);
return true;
};
GetIDForTypeSubStitutionWalker.prototype.callSignatureWalk = function (signatureSymbol) {
this.structure += "(";
return true;
};
GetIDForTypeSubStitutionWalker.prototype.constructSignatureWalk = function (signatureSymbol) {
this.structure += "new(";
return true;
};
GetIDForTypeSubStitutionWalker.prototype.indexSignatureWalk = function (signatureSymbol) {
this.structure += "[](";
return true;
};
GetIDForTypeSubStitutionWalker.prototype.signatureParameterWalk = function (parameterSymbol) {
this.structure += parameterSymbol.name + "@" + getIDForTypeSubstitutionsOfType(parameterSymbol.type);
return true;
};
GetIDForTypeSubStitutionWalker.prototype.signatureReturnTypeWalk = function (returnType) {
this.structure += ")" + getIDForTypeSubstitutionsOfType(returnType);
return true;
};
return GetIDForTypeSubStitutionWalker;
})();
(function (GetAllMembersVisiblity) {
GetAllMembersVisiblity[GetAllMembersVisiblity["all"] = 0] = "all";
GetAllMembersVisiblity[GetAllMembersVisiblity["internallyVisible"] = 1] = "internallyVisible";
GetAllMembersVisiblity[GetAllMembersVisiblity["externallyVisible"] = 2] = "externallyVisible";
})(TypeScript.GetAllMembersVisiblity || (TypeScript.GetAllMembersVisiblity = {}));
var GetAllMembersVisiblity = TypeScript.GetAllMembersVisiblity;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var PullTypeEnclosingTypeWalker = (function () {
function PullTypeEnclosingTypeWalker() {
this.currentSymbols = null;
}
PullTypeEnclosingTypeWalker.prototype.getEnclosingType = function () {
if (this.currentSymbols && this.currentSymbols.length > 0) {
return this.currentSymbols[0];
}
return null;
};
PullTypeEnclosingTypeWalker.prototype._canWalkStructure = function () {
var enclosingType = this.getEnclosingType();
return !!enclosingType && enclosingType.isGeneric();
};
PullTypeEnclosingTypeWalker.prototype._getCurrentSymbol = function () {
if (this.currentSymbols && this.currentSymbols.length) {
return this.currentSymbols[this.currentSymbols.length - 1];
}
return null;
};
PullTypeEnclosingTypeWalker.prototype.getGenerativeClassification = function () {
if (this._canWalkStructure()) {
var currentType = this.currentSymbols[this.currentSymbols.length - 1];
if (!currentType) {
return 0 /* Unknown */;
}
var variableNeededToFixNodeJitterBug = this.getEnclosingType();
return currentType.getGenerativeTypeClassification(variableNeededToFixNodeJitterBug);
}
return 2 /* Closed */;
};
PullTypeEnclosingTypeWalker.prototype._pushSymbol = function (symbol) {
return this.currentSymbols.push(symbol);
};
PullTypeEnclosingTypeWalker.prototype._popSymbol = function () {
return this.currentSymbols.pop();
};
PullTypeEnclosingTypeWalker.prototype._setEnclosingTypeOfParentDecl = function (decl, setSignature) {
var parentDecl = decl.getParentDecl();
if (parentDecl) {
if (parentDecl.kind & 8216 /* SomeInstantiatableType */) {
this._setEnclosingTypeWorker(parentDecl.getSymbol(), true);
} else {
this._setEnclosingTypeOfParentDecl(parentDecl, true);
}
if (this._canWalkStructure()) {
var symbol = decl.getSymbol();
if (symbol) {
if (symbol.kind == 2048 /* Parameter */ || symbol.kind == 4096 /* Property */ || symbol.kind == 65536 /* Method */ || symbol.kind == 32768 /* ConstructorMethod */ || symbol.kind == 131072 /* FunctionExpression */) {
symbol = symbol.type;
}
this._pushSymbol(symbol);
}
if (setSignature) {
var signature = decl.getSignatureSymbol();
if (signature) {
this._pushSymbol(signature);
}
}
}
}
};
PullTypeEnclosingTypeWalker.prototype._setEnclosingTypeWorker = function (symbol, setSignature) {
if (symbol.isType() && symbol.isNamedTypeSymbol()) {
this.currentSymbols = [TypeScript.PullHelpers.getRootType(symbol)];
return;
}
var decls = symbol.getDeclarations();
for (var i = 0; i < decls.length; i++) {
var decl = decls[i];
this._setEnclosingTypeOfParentDecl(decl, setSignature);
if (this._canWalkStructure()) {
return;
}
}
};
PullTypeEnclosingTypeWalker.prototype.setCurrentSymbol = function (symbol) {
TypeScript.Debug.assert(this._canWalkStructure());
this.currentSymbols[this.currentSymbols.length - 1] = symbol;
};
PullTypeEnclosingTypeWalker.prototype.startWalkingType = function (symbol) {
var currentSymbols = this.currentSymbols;
var setEnclosingType = !this.getEnclosingType() || symbol.isNamedTypeSymbol();
if (setEnclosingType) {
this.currentSymbols = null;
this.setEnclosingType(symbol);
}
return currentSymbols;
};
PullTypeEnclosingTypeWalker.prototype.endWalkingType = function (currentSymbolsWhenStartedWalkingTypes) {
this.currentSymbols = currentSymbolsWhenStartedWalkingTypes;
};
PullTypeEnclosingTypeWalker.prototype.setEnclosingType = function (symbol) {
TypeScript.Debug.assert(!this.getEnclosingType());
this._setEnclosingTypeWorker(symbol, symbol.isSignature());
};
PullTypeEnclosingTypeWalker.prototype.walkMemberType = function (memberName, resolver) {
if (this._canWalkStructure()) {
var currentType = this._getCurrentSymbol();
var memberSymbol = currentType ? resolver._getNamedPropertySymbolOfAugmentedType(memberName, currentType) : null;
this._pushSymbol(memberSymbol ? memberSymbol.type : null);
}
};
PullTypeEnclosingTypeWalker.prototype.postWalkMemberType = function () {
if (this._canWalkStructure()) {
this._popSymbol();
}
};
PullTypeEnclosingTypeWalker.prototype.walkSignature = function (kind, index) {
if (this._canWalkStructure()) {
var currentType = this._getCurrentSymbol();
var signatures;
if (currentType) {
if (kind == 1048576 /* CallSignature */) {
signatures = currentType.getCallSignatures();
} else if (kind == 2097152 /* ConstructSignature */) {
signatures = currentType.getConstructSignatures();
} else {
signatures = currentType.getIndexSignatures();
}
}
this._pushSymbol(signatures ? signatures[index] : null);
}
};
PullTypeEnclosingTypeWalker.prototype.postWalkSignature = function () {
if (this._canWalkStructure()) {
this._popSymbol();
}
};
PullTypeEnclosingTypeWalker.prototype.walkTypeArgument = function (index) {
if (this._canWalkStructure()) {
var typeArgument = null;
var currentType = this._getCurrentSymbol();
if (currentType) {
var typeArguments = currentType.getTypeArguments();
typeArgument = typeArguments ? typeArguments[index] : null;
}
this._pushSymbol(typeArgument);
}
};
PullTypeEnclosingTypeWalker.prototype.postWalkTypeArgument = function () {
if (this._canWalkStructure()) {
this._popSymbol();
}
};
PullTypeEnclosingTypeWalker.prototype.walkTypeParameterConstraint = function (index) {
if (this._canWalkStructure()) {
var typeParameters;
var currentSymbol = this._getCurrentSymbol();
if (currentSymbol) {
if (currentSymbol.isSignature()) {
typeParameters = currentSymbol.getTypeParameters();
} else {
TypeScript.Debug.assert(currentSymbol.isType());
typeParameters = currentSymbol.getTypeParameters();
}
}
this._pushSymbol(typeParameters ? typeParameters[index].getConstraint() : null);
}
};
PullTypeEnclosingTypeWalker.prototype.postWalkTypeParameterConstraint = function () {
if (this._canWalkStructure()) {
this._popSymbol();
}
};
PullTypeEnclosingTypeWalker.prototype.walkReturnType = function () {
if (this._canWalkStructure()) {
var currentSignature = this._getCurrentSymbol();
this._pushSymbol(currentSignature ? currentSignature.returnType : null);
}
};
PullTypeEnclosingTypeWalker.prototype.postWalkReturnType = function () {
if (this._canWalkStructure()) {
this._popSymbol();
}
};
PullTypeEnclosingTypeWalker.prototype.walkParameterType = function (iParam) {
if (this._canWalkStructure()) {
var currentSignature = this._getCurrentSymbol();
this._pushSymbol(currentSignature ? currentSignature.getParameterTypeAtIndex(iParam) : null);
}
};
PullTypeEnclosingTypeWalker.prototype.postWalkParameterType = function () {
if (this._canWalkStructure()) {
this._popSymbol();
}
};
PullTypeEnclosingTypeWalker.prototype.getBothKindOfIndexSignatures = function (resolver, context, includeAugmentedType) {
if (this._canWalkStructure()) {
var currentType = this._getCurrentSymbol();
if (currentType) {
return resolver._getBothKindsOfIndexSignatures(currentType, context, includeAugmentedType);
}
}
return null;
};
PullTypeEnclosingTypeWalker.prototype.walkIndexSignatureReturnType = function (indexSigInfo, useStringIndexSignature, onlySignature) {
if (this._canWalkStructure()) {
var indexSig = indexSigInfo ? (useStringIndexSignature ? indexSigInfo.stringSignature : indexSigInfo.numericSignature) : null;
this._pushSymbol(indexSig);
if (!onlySignature) {
this._pushSymbol(indexSig ? indexSig.returnType : null);
}
}
};
PullTypeEnclosingTypeWalker.prototype.postWalkIndexSignatureReturnType = function (onlySignature) {
if (this._canWalkStructure()) {
if (!onlySignature) {
this._popSymbol();
}
this._popSymbol();
}
};
return PullTypeEnclosingTypeWalker;
})();
TypeScript.PullTypeEnclosingTypeWalker = PullTypeEnclosingTypeWalker;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var CandidateInferenceInfo = (function () {
function CandidateInferenceInfo() {
this.typeParameter = null;
this._inferredTypeAfterFixing = null;
this.inferenceCandidates = [];
}
CandidateInferenceInfo.prototype.addCandidate = function (candidate) {
if (!this._inferredTypeAfterFixing) {
this.inferenceCandidates[this.inferenceCandidates.length] = candidate;
}
};
CandidateInferenceInfo.prototype.isFixed = function () {
return !!this._inferredTypeAfterFixing;
};
CandidateInferenceInfo.prototype.fixTypeParameter = function (resolver, context) {
var _this = this;
if (!this._inferredTypeAfterFixing) {
var collection = {
getLength: function () {
return _this.inferenceCandidates.length;
},
getTypeAtIndex: function (index) {
return _this.inferenceCandidates[index].type;
}
};
var bestCommonType = resolver.findBestCommonType(collection, context, new TypeScript.TypeComparisonInfo());
this._inferredTypeAfterFixing = bestCommonType.widenedType(resolver, null, context);
}
};
return CandidateInferenceInfo;
})();
TypeScript.CandidateInferenceInfo = CandidateInferenceInfo;
var TypeArgumentInferenceContext = (function () {
function TypeArgumentInferenceContext(resolver, context, signatureBeingInferred) {
this.resolver = resolver;
this.context = context;
this.signatureBeingInferred = signatureBeingInferred;
this.inferenceCache = TypeScript.BitMatrix.getBitMatrix(false);
this.candidateCache = [];
var typeParameters = signatureBeingInferred.getTypeParameters();
for (var i = 0; i < typeParameters.length; i++) {
this.addInferenceRoot(typeParameters[i]);
}
}
TypeArgumentInferenceContext.prototype.alreadyRelatingTypes = function (objectType, parameterType) {
if (this.inferenceCache.valueAt(objectType.pullSymbolID, parameterType.pullSymbolID)) {
return true;
} else {
this.inferenceCache.setValueAt(objectType.pullSymbolID, parameterType.pullSymbolID, true);
return false;
}
};
TypeArgumentInferenceContext.prototype.resetRelationshipCache = function () {
this.inferenceCache.release();
this.inferenceCache = TypeScript.BitMatrix.getBitMatrix(false);
};
TypeArgumentInferenceContext.prototype.addInferenceRoot = function (param) {
var info = this.candidateCache[param.pullSymbolID];
if (!info) {
info = new CandidateInferenceInfo();
info.typeParameter = param;
this.candidateCache[param.pullSymbolID] = info;
}
};
TypeArgumentInferenceContext.prototype.getInferenceInfo = function (param) {
return this.candidateCache[param.pullSymbolID];
};
TypeArgumentInferenceContext.prototype.addCandidateForInference = function (param, candidate) {
var info = this.getInferenceInfo(param);
if (info && candidate && info.inferenceCandidates.indexOf(candidate) < 0) {
info.addCandidate(candidate);
}
};
TypeArgumentInferenceContext.prototype.inferTypeArguments = function () {
throw TypeScript.Errors.abstract();
};
TypeArgumentInferenceContext.prototype.fixTypeParameter = function (typeParameter) {
var candidateInfo = this.candidateCache[typeParameter.pullSymbolID];
if (candidateInfo) {
candidateInfo.fixTypeParameter(this.resolver, this.context);
}
};
TypeArgumentInferenceContext.prototype._finalizeInferredTypeArguments = function () {
var results = [];
var typeParameters = this.signatureBeingInferred.getTypeParameters();
for (var i = 0; i < typeParameters.length; i++) {
var info = this.candidateCache[typeParameters[i].pullSymbolID];
info.fixTypeParameter(this.resolver, this.context);
for (var i = 0; i < results.length; i++) {
if (results[i].type === info.typeParameter) {
results[i].type = info._inferredTypeAfterFixing;
}
}
results.push(info._inferredTypeAfterFixing);
}
return results;
};
TypeArgumentInferenceContext.prototype.isInvocationInferenceContext = function () {
throw TypeScript.Errors.abstract();
};
return TypeArgumentInferenceContext;
})();
TypeScript.TypeArgumentInferenceContext = TypeArgumentInferenceContext;
var InvocationTypeArgumentInferenceContext = (function (_super) {
__extends(InvocationTypeArgumentInferenceContext, _super);
function InvocationTypeArgumentInferenceContext(resolver, context, signatureBeingInferred, argumentASTs) {
_super.call(this, resolver, context, signatureBeingInferred);
this.argumentASTs = argumentASTs;
}
InvocationTypeArgumentInferenceContext.prototype.isInvocationInferenceContext = function () {
return true;
};
InvocationTypeArgumentInferenceContext.prototype.inferTypeArguments = function () {
var _this = this;
this.signatureBeingInferred.forAllParameterTypes(this.argumentASTs.nonSeparatorCount(), function (parameterType, argumentIndex) {
var argumentAST = _this.argumentASTs.nonSeparatorAt(argumentIndex);
_this.context.pushInferentialType(parameterType, _this);
var argumentType = _this.resolver.resolveAST(argumentAST, true, _this.context).type;
_this.resolver.relateTypeToTypeParametersWithNewEnclosingTypes(argumentType, parameterType, _this, _this.context);
_this.context.popAnyContextualType();
return true;
});
return this._finalizeInferredTypeArguments();
};
return InvocationTypeArgumentInferenceContext;
})(TypeArgumentInferenceContext);
TypeScript.InvocationTypeArgumentInferenceContext = InvocationTypeArgumentInferenceContext;
var ContextualSignatureInstantiationTypeArgumentInferenceContext = (function (_super) {
__extends(ContextualSignatureInstantiationTypeArgumentInferenceContext, _super);
function ContextualSignatureInstantiationTypeArgumentInferenceContext(resolver, context, signatureBeingInferred, contextualSignature, shouldFixContextualSignatureParameterTypes) {
_super.call(this, resolver, context, signatureBeingInferred);
this.contextualSignature = contextualSignature;
this.shouldFixContextualSignatureParameterTypes = shouldFixContextualSignatureParameterTypes;
}
ContextualSignatureInstantiationTypeArgumentInferenceContext.prototype.isInvocationInferenceContext = function () {
return false;
};
ContextualSignatureInstantiationTypeArgumentInferenceContext.prototype.inferTypeArguments = function () {
var _this = this;
var relateTypesCallback = function (parameterTypeBeingInferred, contextualParameterType) {
if (_this.shouldFixContextualSignatureParameterTypes) {
contextualParameterType = _this.context.fixAllTypeParametersReferencedByType(contextualParameterType, _this.resolver, _this);
}
_this.resolver.relateTypeToTypeParametersWithNewEnclosingTypes(contextualParameterType, parameterTypeBeingInferred, _this, _this.context);
return true;
};
this.signatureBeingInferred.forAllCorrespondingParameterTypesInThisAndOtherSignature(this.contextualSignature, relateTypesCallback);
return this._finalizeInferredTypeArguments();
};
return ContextualSignatureInstantiationTypeArgumentInferenceContext;
})(TypeArgumentInferenceContext);
TypeScript.ContextualSignatureInstantiationTypeArgumentInferenceContext = ContextualSignatureInstantiationTypeArgumentInferenceContext;
var PullContextualTypeContext = (function () {
function PullContextualTypeContext(contextualType, provisional, isInferentiallyTyping, typeArgumentInferenceContext) {
this.contextualType = contextualType;
this.provisional = provisional;
this.isInferentiallyTyping = isInferentiallyTyping;
this.typeArgumentInferenceContext = typeArgumentInferenceContext;
this.provisionallyTypedSymbols = [];
this.hasProvisionalErrors = false;
this.astSymbolMap = [];
}
PullContextualTypeContext.prototype.recordProvisionallyTypedSymbol = function (symbol) {
this.provisionallyTypedSymbols[this.provisionallyTypedSymbols.length] = symbol;
};
PullContextualTypeContext.prototype.invalidateProvisionallyTypedSymbols = function () {
for (var i = 0; i < this.provisionallyTypedSymbols.length; i++) {
this.provisionallyTypedSymbols[i].setUnresolved();
}
};
PullContextualTypeContext.prototype.setSymbolForAST = function (ast, symbol) {
this.astSymbolMap[ast.syntaxID()] = symbol;
};
PullContextualTypeContext.prototype.getSymbolForAST = function (ast) {
return this.astSymbolMap[ast.syntaxID()];
};
return PullContextualTypeContext;
})();
TypeScript.PullContextualTypeContext = PullContextualTypeContext;
var PullTypeResolutionContext = (function () {
function PullTypeResolutionContext(resolver, inTypeCheck, fileName) {
if (typeof inTypeCheck === "undefined") { inTypeCheck = false; }
if (typeof fileName === "undefined") { fileName = null; }
this.resolver = resolver;
this.inTypeCheck = inTypeCheck;
this.fileName = fileName;
this.contextStack = [];
this.typeCheckedNodes = null;
this.enclosingTypeWalker1 = null;
this.enclosingTypeWalker2 = null;
this.inBaseTypeResolution = false;
if (inTypeCheck) {
TypeScript.Debug.assert(fileName, "A file name must be provided if you are typechecking");
this.typeCheckedNodes = TypeScript.BitVector.getBitVector(false);
}
}
PullTypeResolutionContext.prototype.setTypeChecked = function (ast) {
if (!this.inProvisionalResolution()) {
this.typeCheckedNodes.setValueAt(ast.syntaxID(), true);
}
};
PullTypeResolutionContext.prototype.canTypeCheckAST = function (ast) {
return this.typeCheck() && !this.typeCheckedNodes.valueAt(ast.syntaxID()) && this.fileName === ast.fileName();
};
PullTypeResolutionContext.prototype._pushAnyContextualType = function (type, provisional, isInferentiallyTyping, argContext) {
this.contextStack.push(new PullContextualTypeContext(type, provisional, isInferentiallyTyping, argContext));
};
PullTypeResolutionContext.prototype.pushNewContextualType = function (type) {
this._pushAnyContextualType(type, this.inProvisionalResolution(), false, null);
};
PullTypeResolutionContext.prototype.propagateContextualType = function (type) {
this._pushAnyContextualType(type, this.inProvisionalResolution(), this.isInferentiallyTyping(), this.getCurrentTypeArgumentInferenceContext());
};
PullTypeResolutionContext.prototype.pushInferentialType = function (type, typeArgumentInferenceContext) {
this._pushAnyContextualType(type, true, true, typeArgumentInferenceContext);
};
PullTypeResolutionContext.prototype.pushProvisionalType = function (type) {
this._pushAnyContextualType(type, true, false, null);
};
PullTypeResolutionContext.prototype.popAnyContextualType = function () {
var tc = this.contextStack.pop();
tc.invalidateProvisionallyTypedSymbols();
if (tc.hasProvisionalErrors && this.inProvisionalResolution()) {
this.contextStack[this.contextStack.length - 1].hasProvisionalErrors = true;
}
return tc;
};
PullTypeResolutionContext.prototype.hasProvisionalErrors = function () {
return this.contextStack.length ? this.contextStack[this.contextStack.length - 1].hasProvisionalErrors : false;
};
PullTypeResolutionContext.prototype.getContextualType = function () {
var context = !this.contextStack.length ? null : this.contextStack[this.contextStack.length - 1];
if (context) {
var type = context.contextualType;
if (!type) {
return null;
}
return type;
}
return null;
};
PullTypeResolutionContext.prototype.fixAllTypeParametersReferencedByType = function (type, resolver, argContext) {
var argContext = this.getCurrentTypeArgumentInferenceContext();
if (type.wrapsSomeTypeParameter(argContext.candidateCache)) {
var typeParameterArgumentMap = [];
for (var n in argContext.candidateCache) {
var typeParameter = argContext.candidateCache[n] && argContext.candidateCache[n].typeParameter;
if (typeParameter) {
var dummyMap = [];
dummyMap[typeParameter.pullSymbolID] = typeParameter;
if (type.wrapsSomeTypeParameter(dummyMap)) {
argContext.fixTypeParameter(typeParameter);
TypeScript.Debug.assert(argContext.candidateCache[n]._inferredTypeAfterFixing);
typeParameterArgumentMap[typeParameter.pullSymbolID] = argContext.candidateCache[n]._inferredTypeAfterFixing;
}
}
}
return resolver.instantiateType(type, typeParameterArgumentMap);
}
return type;
};
PullTypeResolutionContext.prototype.getCurrentTypeArgumentInferenceContext = function () {
return this.contextStack.length ? this.contextStack[this.contextStack.length - 1].typeArgumentInferenceContext : null;
};
PullTypeResolutionContext.prototype.isInferentiallyTyping = function () {
return this.contextStack.length > 0 && this.contextStack[this.contextStack.length - 1].isInferentiallyTyping;
};
PullTypeResolutionContext.prototype.inProvisionalResolution = function () {
return (!this.contextStack.length ? false : this.contextStack[this.contextStack.length - 1].provisional);
};
PullTypeResolutionContext.prototype.isInBaseTypeResolution = function () {
return this.inBaseTypeResolution;
};
PullTypeResolutionContext.prototype.startBaseTypeResolution = function () {
var wasInBaseTypeResoltion = this.inBaseTypeResolution;
this.inBaseTypeResolution = true;
return wasInBaseTypeResoltion;
};
PullTypeResolutionContext.prototype.doneBaseTypeResolution = function (wasInBaseTypeResolution) {
this.inBaseTypeResolution = wasInBaseTypeResolution;
};
PullTypeResolutionContext.prototype.setTypeInContext = function (symbol, type) {
if (symbol.type && symbol.type.isError() && !type.isError()) {
return;
}
symbol.type = type;
if (this.contextStack.length && this.inProvisionalResolution()) {
this.contextStack[this.contextStack.length - 1].recordProvisionallyTypedSymbol(symbol);
}
};
PullTypeResolutionContext.prototype.postDiagnostic = function (diagnostic) {
if (diagnostic) {
if (this.inProvisionalResolution()) {
(this.contextStack[this.contextStack.length - 1]).hasProvisionalErrors = true;
} else if (this.inTypeCheck && this.resolver) {
this.resolver.semanticInfoChain.addDiagnostic(diagnostic);
}
}
};
PullTypeResolutionContext.prototype.typeCheck = function () {
return this.inTypeCheck && !this.inProvisionalResolution();
};
PullTypeResolutionContext.prototype.setSymbolForAST = function (ast, symbol) {
this.contextStack[this.contextStack.length - 1].setSymbolForAST(ast, symbol);
};
PullTypeResolutionContext.prototype.getSymbolForAST = function (ast) {
for (var i = this.contextStack.length - 1; i >= 0; i--) {
var typeContext = this.contextStack[i];
if (!typeContext.provisional) {
break;
}
var symbol = typeContext.getSymbolForAST(ast);
if (symbol) {
return symbol;
}
}
return null;
};
PullTypeResolutionContext.prototype.startWalkingTypes = function (symbol1, symbol2) {
if (!this.enclosingTypeWalker1) {
this.enclosingTypeWalker1 = new TypeScript.PullTypeEnclosingTypeWalker();
}
var symbolsWhenStartedWalkingTypes1 = this.enclosingTypeWalker1.startWalkingType(symbol1);
if (!this.enclosingTypeWalker2) {
this.enclosingTypeWalker2 = new TypeScript.PullTypeEnclosingTypeWalker();
}
var symbolsWhenStartedWalkingTypes2 = this.enclosingTypeWalker2.startWalkingType(symbol2);
return { symbolsWhenStartedWalkingTypes1: symbolsWhenStartedWalkingTypes1, symbolsWhenStartedWalkingTypes2: symbolsWhenStartedWalkingTypes2 };
};
PullTypeResolutionContext.prototype.endWalkingTypes = function (symbolsWhenStartedWalkingTypes) {
this.enclosingTypeWalker1.endWalkingType(symbolsWhenStartedWalkingTypes.symbolsWhenStartedWalkingTypes1);
this.enclosingTypeWalker2.endWalkingType(symbolsWhenStartedWalkingTypes.symbolsWhenStartedWalkingTypes2);
};
PullTypeResolutionContext.prototype.setEnclosingTypes = function (symbol1, symbol2) {
if (!this.enclosingTypeWalker1) {
this.enclosingTypeWalker1 = new TypeScript.PullTypeEnclosingTypeWalker();
}
this.enclosingTypeWalker1.setEnclosingType(symbol1);
if (!this.enclosingTypeWalker2) {
this.enclosingTypeWalker2 = new TypeScript.PullTypeEnclosingTypeWalker();
}
this.enclosingTypeWalker2.setEnclosingType(symbol2);
};
PullTypeResolutionContext.prototype.walkMemberTypes = function (memberName) {
this.enclosingTypeWalker1.walkMemberType(memberName, this.resolver);
this.enclosingTypeWalker2.walkMemberType(memberName, this.resolver);
};
PullTypeResolutionContext.prototype.postWalkMemberTypes = function () {
this.enclosingTypeWalker1.postWalkMemberType();
this.enclosingTypeWalker2.postWalkMemberType();
};
PullTypeResolutionContext.prototype.walkSignatures = function (kind, index, index2) {
this.enclosingTypeWalker1.walkSignature(kind, index);
this.enclosingTypeWalker2.walkSignature(kind, index2 == undefined ? index : index2);
};
PullTypeResolutionContext.prototype.postWalkSignatures = function () {
this.enclosingTypeWalker1.postWalkSignature();
this.enclosingTypeWalker2.postWalkSignature();
};
PullTypeResolutionContext.prototype.walkTypeParameterConstraints = function (index) {
this.enclosingTypeWalker1.walkTypeParameterConstraint(index);
this.enclosingTypeWalker2.walkTypeParameterConstraint(index);
};
PullTypeResolutionContext.prototype.postWalkTypeParameterConstraints = function () {
this.enclosingTypeWalker1.postWalkTypeParameterConstraint();
this.enclosingTypeWalker2.postWalkTypeParameterConstraint();
};
PullTypeResolutionContext.prototype.walkTypeArgument = function (index) {
this.enclosingTypeWalker1.walkTypeArgument(index);
this.enclosingTypeWalker2.walkTypeArgument(index);
};
PullTypeResolutionContext.prototype.postWalkTypeArgument = function () {
this.enclosingTypeWalker1.postWalkTypeArgument();
this.enclosingTypeWalker2.postWalkTypeArgument();
};
PullTypeResolutionContext.prototype.walkReturnTypes = function () {
this.enclosingTypeWalker1.walkReturnType();
this.enclosingTypeWalker2.walkReturnType();
};
PullTypeResolutionContext.prototype.postWalkReturnTypes = function () {
this.enclosingTypeWalker1.postWalkReturnType();
this.enclosingTypeWalker2.postWalkReturnType();
};
PullTypeResolutionContext.prototype.walkParameterTypes = function (iParam) {
this.enclosingTypeWalker1.walkParameterType(iParam);
this.enclosingTypeWalker2.walkParameterType(iParam);
};
PullTypeResolutionContext.prototype.postWalkParameterTypes = function () {
this.enclosingTypeWalker1.postWalkParameterType();
this.enclosingTypeWalker2.postWalkParameterType();
};
PullTypeResolutionContext.prototype.getBothKindOfIndexSignatures = function (includeAugmentedType1, includeAugmentedType2) {
var indexSigs1 = this.enclosingTypeWalker1.getBothKindOfIndexSignatures(this.resolver, this, includeAugmentedType1);
var indexSigs2 = this.enclosingTypeWalker2.getBothKindOfIndexSignatures(this.resolver, this, includeAugmentedType2);
return { indexSigs1: indexSigs1, indexSigs2: indexSigs2 };
};
PullTypeResolutionContext.prototype.walkIndexSignatureReturnTypes = function (indexSigs, useStringIndexSignature1, useStringIndexSignature2, onlySignature) {
this.enclosingTypeWalker1.walkIndexSignatureReturnType(indexSigs.indexSigs1, useStringIndexSignature1, onlySignature);
this.enclosingTypeWalker2.walkIndexSignatureReturnType(indexSigs.indexSigs2, useStringIndexSignature2, onlySignature);
};
PullTypeResolutionContext.prototype.postWalkIndexSignatureReturnTypes = function (onlySignature) {
this.enclosingTypeWalker1.postWalkIndexSignatureReturnType(onlySignature);
this.enclosingTypeWalker2.postWalkIndexSignatureReturnType(onlySignature);
};
PullTypeResolutionContext.prototype.swapEnclosingTypeWalkers = function () {
var tempEnclosingWalker1 = this.enclosingTypeWalker1;
this.enclosingTypeWalker1 = this.enclosingTypeWalker2;
this.enclosingTypeWalker2 = tempEnclosingWalker1;
};
PullTypeResolutionContext.prototype.oneOfClassificationsIsInfinitelyExpanding = function () {
var generativeClassification1 = this.enclosingTypeWalker1.getGenerativeClassification();
if (generativeClassification1 === 3 /* InfinitelyExpanding */) {
return true;
}
var generativeClassification2 = this.enclosingTypeWalker2.getGenerativeClassification();
if (generativeClassification2 === 3 /* InfinitelyExpanding */) {
return true;
}
return false;
};
PullTypeResolutionContext.prototype.resetEnclosingTypeWalkers = function () {
var enclosingTypeWalker1 = this.enclosingTypeWalker1;
var enclosingTypeWalker2 = this.enclosingTypeWalker2;
this.enclosingTypeWalker1 = null;
this.enclosingTypeWalker2 = null;
return {
enclosingTypeWalker1: enclosingTypeWalker1,
enclosingTypeWalker2: enclosingTypeWalker2
};
};
PullTypeResolutionContext.prototype.setEnclosingTypeWalkers = function (enclosingTypeWalkers) {
this.enclosingTypeWalker1 = enclosingTypeWalkers.enclosingTypeWalker1;
this.enclosingTypeWalker2 = enclosingTypeWalkers.enclosingTypeWalker2;
};
return PullTypeResolutionContext;
})();
TypeScript.PullTypeResolutionContext = PullTypeResolutionContext;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var OverloadApplicabilityStatus;
(function (OverloadApplicabilityStatus) {
OverloadApplicabilityStatus[OverloadApplicabilityStatus["NotAssignable"] = 0] = "NotAssignable";
OverloadApplicabilityStatus[OverloadApplicabilityStatus["AssignableButWithProvisionalErrors"] = 1] = "AssignableButWithProvisionalErrors";
OverloadApplicabilityStatus[OverloadApplicabilityStatus["AssignableWithNoProvisionalErrors"] = 2] = "AssignableWithNoProvisionalErrors";
OverloadApplicabilityStatus[OverloadApplicabilityStatus["Subtype"] = 3] = "Subtype";
})(OverloadApplicabilityStatus || (OverloadApplicabilityStatus = {}));
var PullAdditionalCallResolutionData = (function () {
function PullAdditionalCallResolutionData() {
this.targetSymbol = null;
this.resolvedSignatures = null;
this.candidateSignature = null;
this.actualParametersContextTypeSymbols = null;
this.diagnosticsFromOverloadResolution = [];
}
return PullAdditionalCallResolutionData;
})();
TypeScript.PullAdditionalCallResolutionData = PullAdditionalCallResolutionData;
var PullAdditionalObjectLiteralResolutionData = (function () {
function PullAdditionalObjectLiteralResolutionData() {
this.membersContextTypeSymbols = null;
}
return PullAdditionalObjectLiteralResolutionData;
})();
TypeScript.PullAdditionalObjectLiteralResolutionData = PullAdditionalObjectLiteralResolutionData;
var MemberWithBaseOrigin = (function () {
function MemberWithBaseOrigin(memberSymbol, baseOrigin) {
this.memberSymbol = memberSymbol;
this.baseOrigin = baseOrigin;
}
return MemberWithBaseOrigin;
})();
var SignatureWithBaseOrigin = (function () {
function SignatureWithBaseOrigin(signature, baseOrigin) {
this.signature = signature;
this.baseOrigin = baseOrigin;
}
return SignatureWithBaseOrigin;
})();
var InheritedIndexSignatureInfo = (function () {
function InheritedIndexSignatureInfo() {
}
return InheritedIndexSignatureInfo;
})();
var CompilerReservedName;
(function (CompilerReservedName) {
CompilerReservedName[CompilerReservedName["_this"] = 1] = "_this";
CompilerReservedName[CompilerReservedName["_super"] = 2] = "_super";
CompilerReservedName[CompilerReservedName["arguments"] = 3] = "arguments";
CompilerReservedName[CompilerReservedName["_i"] = 4] = "_i";
CompilerReservedName[CompilerReservedName["require"] = 5] = "require";
CompilerReservedName[CompilerReservedName["exports"] = 6] = "exports";
})(CompilerReservedName || (CompilerReservedName = {}));
function getCompilerReservedName(name) {
var nameText = name.valueText();
return CompilerReservedName[nameText];
}
var PullTypeResolver = (function () {
function PullTypeResolver(compilationSettings, semanticInfoChain) {
this.compilationSettings = compilationSettings;
this.semanticInfoChain = semanticInfoChain;
this._cachedArrayInterfaceType = null;
this._cachedNumberInterfaceType = null;
this._cachedStringInterfaceType = null;
this._cachedBooleanInterfaceType = null;
this._cachedObjectInterfaceType = null;
this._cachedFunctionInterfaceType = null;
this._cachedIArgumentsInterfaceType = null;
this._cachedRegExpInterfaceType = null;
this._cachedAnyTypeArgs = null;
this.typeCheckCallBacks = [];
this.postTypeCheckWorkitems = [];
this._cachedFunctionArgumentsSymbol = null;
this.assignableCache = TypeScript.BitMatrix.getBitMatrix(true);
this.subtypeCache = TypeScript.BitMatrix.getBitMatrix(true);
this.identicalCache = TypeScript.BitMatrix.getBitMatrix(true);
this.inResolvingOtherDeclsWalker = new TypeScript.PullHelpers.OtherPullDeclsWalker();
}
PullTypeResolver.prototype.cachedArrayInterfaceType = function () {
if (!this._cachedArrayInterfaceType) {
this._cachedArrayInterfaceType = this.getSymbolFromDeclPath("Array", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol;
}
if (!this._cachedArrayInterfaceType.isResolved) {
this.resolveDeclaredSymbol(this._cachedArrayInterfaceType, new TypeScript.PullTypeResolutionContext(this));
}
return this._cachedArrayInterfaceType;
};
PullTypeResolver.prototype.getArrayNamedType = function () {
return this.cachedArrayInterfaceType();
};
PullTypeResolver.prototype.cachedNumberInterfaceType = function () {
if (!this._cachedNumberInterfaceType) {
this._cachedNumberInterfaceType = this.getSymbolFromDeclPath("Number", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol;
}
if (this._cachedNumberInterfaceType && !this._cachedNumberInterfaceType.isResolved) {
this.resolveDeclaredSymbol(this._cachedNumberInterfaceType, new TypeScript.PullTypeResolutionContext(this));
}
return this._cachedNumberInterfaceType;
};
PullTypeResolver.prototype.cachedStringInterfaceType = function () {
if (!this._cachedStringInterfaceType) {
this._cachedStringInterfaceType = this.getSymbolFromDeclPath("String", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol;
}
if (this._cachedStringInterfaceType && !this._cachedStringInterfaceType.isResolved) {
this.resolveDeclaredSymbol(this._cachedStringInterfaceType, new TypeScript.PullTypeResolutionContext(this));
}
return this._cachedStringInterfaceType;
};
PullTypeResolver.prototype.cachedBooleanInterfaceType = function () {
if (!this._cachedBooleanInterfaceType) {
this._cachedBooleanInterfaceType = this.getSymbolFromDeclPath("Boolean", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol;
}
if (this._cachedBooleanInterfaceType && !this._cachedBooleanInterfaceType.isResolved) {
this.resolveDeclaredSymbol(this._cachedBooleanInterfaceType, new TypeScript.PullTypeResolutionContext(this));
}
return this._cachedBooleanInterfaceType;
};
PullTypeResolver.prototype.cachedObjectInterfaceType = function () {
if (!this._cachedObjectInterfaceType) {
this._cachedObjectInterfaceType = this.getSymbolFromDeclPath("Object", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol;
}
if (!this._cachedObjectInterfaceType) {
this._cachedObjectInterfaceType = this.semanticInfoChain.anyTypeSymbol;
}
if (!this._cachedObjectInterfaceType.isResolved) {
this.resolveDeclaredSymbol(this._cachedObjectInterfaceType, new TypeScript.PullTypeResolutionContext(this));
}
return this._cachedObjectInterfaceType;
};
PullTypeResolver.prototype.cachedFunctionInterfaceType = function () {
if (!this._cachedFunctionInterfaceType) {
this._cachedFunctionInterfaceType = this.getSymbolFromDeclPath("Function", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol;
}
if (this._cachedFunctionInterfaceType && !this._cachedFunctionInterfaceType.isResolved) {
this.resolveDeclaredSymbol(this._cachedFunctionInterfaceType, new TypeScript.PullTypeResolutionContext(this));
}
return this._cachedFunctionInterfaceType;
};
PullTypeResolver.prototype.cachedIArgumentsInterfaceType = function () {
if (!this._cachedIArgumentsInterfaceType) {
this._cachedIArgumentsInterfaceType = this.getSymbolFromDeclPath("IArguments", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol;
}
if (this._cachedIArgumentsInterfaceType && !this._cachedIArgumentsInterfaceType.isResolved) {
this.resolveDeclaredSymbol(this._cachedIArgumentsInterfaceType, new TypeScript.PullTypeResolutionContext(this));
}
return this._cachedIArgumentsInterfaceType;
};
PullTypeResolver.prototype.cachedRegExpInterfaceType = function () {
if (!this._cachedRegExpInterfaceType) {
this._cachedRegExpInterfaceType = this.getSymbolFromDeclPath("RegExp", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol;
}
if (this._cachedRegExpInterfaceType && !this._cachedRegExpInterfaceType.isResolved) {
this.resolveDeclaredSymbol(this._cachedRegExpInterfaceType, new TypeScript.PullTypeResolutionContext(this));
}
return this._cachedRegExpInterfaceType;
};
PullTypeResolver.prototype.cachedFunctionArgumentsSymbol = function () {
if (!this._cachedFunctionArgumentsSymbol) {
this._cachedFunctionArgumentsSymbol = new TypeScript.PullSymbol("arguments", 512 /* Variable */);
this._cachedFunctionArgumentsSymbol.type = this.cachedIArgumentsInterfaceType() || this.semanticInfoChain.anyTypeSymbol;
this._cachedFunctionArgumentsSymbol.setResolved();
var functionArgumentsDecl = new TypeScript.PullSynthesizedDecl("arguments", "arguments", 2048 /* Parameter */, 0 /* None */, null, this.semanticInfoChain);
functionArgumentsDecl.setSymbol(this._cachedFunctionArgumentsSymbol);
this._cachedFunctionArgumentsSymbol.addDeclaration(functionArgumentsDecl);
}
return this._cachedFunctionArgumentsSymbol;
};
PullTypeResolver.prototype.getApparentType = function (type) {
if (type.isTypeParameter()) {
var baseConstraint = type.getBaseConstraint(this.semanticInfoChain);
if (baseConstraint === this.semanticInfoChain.anyTypeSymbol) {
return this.semanticInfoChain.emptyTypeSymbol;
} else {
type = baseConstraint;
}
}
if (type.isPrimitive()) {
if (type === this.semanticInfoChain.numberTypeSymbol) {
return this.cachedNumberInterfaceType();
}
if (type === this.semanticInfoChain.booleanTypeSymbol) {
return this.cachedBooleanInterfaceType();
}
if (type === this.semanticInfoChain.stringTypeSymbol) {
return this.cachedStringInterfaceType();
}
return type;
}
if (type.isEnum()) {
return this.cachedNumberInterfaceType();
}
return type;
};
PullTypeResolver.prototype.setTypeChecked = function (ast, context) {
context.setTypeChecked(ast);
};
PullTypeResolver.prototype.canTypeCheckAST = function (ast, context) {
return context.canTypeCheckAST(ast);
};
PullTypeResolver.prototype.setSymbolForAST = function (ast, symbol, context) {
if (context && context.inProvisionalResolution()) {
context.setSymbolForAST(ast, symbol);
} else {
this.semanticInfoChain.setSymbolForAST(ast, symbol);
}
};
PullTypeResolver.prototype.getSymbolForAST = function (ast, context) {
var symbol = this.semanticInfoChain.getSymbolForAST(ast);
if (!symbol) {
if (context && context.inProvisionalResolution()) {
symbol = context.getSymbolForAST(ast);
}
}
return symbol;
};
PullTypeResolver.prototype.getASTForDecl = function (decl) {
return this.semanticInfoChain.getASTForDecl(decl);
};
PullTypeResolver.prototype.getNewErrorTypeSymbol = function (name) {
if (typeof name === "undefined") { name = null; }
return new TypeScript.PullErrorTypeSymbol(this.semanticInfoChain.anyTypeSymbol, name);
};
PullTypeResolver.prototype.getEnclosingDecl = function (decl) {
var declPath = decl.getParentPath();
if (declPath.length > 1 && declPath[declPath.length - 1] === decl) {
return declPath[declPath.length - 2];
} else {
return declPath[declPath.length - 1];
}
};
PullTypeResolver.prototype.getExportedMemberSymbol = function (symbol, parent) {
if (!(symbol.kind & (65536 /* Method */ | 4096 /* Property */))) {
var isContainer = (parent.kind & (4 /* Container */ | 32 /* DynamicModule */)) !== 0;
var containerType = !isContainer ? parent.getAssociatedContainerType() : parent;
if (isContainer && containerType) {
if (symbol.anyDeclHasFlag(1 /* Exported */)) {
return symbol;
}
return null;
}
}
return symbol;
};
PullTypeResolver.prototype._getNamedPropertySymbolOfAugmentedType = function (symbolName, parent) {
var memberSymbol = this.getNamedPropertySymbol(symbolName, 68147712 /* SomeValue */, parent);
if (memberSymbol) {
return memberSymbol;
}
if (this.cachedFunctionInterfaceType() && parent.isFunctionType()) {
memberSymbol = this.cachedFunctionInterfaceType().findMember(symbolName, true);
if (memberSymbol) {
return memberSymbol;
}
}
if (this.cachedObjectInterfaceType()) {
return this.cachedObjectInterfaceType().findMember(symbolName, true);
}
return null;
};
PullTypeResolver.prototype.getNamedPropertySymbol = function (symbolName, declSearchKind, parent) {
var member = null;
if (declSearchKind & 68147712 /* SomeValue */) {
member = parent.findMember(symbolName, true);
} else if (declSearchKind & 58728795 /* SomeType */) {
member = parent.findNestedType(symbolName);
} else if (declSearchKind & 164 /* SomeContainer */) {
member = parent.findNestedContainer(symbolName);
}
if (member) {
return this.getExportedMemberSymbol(member, parent);
}
var containerType = parent.getAssociatedContainerType();
if (containerType) {
if (containerType.isClass()) {
return null;
}
parent = containerType;
if (declSearchKind & 68147712 /* SomeValue */) {
member = parent.findMember(symbolName, true);
} else if (declSearchKind & 58728795 /* SomeType */) {
member = parent.findNestedType(symbolName);
} else if (declSearchKind & 164 /* SomeContainer */) {
member = parent.findNestedContainer(symbolName);
}
if (member) {
return this.getExportedMemberSymbol(member, parent);
}
}
if (parent.kind & 164 /* SomeContainer */) {
var typeDeclarations = parent.getDeclarations();
var childDecls = null;
for (var j = 0; j < typeDeclarations.length; j++) {
childDecls = typeDeclarations[j].searchChildDecls(symbolName, declSearchKind);
if (childDecls.length) {
member = childDecls[0].getSymbol();
if (!member) {
member = childDecls[0].getSignatureSymbol();
}
return this.getExportedMemberSymbol(member, parent);
}
if ((declSearchKind & 58728795 /* SomeType */) !== 0 || (declSearchKind & 68147712 /* SomeValue */) !== 0) {
childDecls = typeDeclarations[j].searchChildDecls(symbolName, 128 /* TypeAlias */);
if (childDecls.length && childDecls[0].kind === 128 /* TypeAlias */) {
var aliasSymbol = this.getExportedMemberSymbol(childDecls[0].getSymbol(), parent);
if (aliasSymbol) {
if ((declSearchKind & 58728795 /* SomeType */) !== 0) {
var typeSymbol = aliasSymbol.getExportAssignedTypeSymbol();
if (typeSymbol) {
return typeSymbol;
}
} else {
var valueSymbol = aliasSymbol.getExportAssignedValueSymbol();
if (valueSymbol) {
aliasSymbol.setIsUsedAsValue();
return valueSymbol;
}
}
return aliasSymbol;
}
}
}
}
}
};
PullTypeResolver.prototype.getSymbolFromDeclPath = function (symbolName, declPath, declSearchKind) {
var _this = this;
var symbol = null;
var decl = null;
var childDecls;
var declSymbol = null;
var declMembers;
var pathDeclKind;
var valDecl = null;
var kind;
var instanceSymbol = null;
var instanceType = null;
var childSymbol = null;
var allowedContainerDeclKind = 4 /* Container */ | 32 /* DynamicModule */;
if (TypeScript.hasFlag(declSearchKind, 67108864 /* EnumMember */)) {
allowedContainerDeclKind |= 64 /* Enum */;
}
var isAcceptableAlias = function (symbol) {
if (symbol.isAlias()) {
_this.resolveDeclaredSymbol(symbol);
if (TypeScript.hasFlag(declSearchKind, 164 /* SomeContainer */)) {
if (symbol.assignedContainer() || symbol.getExportAssignedContainerSymbol()) {
return true;
}
} else if (TypeScript.hasFlag(declSearchKind, 58728795 /* SomeType */)) {
var type = symbol.getExportAssignedTypeSymbol();
if (type && type.kind !== 32 /* DynamicModule */) {
return true;
}
var type = symbol.assignedType();
if (type && type.kind !== 32 /* DynamicModule */) {
return true;
}
} else if (TypeScript.hasFlag(declSearchKind, 68147712 /* SomeValue */ & ~67108864 /* EnumMember */)) {
if (symbol.assignedType() && symbol.assignedType().isError()) {
return true;
} else if (symbol.assignedValue() || symbol.getExportAssignedValueSymbol()) {
return true;
} else {
var assignedType = symbol.assignedType();
if (assignedType && assignedType.isContainer() && assignedType.getInstanceType()) {
return true;
}
var decls = symbol.getDeclarations();
var ast = decls[0].ast();
return ast.moduleReference.kind() === 245 /* ExternalModuleReference */;
}
}
}
return false;
};
var tryFindAlias = function (decl) {
var childDecls = decl.searchChildDecls(symbolName, 128 /* TypeAlias */);
if (childDecls.length) {
var sym = childDecls[0].getSymbol();
if (isAcceptableAlias(sym)) {
return sym;
}
}
return null;
};
for (var i = declPath.length - 1; i >= 0; i--) {
decl = declPath[i];
pathDeclKind = decl.kind;
if (decl.flags & 2097152 /* DeclaredInAWithBlock */) {
return this.semanticInfoChain.anyTypeSymbol;
}
if (pathDeclKind & allowedContainerDeclKind) {
childDecls = decl.searchChildDecls(symbolName, declSearchKind);
if (childDecls.length) {
return childDecls[0].getSymbol();
}
var alias = tryFindAlias(decl);
if (alias) {
return alias;
}
if (declSearchKind & 68147712 /* SomeValue */) {
instanceSymbol = decl.getSymbol().getInstanceSymbol();
if (instanceSymbol) {
instanceType = instanceSymbol.type;
childSymbol = this.getNamedPropertySymbol(symbolName, declSearchKind, instanceType);
if (childSymbol && (childSymbol.kind & declSearchKind) && !childSymbol.anyDeclHasFlag(16 /* Static */)) {
return childSymbol;
}
}
valDecl = decl.getValueDecl();
if (valDecl) {
decl = valDecl;
}
}
declSymbol = decl.getSymbol().type;
var childSymbol = this.getNamedPropertySymbol(symbolName, declSearchKind, declSymbol);
if (childSymbol && (childSymbol.kind & declSearchKind) && !childSymbol.anyDeclHasFlag(16 /* Static */)) {
return childSymbol;
}
} else if ((declSearchKind & (58728795 /* SomeType */ | 164 /* SomeContainer */)) || !(pathDeclKind & 8 /* Class */)) {
var candidateSymbol = null;
if (pathDeclKind === 131072 /* FunctionExpression */ && symbolName === decl.getFunctionExpressionName()) {
candidateSymbol = decl.getSymbol();
}
childDecls = decl.searchChildDecls(symbolName, declSearchKind);
if (childDecls.length) {
if (decl.kind & 1032192 /* SomeFunction */) {
decl.ensureSymbolIsBound();
}
return childDecls[0].getSymbol();
}
if (candidateSymbol) {
return candidateSymbol;
}
var alias = tryFindAlias(decl);
if (alias) {
return alias;
}
}
}
symbol = this.semanticInfoChain.findSymbol([symbolName], declSearchKind);
if (symbol) {
return symbol;
}
if (!TypeScript.hasFlag(declSearchKind, 128 /* TypeAlias */)) {
symbol = this.semanticInfoChain.findSymbol([symbolName], 128 /* TypeAlias */);
if (symbol && isAcceptableAlias(symbol)) {
return symbol;
}
}
return null;
};
PullTypeResolver.prototype.getVisibleDeclsFromDeclPath = function (declPath, declSearchKind) {
var result = [];
var decl = null;
var childDecls;
var pathDeclKind;
for (var i = declPath.length - 1; i >= 0; i--) {
decl = declPath[i];
pathDeclKind = decl.kind;
var declKind = decl.kind;
if (declKind !== 8 /* Class */ && declKind !== 16 /* Interface */) {
this.addFilteredDecls(decl.getChildDecls(), declSearchKind, result);
}
switch (declKind) {
case 4 /* Container */:
case 32 /* DynamicModule */:
var otherDecls = this.semanticInfoChain.findDeclsFromPath(declPath.slice(0, i + 1), 164 /* SomeContainer */);
for (var j = 0, m = otherDecls.length; j < m; j++) {
var otherDecl = otherDecls[j];
if (otherDecl === decl) {
continue;
}
var otherDeclChildren = otherDecl.getChildDecls();
for (var k = 0, s = otherDeclChildren.length; k < s; k++) {
var otherDeclChild = otherDeclChildren[k];
if ((otherDeclChild.flags & 1 /* Exported */) && (otherDeclChild.kind & declSearchKind)) {
result.push(otherDeclChild);
}
}
}
break;
case 8 /* Class */:
case 16 /* Interface */:
var parameters = decl.getTypeParameters();
if (parameters && parameters.length) {
this.addFilteredDecls(parameters, declSearchKind, result);
}
break;
case 131072 /* FunctionExpression */:
var functionExpressionName = decl.getFunctionExpressionName();
if (functionExpressionName) {
result.push(decl);
}
case 16384 /* Function */:
case 32768 /* ConstructorMethod */:
case 65536 /* Method */:
var parameters = decl.getTypeParameters();
if (parameters && parameters.length) {
this.addFilteredDecls(parameters, declSearchKind, result);
}
break;
}
}
var topLevelDecls = this.semanticInfoChain.topLevelDecls();
for (var i = 0, n = topLevelDecls.length; i < n; i++) {
var topLevelDecl = topLevelDecls[i];
if (declPath.length > 0 && topLevelDecl.fileName() === declPath[0].fileName()) {
continue;
}
if (!topLevelDecl.isExternalModule()) {
this.addFilteredDecls(topLevelDecl.getChildDecls(), declSearchKind, result);
}
}
return result;
};
PullTypeResolver.prototype.addFilteredDecls = function (decls, declSearchKind, result) {
if (decls.length) {
for (var i = 0, n = decls.length; i < n; i++) {
var decl = decls[i];
if (decl.kind & declSearchKind) {
result.push(decl);
}
}
}
};
PullTypeResolver.prototype.getVisibleDecls = function (enclosingDecl) {
var declPath = enclosingDecl.getParentPath();
var declSearchKind = 58728795 /* SomeType */ | 164 /* SomeContainer */ | 68147712 /* SomeValue */;
return this.getVisibleDeclsFromDeclPath(declPath, declSearchKind);
};
PullTypeResolver.prototype.getVisibleContextSymbols = function (enclosingDecl, context) {
var contextualTypeSymbol = context.getContextualType();
if (!contextualTypeSymbol || this.isAnyOrEquivalent(contextualTypeSymbol)) {
return null;
}
var declSearchKind = 58728795 /* SomeType */ | 164 /* SomeContainer */ | 68147712 /* SomeValue */;
var members = contextualTypeSymbol.getAllMembers(declSearchKind, 2 /* externallyVisible */);
for (var i = 0; i < members.length; i++) {
members[i].setUnresolved();
}
return members;
};
PullTypeResolver.prototype.getVisibleMembersFromExpression = function (expression, enclosingDecl, context) {
var lhs = this.resolveAST(expression, false, context);
if (isTypesOnlyLocation(expression) && (lhs.kind === 8 /* Class */ || lhs.kind === 16 /* Interface */ || lhs.kind === 64 /* Enum */)) {
return null;
}
var lhsType = lhs.type;
if (!lhsType) {
return null;
}
this.resolveDeclaredSymbol(lhsType, context);
if (lhsType.isContainer() && lhsType.isAlias()) {
lhsType = lhsType.getExportAssignedTypeSymbol();
}
if (this.isAnyOrEquivalent(lhsType)) {
return null;
}
var memberVisibilty = 2 /* externallyVisible */;
var containerSymbol = lhsType;
if (containerSymbol.kind === 33554432 /* ConstructorType */) {
containerSymbol = containerSymbol.getConstructSignatures()[0].returnType;
}
if (containerSymbol && containerSymbol.isClass()) {
var declPath = enclosingDecl.getParentPath();
if (declPath && declPath.length) {
var declarations = containerSymbol.getDeclarations();
for (var i = 0, n = declarations.length; i < n; i++) {
var declaration = declarations[i];
if (TypeScript.ArrayUtilities.contains(declPath, declaration)) {
memberVisibilty = 1 /* internallyVisible */;
break;
}
}
}
}
var declSearchKind = 58728795 /* SomeType */ | 164 /* SomeContainer */ | 68147712 /* SomeValue */;
var members = [];
if (lhsType.isContainer()) {
var exportedAssignedContainerSymbol = lhsType.getExportAssignedContainerSymbol();
if (exportedAssignedContainerSymbol) {
lhsType = exportedAssignedContainerSymbol;
}
}
lhsType = this.getApparentType(lhsType);
if (!lhsType.isResolved) {
var potentiallySpecializedType = this.resolveDeclaredSymbol(lhsType, context);
if (potentiallySpecializedType !== lhsType) {
if (!lhs.isType()) {
context.setTypeInContext(lhs, potentiallySpecializedType);
}
lhsType = potentiallySpecializedType;
}
}
members = lhsType.getAllMembers(declSearchKind, memberVisibilty);
if (lhsType.isContainer()) {
var associatedInstance = lhsType.getInstanceSymbol();
if (associatedInstance) {
var instanceType = associatedInstance.type;
this.resolveDeclaredSymbol(instanceType, context);
var instanceMembers = instanceType.getAllMembers(declSearchKind, memberVisibilty);
members = members.concat(instanceMembers);
}
var exportedContainer = lhsType.getExportAssignedContainerSymbol();
if (exportedContainer) {
var exportedContainerMembers = exportedContainer.getAllMembers(declSearchKind, memberVisibilty);
members = members.concat(exportedContainerMembers);
}
} else if (!lhsType.isConstructor() && !lhsType.isEnum()) {
var associatedContainerSymbol = lhsType.getAssociatedContainerType();
if (associatedContainerSymbol) {
var containerType = associatedContainerSymbol.type;
this.resolveDeclaredSymbol(containerType, context);
var containerMembers = containerType.getAllMembers(declSearchKind, memberVisibilty);
members = members.concat(containerMembers);
}
}
if (lhsType.isFunctionType() && this.cachedFunctionInterfaceType()) {
members = members.concat(this.cachedFunctionInterfaceType().getAllMembers(declSearchKind, 2 /* externallyVisible */));
}
return members;
};
PullTypeResolver.prototype.isAnyOrEquivalent = function (type) {
return (type === this.semanticInfoChain.anyTypeSymbol) || type.isError();
};
PullTypeResolver.prototype.resolveExternalModuleReference = function (idText, currentFileName) {
var originalIdText = idText;
var symbol = null;
if (TypeScript.isRelative(originalIdText)) {
var path = TypeScript.getRootFilePath(TypeScript.switchToForwardSlashes(currentFileName));
symbol = this.semanticInfoChain.findExternalModule(path + idText);
} else {
idText = originalIdText;
symbol = this.semanticInfoChain.findAmbientExternalModuleInGlobalContext(TypeScript.quoteStr(originalIdText));
if (!symbol) {
var path = TypeScript.getRootFilePath(TypeScript.switchToForwardSlashes(currentFileName));
while (symbol === null && path != "") {
symbol = this.semanticInfoChain.findExternalModule(path + idText);
if (symbol === null) {
if (path === '/') {
path = '';
} else {
path = TypeScript.normalizePath(path + "..");
path = path && path != '/' ? path + '/' : path;
}
}
}
}
}
return symbol;
};
PullTypeResolver.prototype.resolveDeclaredSymbol = function (symbol, context) {
if (!symbol || symbol.isResolved || symbol.isTypeReference()) {
return symbol;
}
if (!context) {
context = new TypeScript.PullTypeResolutionContext(this);
}
return this.resolveDeclaredSymbolWorker(symbol, context);
};
PullTypeResolver.prototype.resolveDeclaredSymbolWorker = function (symbol, context) {
if (!symbol || symbol.isResolved) {
return symbol;
}
if (symbol.inResolution) {
if (!symbol.type && !symbol.isType()) {
symbol.type = this.semanticInfoChain.anyTypeSymbol;
}
return symbol;
}
var decls = symbol.getDeclarations();
for (var i = 0; i < decls.length; i++) {
var decl = decls[i];
var ast = this.semanticInfoChain.getASTForDecl(decl);
if (!ast || (ast.kind() === 139 /* GetAccessor */ && ast.parent.parent.kind() === 215 /* ObjectLiteralExpression */) || (ast.kind() === 140 /* SetAccessor */ && ast.parent.parent.kind() === 215 /* ObjectLiteralExpression */)) {
return symbol;
}
if (ast.parent && ast.parent.kind() === 236 /* CatchClause */ && ast.parent.identifier === ast) {
return symbol;
}
if (ast.parent && ast.parent.kind() === 219 /* SimpleArrowFunctionExpression */ && ast.parent.identifier === ast) {
return symbol;
}
var enclosingModule = TypeScript.ASTHelpers.getEnclosingModuleDeclaration(ast);
var resolvedSymbol;
if (TypeScript.ASTHelpers.isAnyNameOfModule(enclosingModule, ast)) {
resolvedSymbol = this.resolveSingleModuleDeclaration(enclosingModule, ast, context);
} else if (ast.kind() === 120 /* SourceUnit */ && decl.kind === 32 /* DynamicModule */) {
resolvedSymbol = this.resolveModuleSymbol(decl.getSymbol(), context, null, null, ast);
} else {
TypeScript.Debug.assert(ast.kind() !== 11 /* IdentifierName */ && ast.kind() !== 212 /* MemberAccessExpression */);
resolvedSymbol = this.resolveAST(ast, false, context);
}
if (decl.kind === 2048 /* Parameter */ && !symbol.isResolved && !symbol.type && resolvedSymbol && symbol.anyDeclHasFlag(8388608 /* PropertyParameter */ | 67108864 /* ConstructorParameter */)) {
symbol.type = resolvedSymbol.type;
symbol.setResolved();
}
}
return symbol;
};
PullTypeResolver.prototype.resolveOtherDecl = function (otherDecl, context) {
var astForOtherDecl = this.getASTForDecl(otherDecl);
var moduleDecl = TypeScript.ASTHelpers.getEnclosingModuleDeclaration(astForOtherDecl);
if (TypeScript.ASTHelpers.isAnyNameOfModule(moduleDecl, astForOtherDecl)) {
this.resolveSingleModuleDeclaration(moduleDecl, astForOtherDecl, context);
} else {
this.resolveAST(astForOtherDecl, false, context);
}
};
PullTypeResolver.prototype.resolveOtherDeclarations = function (astName, context) {
var _this = this;
var resolvedDecl = this.semanticInfoChain.getDeclForAST(astName);
var symbol = resolvedDecl.getSymbol();
var allDecls = symbol.getDeclarations();
this.inResolvingOtherDeclsWalker.walkOtherPullDecls(resolvedDecl, symbol.getDeclarations(), function (otherDecl) {
return _this.resolveOtherDecl(otherDecl, context);
});
};
PullTypeResolver.prototype.resolveSourceUnit = function (sourceUnit, context) {
var enclosingDecl = this.getEnclosingDeclForAST(sourceUnit);
var moduleSymbol = enclosingDecl.getSymbol();
this.ensureAllSymbolsAreBound(moduleSymbol);
this.resolveFirstExportAssignmentStatement(sourceUnit.moduleElements, context);
this.resolveAST(sourceUnit.moduleElements, false, context);
if (this.canTypeCheckAST(sourceUnit, context)) {
this.typeCheckSourceUnit(sourceUnit, context);
}
return moduleSymbol;
};
PullTypeResolver.prototype.typeCheckSourceUnit = function (sourceUnit, context) {
var _this = this;
this.setTypeChecked(sourceUnit, context);
this.resolveAST(sourceUnit.moduleElements, false, context);
this.typeCheckCallBacks.push(function (context) {
return _this.verifyUniquenessOfImportNamesInSourceUnit(sourceUnit);
});
};
PullTypeResolver.prototype.verifyUniquenessOfImportNamesInSourceUnit = function (sourceUnit) {
var _this = this;
var enclosingDecl = this.semanticInfoChain.getDeclForAST(sourceUnit);
var doesImportNameExistInOtherFiles = function (name) {
var importSymbol = _this.semanticInfoChain.findTopLevelSymbol(name, 128 /* TypeAlias */, null);
return importSymbol && importSymbol.isAlias();
};
this.checkUniquenessOfImportNames([enclosingDecl], doesImportNameExistInOtherFiles);
};
PullTypeResolver.prototype.resolveEnumDeclaration = function (ast, context) {
var containerDecl = this.semanticInfoChain.getDeclForAST(ast);
var containerSymbol = containerDecl.getSymbol();
if (containerSymbol.isResolved || containerSymbol.inResolution) {
return containerSymbol;
}
containerSymbol.inResolution = true;
var containerDecls = containerSymbol.getDeclarations();
for (var i = 0; i < containerDecls.length; i++) {
var childDecls = containerDecls[i].getChildDecls();
for (var j = 0; j < childDecls.length; j++) {
childDecls[j].ensureSymbolIsBound();
}
}
containerSymbol.setResolved();
this.resolveOtherDeclarations(ast, context);
if (this.canTypeCheckAST(ast, context)) {
this.typeCheckEnumDeclaration(ast, context);
}
return containerSymbol;
};
PullTypeResolver.prototype.typeCheckEnumDeclaration = function (ast, context) {
var _this = this;
this.setTypeChecked(ast, context);
this.resolveAST(ast.enumElements, false, context);
var containerDecl = this.semanticInfoChain.getDeclForAST(ast);
this.validateVariableDeclarationGroups(containerDecl, context);
this.typeCheckCallBacks.push(function (context) {
return _this.checkInitializersInEnumDeclarations(containerDecl, context);
});
if (!TypeScript.ASTHelpers.enumIsElided(ast)) {
this.checkNameForCompilerGeneratedDeclarationCollision(ast, true, ast.identifier, context);
}
};
PullTypeResolver.prototype.postTypeCheckEnumDeclaration = function (ast, context) {
this.checkThisCaptureVariableCollides(ast, true, context);
};
PullTypeResolver.prototype.checkInitializersInEnumDeclarations = function (decl, context) {
var symbol = decl.getSymbol();
var declarations = symbol.getDeclarations();
if (decl !== declarations[0]) {
return;
}
var seenEnumDeclWithNoFirstMember = false;
for (var i = 0; i < declarations.length; ++i) {
var currentDecl = declarations[i];
var ast = currentDecl.ast();
if (ast.enumElements.nonSeparatorCount() === 0) {
continue;
}
var firstVariable = ast.enumElements.nonSeparatorAt(0);
if (!firstVariable.equalsValueClause) {
if (!seenEnumDeclWithNoFirstMember) {
seenEnumDeclWithNoFirstMember = true;
} else {
this.semanticInfoChain.addDiagnosticFromAST(firstVariable, TypeScript.DiagnosticCode.In_enums_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_the_first_enum_element);
}
}
}
};
PullTypeResolver.prototype.resolveModuleDeclaration = function (ast, context) {
var result;
if (ast.stringLiteral) {
result = this.resolveSingleModuleDeclaration(ast, ast.stringLiteral, context);
} else {
var moduleNames = TypeScript.getModuleNames(ast.name);
for (var i = 0, n = moduleNames.length; i < n; i++) {
result = this.resolveSingleModuleDeclaration(ast, moduleNames[i], context);
}
}
if (this.canTypeCheckAST(ast, context)) {
this.typeCheckModuleDeclaration(ast, context);
}
return result;
};
PullTypeResolver.prototype.ensureAllSymbolsAreBound = function (containerSymbol) {
if (containerSymbol) {
var containerDecls = containerSymbol.getDeclarations();
for (var i = 0; i < containerDecls.length; i++) {
var childDecls = containerDecls[i].getChildDecls();
for (var j = 0; j < childDecls.length; j++) {
childDecls[j].ensureSymbolIsBound();
}
}
}
};
PullTypeResolver.prototype.resolveModuleSymbol = function (containerSymbol, context, moduleDeclAST, moduleDeclNameAST, sourceUnitAST) {
if (containerSymbol.isResolved || containerSymbol.inResolution) {
return containerSymbol;
}
containerSymbol.inResolution = true;
this.ensureAllSymbolsAreBound(containerSymbol);
var instanceSymbol = containerSymbol.getInstanceSymbol();
if (instanceSymbol) {
this.resolveDeclaredSymbol(instanceSymbol, context);
}
var isLastName = TypeScript.ASTHelpers.isLastNameOfModule(moduleDeclAST, moduleDeclNameAST);
if (isLastName) {
this.resolveFirstExportAssignmentStatement(moduleDeclAST.moduleElements, context);
} else if (sourceUnitAST) {
this.resolveFirstExportAssignmentStatement(sourceUnitAST.moduleElements, context);
}
containerSymbol.setResolved();
if (moduleDeclNameAST) {
this.resolveOtherDeclarations(moduleDeclNameAST, context);
}
return containerSymbol;
};
PullTypeResolver.prototype.resolveFirstExportAssignmentStatement = function (moduleElements, context) {
for (var i = 0, n = moduleElements.childCount(); i < n; i++) {
var moduleElement = moduleElements.childAt(i);
if (moduleElement.kind() === 134 /* ExportAssignment */) {
this.resolveExportAssignmentStatement(moduleElement, context);
return;
}
}
};
PullTypeResolver.prototype.resolveSingleModuleDeclaration = function (ast, astName, context) {
var containerDecl = this.semanticInfoChain.getDeclForAST(astName);
var containerSymbol = containerDecl.getSymbol();
return this.resolveModuleSymbol(containerSymbol, context, ast, astName, null);
};
PullTypeResolver.prototype.typeCheckModuleDeclaration = function (ast, context) {
if (ast.stringLiteral) {
this.typeCheckSingleModuleDeclaration(ast, ast.stringLiteral, context);
} else {
var moduleNames = TypeScript.getModuleNames(ast.name);
for (var i = 0, n = moduleNames.length; i < n; i++) {
this.typeCheckSingleModuleDeclaration(ast, moduleNames[i], context);
}
}
};
PullTypeResolver.prototype.typeCheckSingleModuleDeclaration = function (ast, astName, context) {
var _this = this;
this.setTypeChecked(ast, context);
if (TypeScript.ASTHelpers.isLastNameOfModule(ast, astName)) {
this.resolveAST(ast.moduleElements, false, context);
}
var containerDecl = this.semanticInfoChain.getDeclForAST(astName);
this.validateVariableDeclarationGroups(containerDecl, context);
if (ast.stringLiteral) {
if (TypeScript.isRelative(ast.stringLiteral.valueText())) {
this.semanticInfoChain.addDiagnosticFromAST(ast.stringLiteral, TypeScript.DiagnosticCode.Ambient_external_module_declaration_cannot_specify_relative_module_name);
}
}
if (!TypeScript.ASTHelpers.moduleIsElided(ast) && !ast.stringLiteral) {
this.checkNameForCompilerGeneratedDeclarationCollision(astName, true, astName, context);
}
this.typeCheckCallBacks.push(function (context) {
return _this.verifyUniquenessOfImportNamesInModule(containerDecl);
});
};
PullTypeResolver.prototype.verifyUniquenessOfImportNamesInModule = function (decl) {
var symbol = decl.getSymbol();
if (!symbol) {
return;
}
var decls = symbol.getDeclarations();
if (decls[0] !== decl) {
return;
}
this.checkUniquenessOfImportNames(decls);
};
PullTypeResolver.prototype.checkUniquenessOfImportNames = function (decls, doesNameExistOutside) {
var _this = this;
var importDeclarationNames;
for (var i = 0; i < decls.length; ++i) {
var childDecls = decls[i].getChildDecls();
for (var j = 0; j < childDecls.length; ++j) {
var childDecl = childDecls[j];
if (childDecl.kind === 128 /* TypeAlias */) {
importDeclarationNames = importDeclarationNames || TypeScript.createIntrinsicsObject();
importDeclarationNames[childDecl.name] = true;
}
}
}
if (!importDeclarationNames && !doesNameExistOutside) {
return;
}
for (var i = 0; i < decls.length; ++i) {
this.scanVariableDeclarationGroups(decls[i], function (firstDeclInGroup) {
var nameConflict = importDeclarationNames && importDeclarationNames[firstDeclInGroup.name];
if (!nameConflict) {
nameConflict = doesNameExistOutside && doesNameExistOutside(firstDeclInGroup.name);
if (nameConflict) {
importDeclarationNames = importDeclarationNames || TypeScript.createIntrinsicsObject();
importDeclarationNames[firstDeclInGroup.name] = true;
}
}
if (nameConflict) {
_this.semanticInfoChain.addDiagnosticFromAST(firstDeclInGroup.ast(), TypeScript.DiagnosticCode.Variable_declaration_cannot_have_the_same_name_as_an_import_declaration);
}
});
}
};
PullTypeResolver.prototype.scanVariableDeclarationGroups = function (enclosingDecl, firstDeclHandler, subsequentDeclHandler) {
var declGroups = enclosingDecl.getVariableDeclGroups();
for (var i = 0; i < declGroups.length; i++) {
var firstSymbol = null;
var enclosingDeclForFirstSymbol = null;
if (enclosingDecl.kind === 1 /* Script */ && declGroups[i].length) {
var name = declGroups[i][0].name;
var candidateSymbol = this.semanticInfoChain.findTopLevelSymbol(name, 512 /* Variable */, enclosingDecl);
if (candidateSymbol && candidateSymbol.isResolved) {
if (!candidateSymbol.anyDeclHasFlag(118784 /* ImplicitVariable */)) {
firstSymbol = candidateSymbol;
}
}
}
for (var j = 0; j < declGroups[i].length; j++) {
var decl = declGroups[i][j];
var name = decl.name;
var symbol = decl.getSymbol();
if (j === 0) {
firstDeclHandler(decl);
if (!subsequentDeclHandler) {
break;
}
if (!firstSymbol || !firstSymbol.type) {
firstSymbol = symbol;
continue;
}
}
subsequentDeclHandler(decl, firstSymbol);
}
}
};
PullTypeResolver.prototype.postTypeCheckModuleDeclaration = function (ast, context) {
this.checkThisCaptureVariableCollides(ast, true, context);
};
PullTypeResolver.prototype.isTypeRefWithoutTypeArgs = function (term) {
if (term.kind() === 11 /* IdentifierName */) {
return true;
} else if (term.kind() === 121 /* QualifiedName */) {
var binex = term;
if (binex.right.kind() === 11 /* IdentifierName */) {
return true;
}
}
return false;
};
PullTypeResolver.prototype.createInstantiatedType = function (type, typeArguments) {
if (!type.isGeneric()) {
return type;
}
var typeParameters = type.getTypeArgumentsOrTypeParameters();
var typeParameterArgumentMap = [];
for (var i = 0; i < typeParameters.length; i++) {
typeParameterArgumentMap[typeParameters[i].pullSymbolID] = typeArguments[i] || new TypeScript.PullErrorTypeSymbol(this.semanticInfoChain.anyTypeSymbol, typeParameters[i].name);
}
return TypeScript.PullInstantiatedTypeReferenceSymbol.create(this, type, typeParameterArgumentMap);
};
PullTypeResolver.prototype.resolveReferenceTypeDeclaration = function (classOrInterface, name, heritageClauses, context) {
var _this = this;
var typeDecl = this.semanticInfoChain.getDeclForAST(classOrInterface);
var enclosingDecl = this.getEnclosingDecl(typeDecl);
var typeDeclSymbol = typeDecl.getSymbol();
var typeDeclIsClass = classOrInterface.kind() === 131 /* ClassDeclaration */;
var hasVisited = this.getSymbolForAST(classOrInterface, context) !== null;
if ((typeDeclSymbol.isResolved && hasVisited) || (typeDeclSymbol.inResolution && !context.isInBaseTypeResolution())) {
return typeDeclSymbol;
}
var wasResolving = typeDeclSymbol.inResolution;
typeDeclSymbol.startResolving();
var typeRefDecls = typeDeclSymbol.getDeclarations();
for (var i = 0; i < typeRefDecls.length; i++) {
var childDecls = typeRefDecls[i].getChildDecls();
for (var j = 0; j < childDecls.length; j++) {
childDecls[j].ensureSymbolIsBound();
}
}
if (!typeDeclSymbol.isResolved) {
var typeDeclTypeParameters = typeDeclSymbol.getTypeParameters();
for (var i = 0; i < typeDeclTypeParameters.length; i++) {
this.resolveDeclaredSymbol(typeDeclTypeParameters[i], context);
}
}
var wasInBaseTypeResolution = context.startBaseTypeResolution();
if (!typeDeclIsClass && !hasVisited) {
typeDeclSymbol.resetKnownBaseTypeCount();
}
var extendsClause = TypeScript.ASTHelpers.getExtendsHeritageClause(heritageClauses);
if (extendsClause) {
for (var i = typeDeclSymbol.getKnownBaseTypeCount(); i < extendsClause.typeNames.nonSeparatorCount(); i = typeDeclSymbol.getKnownBaseTypeCount()) {
typeDeclSymbol.incrementKnownBaseCount();
var parentType = this.resolveTypeReference(extendsClause.typeNames.nonSeparatorAt(i), context);
if (typeDeclSymbol.isValidBaseKind(parentType, true)) {
this.setSymbolForAST(extendsClause.typeNames.nonSeparatorAt(i), parentType, null);
if (!typeDeclSymbol.hasBase(parentType) && !parentType.hasBase(typeDeclSymbol)) {
typeDeclSymbol.addExtendedType(parentType);
var specializations = typeDeclSymbol.getKnownSpecializations();
for (var j = 0; j < specializations.length; j++) {
specializations[j].addExtendedType(parentType);
}
}
} else if (parentType && !this.getSymbolForAST(extendsClause.typeNames.nonSeparatorAt(i), context)) {
this.setSymbolForAST(extendsClause.typeNames.nonSeparatorAt(i), parentType, null);
}
}
}
var implementsClause = TypeScript.ASTHelpers.getImplementsHeritageClause(heritageClauses);
if (implementsClause && typeDeclIsClass) {
var extendsCount = extendsClause ? extendsClause.typeNames.nonSeparatorCount() : 0;
for (var i = typeDeclSymbol.getKnownBaseTypeCount(); ((i - extendsCount) >= 0) && ((i - extendsCount) < implementsClause.typeNames.nonSeparatorCount()); i = typeDeclSymbol.getKnownBaseTypeCount()) {
typeDeclSymbol.incrementKnownBaseCount();
var implementedTypeAST = implementsClause.typeNames.nonSeparatorAt(i - extendsCount);
var implementedType = this.resolveTypeReference(implementedTypeAST, context);
if (typeDeclSymbol.isValidBaseKind(implementedType, false)) {
this.setSymbolForAST(implementsClause.typeNames.nonSeparatorAt(i - extendsCount), implementedType, null);
if (!typeDeclSymbol.hasBase(implementedType) && !implementedType.hasBase(typeDeclSymbol)) {
typeDeclSymbol.addImplementedType(implementedType);
}
} else if (implementedType && !this.getSymbolForAST(implementsClause.typeNames.nonSeparatorAt(i - extendsCount), context)) {
this.setSymbolForAST(implementsClause.typeNames.nonSeparatorAt(i - extendsCount), implementedType, null);
}
}
}
context.doneBaseTypeResolution(wasInBaseTypeResolution);
if (wasInBaseTypeResolution) {
typeDeclSymbol.inResolution = false;
this.typeCheckCallBacks.push(function (context) {
if (classOrInterface.kind() === 131 /* ClassDeclaration */) {
_this.resolveClassDeclaration(classOrInterface, context);
} else {
_this.resolveInterfaceDeclaration(classOrInterface, context);
}
});
return typeDeclSymbol;
}
this.setSymbolForAST(name, typeDeclSymbol, context);
this.setSymbolForAST(classOrInterface, typeDeclSymbol, context);
typeDeclSymbol.setResolved();
return typeDeclSymbol;
};
PullTypeResolver.prototype.resolveClassDeclaration = function (classDeclAST, context) {
var classDecl = this.semanticInfoChain.getDeclForAST(classDeclAST);
var classDeclSymbol = classDecl.getSymbol();
if (!classDeclSymbol.isResolved) {
this.resolveReferenceTypeDeclaration(classDeclAST, classDeclAST.identifier, classDeclAST.heritageClauses, context);
var constructorMethod = classDeclSymbol.getConstructorMethod();
var extendedTypes = classDeclSymbol.getExtendedTypes();
var parentType = extendedTypes.length ? extendedTypes[0] : null;
if (constructorMethod) {
var constructorTypeSymbol = constructorMethod.type;
var constructSignatures = constructorTypeSymbol.getConstructSignatures();
if (!constructSignatures.length) {
var constructorSignature;
var parentConstructor = parentType ? parentType.getConstructorMethod() : null;
if (parentConstructor) {
this.resolveDeclaredSymbol(parentConstructor, context);
var parentConstructorType = parentConstructor.type;
var parentConstructSignatures = parentConstructorType.getConstructSignatures();
var parentConstructSignature;
var parentParameters;
if (!parentConstructSignatures.length) {
parentConstructSignature = new TypeScript.PullSignatureSymbol(2097152 /* ConstructSignature */);
parentConstructSignature.returnType = parentType;
parentConstructSignature.addTypeParametersFromReturnType();
parentConstructorType.appendConstructSignature(parentConstructSignature);
parentConstructSignature.addDeclaration(parentType.getDeclarations()[0]);
parentConstructSignatures = [parentConstructSignature];
}
for (var i = 0; i < parentConstructSignatures.length; i++) {
parentConstructSignature = parentConstructSignatures[i];
parentParameters = parentConstructSignature.parameters;
constructorSignature = new TypeScript.PullSignatureSymbol(2097152 /* ConstructSignature */, parentConstructSignature.isDefinition());
constructorSignature.returnType = classDeclSymbol;
constructorSignature.addTypeParametersFromReturnType();
for (var j = 0; j < parentParameters.length; j++) {
constructorSignature.addParameter(parentParameters[j], parentParameters[j].isOptional);
}
constructorTypeSymbol.appendConstructSignature(constructorSignature);
constructorSignature.addDeclaration(classDecl);
}
} else {
constructorSignature = new TypeScript.PullSignatureSymbol(2097152 /* ConstructSignature */);
constructorSignature.returnType = classDeclSymbol;
constructorSignature.addTypeParametersFromReturnType();
constructorTypeSymbol.appendConstructSignature(constructorSignature);
constructorSignature.addDeclaration(classDecl);
}
}
if (!classDeclSymbol.isResolved) {
return classDeclSymbol;
}
if (parentType) {
var parentConstructorSymbol = parentType.getConstructorMethod();
if (parentConstructorSymbol) {
var parentConstructorTypeSymbol = parentConstructorSymbol.type;
if (!constructorTypeSymbol.hasBase(parentConstructorTypeSymbol)) {
constructorTypeSymbol.addExtendedType(parentConstructorTypeSymbol);
}
}
}
}
this.resolveOtherDeclarations(classDeclAST, context);
}
if (this.canTypeCheckAST(classDeclAST, context)) {
this.typeCheckClassDeclaration(classDeclAST, context);
}
return classDeclSymbol;
};
PullTypeResolver.prototype.typeCheckTypeParametersOfTypeDeclaration = function (classOrInterface, context) {
var _this = this;
var typeParametersList = classOrInterface.kind() == 131 /* ClassDeclaration */ ? classOrInterface.typeParameterList : classOrInterface.typeParameterList;
if (typeParametersList) {
var typeDecl = this.semanticInfoChain.getDeclForAST(classOrInterface);
var typeDeclSymbol = typeDecl.getSymbol();
for (var i = 0; i < typeParametersList.typeParameters.nonSeparatorCount(); i++) {
var typeParameterAST = typeParametersList.typeParameters.nonSeparatorAt(i);
this.resolveTypeParameterDeclaration(typeParameterAST, context);
var typeParameterDecl = this.semanticInfoChain.getDeclForAST(typeParameterAST);
var typeParameterSymbol = typeParameterDecl.getSymbol();
this.checkSymbolPrivacy(typeDeclSymbol, typeParameterSymbol, function (symbol) {
return _this.typeParameterOfTypeDeclarationPrivacyErrorReporter(classOrInterface, typeParameterAST, typeParameterSymbol, symbol, context);
});
}
}
};
PullTypeResolver.prototype.typeCheckClassDeclaration = function (classDeclAST, context) {
this.setTypeChecked(classDeclAST, context);
var classDecl = this.semanticInfoChain.getDeclForAST(classDeclAST);
var classDeclSymbol = classDecl.getSymbol();
this.checkNameForCompilerGeneratedDeclarationCollision(classDeclAST, true, classDeclAST.identifier, context);
this.resolveAST(classDeclAST.classElements, false, context);
this.typeCheckTypeParametersOfTypeDeclaration(classDeclAST, context);
this.typeCheckBases(classDeclAST, classDeclAST.identifier, classDeclAST.heritageClauses, classDeclSymbol, this.getEnclosingDecl(classDecl), context);
if (!classDeclSymbol.hasBaseTypeConflict()) {
this.typeCheckMembersAgainstIndexer(classDeclSymbol, classDecl, context);
}
this.checkTypeForDuplicateIndexSignatures(classDeclSymbol);
};
PullTypeResolver.prototype.postTypeCheckClassDeclaration = function (classDeclAST, context) {
this.checkThisCaptureVariableCollides(classDeclAST, true, context);
};
PullTypeResolver.prototype.resolveTypeSymbolSignatures = function (typeSymbol, context) {
var callSignatures = typeSymbol.getCallSignatures();
for (var i = 0; i < callSignatures.length; i++) {
this.resolveDeclaredSymbol(callSignatures[i], context);
}
var constructSignatures = typeSymbol.getConstructSignatures();
for (var i = 0; i < constructSignatures.length; i++) {
this.resolveDeclaredSymbol(constructSignatures[i], context);
}
var indexSignatures = typeSymbol.getIndexSignatures();
for (var i = 0; i < indexSignatures.length; i++) {
this.resolveDeclaredSymbol(indexSignatures[i], context);
}
};
PullTypeResolver.prototype.resolveInterfaceDeclaration = function (interfaceDeclAST, context) {
this.resolveReferenceTypeDeclaration(interfaceDeclAST, interfaceDeclAST.identifier, interfaceDeclAST.heritageClauses, context);
var interfaceDecl = this.semanticInfoChain.getDeclForAST(interfaceDeclAST);
var interfaceDeclSymbol = interfaceDecl.getSymbol();
this.resolveTypeSymbolSignatures(interfaceDeclSymbol, context);
if (interfaceDeclSymbol.isResolved) {
this.resolveOtherDeclarations(interfaceDeclAST, context);
if (this.canTypeCheckAST(interfaceDeclAST, context)) {
this.typeCheckInterfaceDeclaration(interfaceDeclAST, context);
}
}
return interfaceDeclSymbol;
};
PullTypeResolver.prototype.typeCheckInterfaceDeclaration = function (interfaceDeclAST, context) {
this.setTypeChecked(interfaceDeclAST, context);
var interfaceDecl = this.semanticInfoChain.getDeclForAST(interfaceDeclAST);
var interfaceDeclSymbol = interfaceDecl.getSymbol();
this.resolveAST(interfaceDeclAST.body.typeMembers, false, context);
this.typeCheckTypeParametersOfTypeDeclaration(interfaceDeclAST, context);
this.typeCheckBases(interfaceDeclAST, interfaceDeclAST.identifier, interfaceDeclAST.heritageClauses, interfaceDeclSymbol, this.getEnclosingDecl(interfaceDecl), context);
if (!interfaceDeclSymbol.hasBaseTypeConflict()) {
this.typeCheckMembersAgainstIndexer(interfaceDeclSymbol, interfaceDecl, context);
}
var allInterfaceDecls = interfaceDeclSymbol.getDeclarations();
if (interfaceDecl === allInterfaceDecls[allInterfaceDecls.length - 1]) {
this.checkTypeForDuplicateIndexSignatures(interfaceDeclSymbol);
}
if (!this.checkInterfaceDeclForIdenticalTypeParameters(interfaceDeclAST, context)) {
this.semanticInfoChain.addDiagnosticFromAST(interfaceDeclAST.identifier, TypeScript.DiagnosticCode.All_declarations_of_an_interface_must_have_identical_type_parameters);
}
};
PullTypeResolver.prototype.checkInterfaceDeclForIdenticalTypeParameters = function (interfaceDeclAST, context) {
var interfaceDecl = this.semanticInfoChain.getDeclForAST(interfaceDeclAST);
var interfaceDeclSymbol = interfaceDecl.getSymbol();
if (!interfaceDeclSymbol.isGeneric()) {
return true;
}
var firstInterfaceDecl = interfaceDeclSymbol.getDeclarations()[0];
if (firstInterfaceDecl == interfaceDecl) {
return true;
}
var typeParameters = interfaceDecl.getTypeParameters();
var firstInterfaceDeclTypeParameters = firstInterfaceDecl.getTypeParameters();
if (typeParameters.length != firstInterfaceDeclTypeParameters.length) {
return false;
}
for (var i = 0; i < typeParameters.length; i++) {
var typeParameter = typeParameters[i];
var firstInterfaceDeclTypeParameter = firstInterfaceDeclTypeParameters[i];
if (typeParameter.name != firstInterfaceDeclTypeParameter.name) {
return false;
}
var typeParameterSymbol = typeParameter.getSymbol();
var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter);
var firstInterfaceDeclTypeParameterAST = this.semanticInfoChain.getASTForDecl(firstInterfaceDeclTypeParameter);
if (!!typeParameterAST.constraint != !!firstInterfaceDeclTypeParameterAST.constraint) {
return false;
}
if (typeParameterAST.constraint) {
var typeParameterConstraint = this.resolveAST(typeParameterAST.constraint, false, context);
if (!this.typesAreIdenticalWithNewEnclosingTypes(typeParameterConstraint, typeParameterSymbol.getConstraint(), context)) {
return false;
}
}
}
return true;
};
PullTypeResolver.prototype.checkTypeForDuplicateIndexSignatures = function (enclosingTypeSymbol) {
var indexSignatures = enclosingTypeSymbol.getOwnIndexSignatures();
var firstStringIndexer = null;
var firstNumberIndexer = null;
for (var i = 0; i < indexSignatures.length; i++) {
var currentIndexer = indexSignatures[i];
var currentParameterType = currentIndexer.parameters[0].type;
TypeScript.Debug.assert(currentParameterType);
if (currentParameterType === this.semanticInfoChain.stringTypeSymbol) {
if (firstStringIndexer) {
this.semanticInfoChain.addDiagnosticFromAST(currentIndexer.getDeclarations()[0].ast(), TypeScript.DiagnosticCode.Duplicate_string_index_signature, null, [this.semanticInfoChain.locationFromAST(firstStringIndexer.getDeclarations()[0].ast())]);
return;
} else {
firstStringIndexer = currentIndexer;
}
} else if (currentParameterType === this.semanticInfoChain.numberTypeSymbol) {
if (firstNumberIndexer) {
this.semanticInfoChain.addDiagnosticFromAST(currentIndexer.getDeclarations()[0].ast(), TypeScript.DiagnosticCode.Duplicate_number_index_signature, null, [this.semanticInfoChain.locationFromAST(firstNumberIndexer.getDeclarations()[0].ast())]);
return;
} else {
firstNumberIndexer = currentIndexer;
}
}
}
};
PullTypeResolver.prototype.filterSymbol = function (symbol, kind, enclosingDecl, context) {
if (symbol) {
if (symbol.kind & kind) {
return symbol;
}
if (symbol.isAlias()) {
this.resolveDeclaredSymbol(symbol, context);
var alias = symbol;
if (kind & 164 /* SomeContainer */) {
return alias.getExportAssignedContainerSymbol();
} else if (kind & 58728795 /* SomeType */) {
return alias.getExportAssignedTypeSymbol();
} else if (kind & 68147712 /* SomeValue */) {
return alias.getExportAssignedValueSymbol();
}
}
}
return null;
};
PullTypeResolver.prototype.getMemberSymbolOfKind = function (symbolName, kind, pullTypeSymbol, enclosingDecl, context) {
var memberSymbol = this.getNamedPropertySymbol(symbolName, kind, pullTypeSymbol);
return {
symbol: this.filterSymbol(memberSymbol, kind, enclosingDecl, context),
aliasSymbol: memberSymbol && memberSymbol.isAlias() ? memberSymbol : null
};
};
PullTypeResolver.prototype.resolveIdentifierOfInternalModuleReference = function (importDecl, identifier, moduleSymbol, enclosingDecl, context) {
var rhsName = identifier.valueText();
if (rhsName.length === 0) {
return null;
}
var moduleTypeSymbol = moduleSymbol.type;
var memberSymbol = this.getMemberSymbolOfKind(rhsName, 164 /* SomeContainer */, moduleTypeSymbol, enclosingDecl, context);
var containerSymbol = memberSymbol.symbol;
var valueSymbol = null;
var typeSymbol = null;
var aliasSymbol = null;
var acceptableAlias = true;
if (containerSymbol) {
acceptableAlias = (containerSymbol.kind & 59753052 /* AcceptableAlias */) !== 0;
aliasSymbol = memberSymbol.aliasSymbol;
}
if (!acceptableAlias && containerSymbol && containerSymbol.kind === 128 /* TypeAlias */) {
this.resolveDeclaredSymbol(containerSymbol, context);
var aliasedAssignedValue = containerSymbol.getExportAssignedValueSymbol();
var aliasedAssignedType = containerSymbol.getExportAssignedTypeSymbol();
var aliasedAssignedContainer = containerSymbol.getExportAssignedContainerSymbol();
if (aliasedAssignedValue || aliasedAssignedType || aliasedAssignedContainer) {
aliasSymbol = containerSymbol;
valueSymbol = aliasedAssignedValue;
typeSymbol = aliasedAssignedType;
containerSymbol = aliasedAssignedContainer;
acceptableAlias = true;
}
}
if (!acceptableAlias) {
this.semanticInfoChain.addDiagnosticFromAST(identifier, TypeScript.DiagnosticCode.Import_declaration_referencing_identifier_from_internal_module_can_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules);
return null;
}
if (!valueSymbol) {
if (moduleTypeSymbol.getInstanceSymbol()) {
memberSymbol = this.getMemberSymbolOfKind(rhsName, 68147712 /* SomeValue */, moduleTypeSymbol.getInstanceSymbol().type, enclosingDecl, context);
valueSymbol = memberSymbol.symbol;
if (valueSymbol && memberSymbol.aliasSymbol) {
aliasSymbol = memberSymbol.aliasSymbol;
}
}
}
if (!typeSymbol) {
memberSymbol = this.getMemberSymbolOfKind(rhsName, 58728795 /* SomeType */, moduleTypeSymbol, enclosingDecl, context);
typeSymbol = memberSymbol.symbol;
if (typeSymbol && memberSymbol.aliasSymbol) {
aliasSymbol = memberSymbol.aliasSymbol;
}
}
if (!valueSymbol && !typeSymbol && !containerSymbol) {
this.semanticInfoChain.addDiagnosticFromAST(identifier, TypeScript.DiagnosticCode.Could_not_find_symbol_0_in_module_1, [rhsName, moduleSymbol.toString()]);
return null;
}
if (!typeSymbol && containerSymbol) {
typeSymbol = containerSymbol;
}
return {
valueSymbol: valueSymbol,
typeSymbol: typeSymbol,
containerSymbol: containerSymbol,
aliasSymbol: aliasSymbol
};
};
PullTypeResolver.prototype.resolveModuleReference = function (importDecl, moduleNameExpr, enclosingDecl, context, declPath) {
TypeScript.Debug.assert(moduleNameExpr.kind() === 121 /* QualifiedName */ || moduleNameExpr.kind() === 11 /* IdentifierName */ || moduleNameExpr.kind() === 14 /* StringLiteral */, "resolving module reference should always be either name or member reference");
var moduleSymbol = null;
var moduleName;
if (moduleNameExpr.kind() === 121 /* QualifiedName */) {
var dottedNameAST = moduleNameExpr;
var moduleContainer = this.resolveModuleReference(importDecl, dottedNameAST.left, enclosingDecl, context, declPath);
if (moduleContainer) {
moduleName = dottedNameAST.right.valueText();
moduleSymbol = this.getMemberSymbolOfKind(moduleName, 4 /* Container */, moduleContainer.type, enclosingDecl, context).symbol;
if (!moduleSymbol) {
this.semanticInfoChain.addDiagnosticFromAST(dottedNameAST.right, TypeScript.DiagnosticCode.Could_not_find_module_0_in_module_1, [moduleName, moduleContainer.toString()]);
}
}
} else {
var valueText = moduleNameExpr.kind() === 11 /* IdentifierName */ ? moduleNameExpr.valueText() : moduleNameExpr.valueText();
var text = moduleNameExpr.kind() === 11 /* IdentifierName */ ? moduleNameExpr.text() : moduleNameExpr.text();
if (text.length > 0) {
var resolvedModuleNameSymbol = this.getSymbolFromDeclPath(valueText, declPath, 4 /* Container */);
moduleSymbol = this.filterSymbol(resolvedModuleNameSymbol, 4 /* Container */, enclosingDecl, context);
if (moduleSymbol) {
this.semanticInfoChain.setSymbolForAST(moduleNameExpr, moduleSymbol);
if (resolvedModuleNameSymbol.isAlias()) {
this.semanticInfoChain.setAliasSymbolForAST(moduleNameExpr, resolvedModuleNameSymbol);
var importDeclSymbol = importDecl.getSymbol();
importDeclSymbol.addLinkedAliasSymbol(resolvedModuleNameSymbol);
}
} else {
this.semanticInfoChain.addDiagnosticFromAST(moduleNameExpr, TypeScript.DiagnosticCode.Unable_to_resolve_module_reference_0, [valueText]);
}
}
}
return moduleSymbol;
};
PullTypeResolver.prototype.resolveInternalModuleReference = function (importStatementAST, context) {
var importDecl = this.semanticInfoChain.getDeclForAST(importStatementAST);
var enclosingDecl = this.getEnclosingDecl(importDecl);
var moduleReference = importStatementAST.moduleReference;
var aliasExpr = moduleReference.kind() === 245 /* ExternalModuleReference */ ? moduleReference.stringLiteral : moduleReference.moduleName;
var declPath = enclosingDecl.getParentPath();
var aliasedType = null;
var importDeclSymbol = importDecl.getSymbol();
if (aliasExpr.kind() === 11 /* IdentifierName */ || aliasExpr.kind() === 14 /* StringLiteral */) {
var moduleSymbol = this.resolveModuleReference(importDecl, aliasExpr, enclosingDecl, context, declPath);
if (moduleSymbol) {
aliasedType = moduleSymbol.type;
this.semanticInfoChain.setAliasSymbolForAST(moduleReference, this.semanticInfoChain.getAliasSymbolForAST(aliasExpr));
if (aliasedType.anyDeclHasFlag(32768 /* InitializedModule */)) {
var moduleName = aliasExpr.kind() === 11 /* IdentifierName */ ? aliasExpr.valueText() : aliasExpr.valueText();
var valueSymbol = this.getSymbolFromDeclPath(moduleName, declPath, 68147712 /* SomeValue */);
var instanceSymbol = aliasedType.getInstanceSymbol();
if (valueSymbol && (instanceSymbol != valueSymbol || valueSymbol.type === aliasedType)) {
var text = aliasExpr.kind() === 11 /* IdentifierName */ ? aliasExpr.text() : aliasExpr.text();
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(aliasExpr, TypeScript.DiagnosticCode.Internal_module_reference_0_in_import_declaration_does_not_reference_module_instance_for_1, [text, moduleSymbol.type.toString(enclosingDecl ? enclosingDecl.getSymbol() : null)]));
} else {
importDeclSymbol.setAssignedValueSymbol(valueSymbol);
}
}
} else {
aliasedType = this.getNewErrorTypeSymbol();
}
} else if (aliasExpr.kind() === 121 /* QualifiedName */) {
var dottedNameAST = aliasExpr;
var moduleSymbol = this.resolveModuleReference(importDecl, dottedNameAST.left, enclosingDecl, context, declPath);
if (moduleSymbol) {
var identifierResolution = this.resolveIdentifierOfInternalModuleReference(importDecl, dottedNameAST.right, moduleSymbol, enclosingDecl, context);
if (identifierResolution) {
importDeclSymbol.setAssignedValueSymbol(identifierResolution.valueSymbol);
importDeclSymbol.setAssignedTypeSymbol(identifierResolution.typeSymbol);
importDeclSymbol.setAssignedContainerSymbol(identifierResolution.containerSymbol);
this.semanticInfoChain.setAliasSymbolForAST(moduleReference, identifierResolution.aliasSymbol);
return null;
}
}
}
if (!aliasedType) {
importDeclSymbol.setAssignedTypeSymbol(this.getNewErrorTypeSymbol());
}
return aliasedType;
};
PullTypeResolver.prototype.resolveImportDeclaration = function (importStatementAST, context) {
var importDecl = this.semanticInfoChain.getDeclForAST(importStatementAST);
var enclosingDecl = this.getEnclosingDecl(importDecl);
var importDeclSymbol = importDecl.getSymbol();
var aliasedType = null;
if (importDeclSymbol.isResolved) {
return importDeclSymbol;
}
importDeclSymbol.startResolving();
if (importStatementAST.moduleReference.kind() === 245 /* ExternalModuleReference */) {
var modPath = importStatementAST.moduleReference.stringLiteral.valueText();
var declPath = enclosingDecl.getParentPath();
aliasedType = this.resolveExternalModuleReference(modPath, importDecl.fileName());
if (!aliasedType) {
var path = importStatementAST.moduleReference.stringLiteral.text();
this.semanticInfoChain.addDiagnosticFromAST(importStatementAST, TypeScript.DiagnosticCode.Unable_to_resolve_external_module_0, [path]);
aliasedType = this.getNewErrorTypeSymbol();
}
} else {
aliasedType = this.resolveInternalModuleReference(importStatementAST, context);
}
if (aliasedType) {
if (!aliasedType.isContainer()) {
this.semanticInfoChain.addDiagnosticFromAST(importStatementAST, TypeScript.DiagnosticCode.Module_cannot_be_aliased_to_a_non_module_type);
if (!aliasedType.isError()) {
aliasedType = this.getNewErrorTypeSymbol();
}
}
if (aliasedType.isContainer()) {
importDeclSymbol.setAssignedContainerSymbol(aliasedType);
}
importDeclSymbol.setAssignedTypeSymbol(aliasedType);
this.setSymbolForAST(importStatementAST.moduleReference, aliasedType, null);
}
importDeclSymbol.setResolved();
this.resolveDeclaredSymbol(importDeclSymbol.assignedValue(), context);
this.resolveDeclaredSymbol(importDeclSymbol.assignedType(), context);
this.resolveDeclaredSymbol(importDeclSymbol.assignedContainer(), context);
if (aliasedType && importDeclSymbol.anyDeclHasFlag(1 /* Exported */)) {
importDeclSymbol.setIsUsedInExportedAlias();
if (aliasedType.isContainer() && aliasedType.getExportAssignedValueSymbol()) {
importDeclSymbol.setIsUsedAsValue();
}
}
if (this.canTypeCheckAST(importStatementAST, context)) {
this.typeCheckImportDeclaration(importStatementAST, context);
}
return importDeclSymbol;
};
PullTypeResolver.prototype.typeCheckImportDeclaration = function (importStatementAST, context) {
var _this = this;
this.setTypeChecked(importStatementAST, context);
var importDecl = this.semanticInfoChain.getDeclForAST(importStatementAST);
var enclosingDecl = this.getEnclosingDecl(importDecl);
var importDeclSymbol = importDecl.getSymbol();
if (importStatementAST.moduleReference.kind() === 245 /* ExternalModuleReference */) {
if (this.compilationSettings.noResolve()) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(importStatementAST, TypeScript.DiagnosticCode.Import_declaration_cannot_refer_to_external_module_reference_when_noResolve_option_is_set, null));
}
var modPath = importStatementAST.moduleReference.stringLiteral.valueText();
if (enclosingDecl.kind === 32 /* DynamicModule */) {
var ast = TypeScript.ASTHelpers.getEnclosingModuleDeclaration(this.getASTForDecl(enclosingDecl));
if (ast && ast.kind() === 130 /* ModuleDeclaration */) {
if (TypeScript.isRelative(modPath)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(importStatementAST, TypeScript.DiagnosticCode.Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name));
}
}
}
}
var checkPrivacy;
if (importStatementAST.moduleReference.kind() === 245 /* ExternalModuleReference */) {
var containerSymbol = importDeclSymbol.getExportAssignedContainerSymbol();
var container = containerSymbol ? containerSymbol.getContainer() : null;
if (container && container.kind === 32 /* DynamicModule */) {
checkPrivacy = true;
}
} else {
checkPrivacy = true;
}
if (checkPrivacy) {
var typeSymbol = importDeclSymbol.getExportAssignedTypeSymbol();
var containerSymbol = importDeclSymbol.getExportAssignedContainerSymbol();
var valueSymbol = importDeclSymbol.getExportAssignedValueSymbol();
this.checkSymbolPrivacy(importDeclSymbol, containerSymbol, function (symbol) {
var messageCode = TypeScript.DiagnosticCode.Exported_import_declaration_0_is_assigned_container_that_is_or_is_using_inaccessible_module_1;
var messageArguments = [importDeclSymbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null), symbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null, false, false, true)];
context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(importStatementAST, messageCode, messageArguments));
});
if (typeSymbol !== containerSymbol) {
this.checkSymbolPrivacy(importDeclSymbol, typeSymbol, function (symbol) {
var messageCode = symbol.isContainer() && !symbol.isEnum() ? TypeScript.DiagnosticCode.Exported_import_declaration_0_is_assigned_type_that_is_using_inaccessible_module_1 : TypeScript.DiagnosticCode.Exported_import_declaration_0_is_assigned_type_that_has_or_is_using_private_type_1;
var messageArguments = [importDeclSymbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null), symbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null, false, false, true)];
context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(importStatementAST, messageCode, messageArguments));
});
}
if (valueSymbol) {
this.checkSymbolPrivacy(importDeclSymbol, valueSymbol.type, function (symbol) {
var messageCode = symbol.isContainer() && !symbol.isEnum() ? TypeScript.DiagnosticCode.Exported_import_declaration_0_is_assigned_value_with_type_that_is_using_inaccessible_module_1 : TypeScript.DiagnosticCode.Exported_import_declaration_0_is_assigned_value_with_type_that_has_or_is_using_private_type_1;
var messageArguments = [importDeclSymbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null), symbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null, false, false, true)];
context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(importStatementAST, messageCode, messageArguments));
});
}
}
this.checkNameForCompilerGeneratedDeclarationCollision(importStatementAST, true, importStatementAST.identifier, context);
};
PullTypeResolver.prototype.postTypeCheckImportDeclaration = function (importStatementAST, context) {
var importDecl = this.semanticInfoChain.getDeclForAST(importStatementAST);
var importSymbol = importDecl.getSymbol();
var isUsedAsValue = importSymbol.isUsedAsValue();
var hasAssignedValue = importStatementAST.moduleReference.kind() !== 245 /* ExternalModuleReference */ && importSymbol.getExportAssignedValueSymbol() !== null;
if (isUsedAsValue || hasAssignedValue) {
this.checkThisCaptureVariableCollides(importStatementAST, true, context);
}
};
PullTypeResolver.prototype.resolveExportAssignmentStatement = function (exportAssignmentAST, context) {
var id = exportAssignmentAST.identifier.valueText();
if (id.length === 0) {
return this.semanticInfoChain.anyTypeSymbol;
}
var valueSymbol = null;
var typeSymbol = null;
var containerSymbol = null;
var enclosingDecl = this.getEnclosingDeclForAST(exportAssignmentAST);
var parentSymbol = enclosingDecl.getSymbol();
if (!parentSymbol.isType() && parentSymbol.isContainer()) {
this.semanticInfoChain.addDiagnosticFromAST(exportAssignmentAST, TypeScript.DiagnosticCode.Export_assignments_may_only_be_used_at_the_top_level_of_external_modules);
return this.semanticInfoChain.anyTypeSymbol;
}
var declPath = enclosingDecl !== null ? [enclosingDecl] : [];
containerSymbol = this.getSymbolFromDeclPath(id, declPath, 164 /* SomeContainer */);
var acceptableAlias = true;
if (containerSymbol) {
acceptableAlias = (containerSymbol.kind & 59753052 /* AcceptableAlias */) !== 0;
}
if (!acceptableAlias && containerSymbol && containerSymbol.kind === 128 /* TypeAlias */) {
this.resolveDeclaredSymbol(containerSymbol, context);
var aliasSymbol = containerSymbol;
var aliasedAssignedValue = aliasSymbol.getExportAssignedValueSymbol();
var aliasedAssignedType = aliasSymbol.getExportAssignedTypeSymbol();
var aliasedAssignedContainer = aliasSymbol.getExportAssignedContainerSymbol();
if (aliasedAssignedValue || aliasedAssignedType || aliasedAssignedContainer) {
valueSymbol = aliasedAssignedValue;
typeSymbol = aliasedAssignedType;
containerSymbol = aliasedAssignedContainer;
aliasSymbol.setTypeUsedExternally();
if (valueSymbol) {
aliasSymbol.setIsUsedAsValue();
}
acceptableAlias = true;
}
}
if (!acceptableAlias) {
this.semanticInfoChain.addDiagnosticFromAST(exportAssignmentAST, TypeScript.DiagnosticCode.Export_assignments_may_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules);
return this.semanticInfoChain.voidTypeSymbol;
}
if (!valueSymbol) {
valueSymbol = this.getSymbolFromDeclPath(id, declPath, 68147712 /* SomeValue */);
}
if (!typeSymbol) {
typeSymbol = this.getSymbolFromDeclPath(id, declPath, 58728795 /* SomeType */);
}
if (!valueSymbol && !typeSymbol && !containerSymbol) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(exportAssignmentAST, TypeScript.DiagnosticCode.Could_not_find_symbol_0, [id]));
return this.semanticInfoChain.voidTypeSymbol;
}
if (valueSymbol) {
parentSymbol.setExportAssignedValueSymbol(valueSymbol);
}
if (typeSymbol) {
parentSymbol.setExportAssignedTypeSymbol(typeSymbol);
}
if (containerSymbol) {
parentSymbol.setExportAssignedContainerSymbol(containerSymbol);
}
this.resolveDeclaredSymbol(valueSymbol, context);
this.resolveDeclaredSymbol(typeSymbol, context);
this.resolveDeclaredSymbol(containerSymbol, context);
return this.semanticInfoChain.voidTypeSymbol;
};
PullTypeResolver.prototype.resolveAnyFunctionTypeSignature = function (funcDeclAST, typeParameters, parameterList, returnTypeAnnotation, context) {
var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST);
TypeScript.Debug.assert(functionDecl);
var funcDeclSymbol = functionDecl.getSymbol();
var signature = funcDeclSymbol.kind === 33554432 /* ConstructorType */ ? funcDeclSymbol.getConstructSignatures()[0] : funcDeclSymbol.getCallSignatures()[0];
if (returnTypeAnnotation) {
signature.returnType = this.resolveTypeReference(returnTypeAnnotation, context);
}
if (typeParameters) {
for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) {
this.resolveTypeParameterDeclaration(typeParameters.typeParameters.nonSeparatorAt(i), context);
}
}
if (parameterList) {
for (var i = 0; i < parameterList.parameters.nonSeparatorCount(); i++) {
this.resolveFunctionTypeSignatureParameter(parameterList.parameters.nonSeparatorAt(i), signature, functionDecl, context);
}
}
funcDeclSymbol.setResolved();
if (this.canTypeCheckAST(funcDeclAST, context)) {
this.setTypeChecked(funcDeclAST, context);
this.typeCheckFunctionOverloads(funcDeclAST, context);
}
return funcDeclSymbol;
};
PullTypeResolver.prototype.resolveFunctionTypeSignatureParameter = function (argDeclAST, signature, enclosingDecl, context) {
var paramDecl = this.semanticInfoChain.getDeclForAST(argDeclAST);
var paramSymbol = paramDecl.getSymbol();
if (argDeclAST.typeAnnotation) {
var typeRef = this.resolveTypeReference(TypeScript.ASTHelpers.getType(argDeclAST), context);
if (paramSymbol.isVarArg && !typeRef.isArrayNamedTypeReference()) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Rest_parameters_must_be_array_types));
typeRef = this.getNewErrorTypeSymbol();
}
context.setTypeInContext(paramSymbol, typeRef);
} else {
if (paramSymbol.isVarArg) {
if (this.cachedArrayInterfaceType()) {
context.setTypeInContext(paramSymbol, this.createInstantiatedType(this.cachedArrayInterfaceType(), [this.semanticInfoChain.anyTypeSymbol]));
} else {
context.setTypeInContext(paramSymbol, this.semanticInfoChain.anyTypeSymbol);
}
} else {
context.setTypeInContext(paramSymbol, this.semanticInfoChain.anyTypeSymbol);
}
if (this.compilationSettings.noImplicitAny()) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Parameter_0_of_function_type_implicitly_has_an_any_type, [argDeclAST.identifier.text()]));
}
}
if (TypeScript.hasFlag(paramDecl.flags, 128 /* Optional */) && argDeclAST.equalsValueClause && isTypesOnlyLocation(argDeclAST)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Default_arguments_are_only_allowed_in_implementation));
}
paramSymbol.setResolved();
};
PullTypeResolver.prototype.resolveFunctionExpressionParameter = function (argDeclAST, id, typeExpr, equalsValueClause, contextParam, enclosingDecl, context) {
var paramDecl = this.semanticInfoChain.getDeclForAST(argDeclAST);
var paramSymbol = paramDecl.getSymbol();
var contextualType = contextParam && contextParam.type;
var isImplicitAny = false;
if (typeExpr) {
var typeRef = this.resolveTypeReference(typeExpr, context);
if (paramSymbol.isVarArg && !typeRef.isArrayNamedTypeReference()) {
var diagnostic = context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Rest_parameters_must_be_array_types));
typeRef = this.getNewErrorTypeSymbol();
}
contextualType = typeRef || contextualType;
}
if (contextualType) {
if (context.isInferentiallyTyping()) {
contextualType = context.fixAllTypeParametersReferencedByType(contextualType, this);
}
context.setTypeInContext(paramSymbol, contextualType);
} else if (paramSymbol.isVarArg) {
if (this.cachedArrayInterfaceType()) {
context.setTypeInContext(paramSymbol, this.createInstantiatedType(this.cachedArrayInterfaceType(), [this.semanticInfoChain.anyTypeSymbol]));
} else {
context.setTypeInContext(paramSymbol, this.semanticInfoChain.anyTypeSymbol);
}
isImplicitAny = true;
}
var canTypeCheckAST = this.canTypeCheckAST(argDeclAST, context);
if (equalsValueClause && (canTypeCheckAST || !contextualType)) {
if (contextualType) {
context.propagateContextualType(contextualType);
}
var initExprSymbol = this.resolveAST(equalsValueClause, contextualType !== null, context);
if (contextualType) {
context.popAnyContextualType();
}
if (!initExprSymbol || !initExprSymbol.type) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Unable_to_resolve_type_of_0, [id.text()]));
if (!contextualType) {
context.setTypeInContext(paramSymbol, this.getNewErrorTypeSymbol(paramSymbol.name));
}
} else {
var initTypeSymbol = this.getInstanceTypeForAssignment(argDeclAST, initExprSymbol.type, context);
if (!contextualType) {
context.setTypeInContext(paramSymbol, initTypeSymbol.widenedType(this, equalsValueClause, context));
isImplicitAny = initTypeSymbol !== paramSymbol.type;
} else {
var comparisonInfo = new TypeComparisonInfo();
var isAssignable = this.sourceIsAssignableToTarget(initTypeSymbol, contextualType, argDeclAST, context, comparisonInfo);
if (!isAssignable) {
var enclosingSymbol = this.getEnclosingSymbolForAST(argDeclAST);
if (comparisonInfo.message) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [initTypeSymbol.toString(enclosingSymbol), contextualType.toString(enclosingSymbol), comparisonInfo.message]));
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [initTypeSymbol.toString(enclosingSymbol), contextualType.toString(enclosingSymbol)]));
}
}
}
}
}
if (!contextualType && !paramSymbol.isVarArg && !initTypeSymbol) {
context.setTypeInContext(paramSymbol, this.semanticInfoChain.anyTypeSymbol);
isImplicitAny = true;
}
if (isImplicitAny && this.compilationSettings.noImplicitAny()) {
var functionExpressionName = paramDecl.getParentDecl().getFunctionExpressionName();
if (functionExpressionName) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Parameter_0_of_1_implicitly_has_an_any_type, [id.text(), functionExpressionName]));
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Parameter_0_of_lambda_function_implicitly_has_an_any_type, [id.text()]));
}
}
if (canTypeCheckAST) {
this.checkNameForCompilerGeneratedDeclarationCollision(argDeclAST, true, id, context);
}
paramSymbol.setResolved();
};
PullTypeResolver.prototype.checkNameForCompilerGeneratedDeclarationCollision = function (astWithName, isDeclaration, name, context) {
var compilerReservedName = getCompilerReservedName(name);
switch (compilerReservedName) {
case 1 /* _this */:
this.postTypeCheckWorkitems.push(astWithName);
return;
case 2 /* _super */:
this.checkSuperCaptureVariableCollides(astWithName, isDeclaration, context);
return;
case 3 /* arguments */:
this.checkArgumentsCollides(astWithName, context);
return;
case 4 /* _i */:
this.checkIndexOfRestArgumentInitializationCollides(astWithName, isDeclaration, context);
return;
case 5 /* require */:
case 6 /* exports */:
if (isDeclaration) {
this.checkExternalModuleRequireExportsCollides(astWithName, name, context);
}
return;
}
};
PullTypeResolver.prototype.hasRestParameterCodeGen = function (someFunctionDecl) {
var enclosingAST = this.getASTForDecl(someFunctionDecl);
var nodeType = enclosingAST.kind();
if (nodeType === 129 /* FunctionDeclaration */) {
var functionDeclaration = enclosingAST;
return !TypeScript.hasFlag(someFunctionDecl.kind === 65536 /* Method */ ? someFunctionDecl.getParentDecl().flags : someFunctionDecl.flags, 8 /* Ambient */) && functionDeclaration.block && TypeScript.lastParameterIsRest(functionDeclaration.callSignature.parameterList);
} else if (nodeType === 135 /* MemberFunctionDeclaration */) {
var memberFunction = enclosingAST;
return !TypeScript.hasFlag(someFunctionDecl.kind === 65536 /* Method */ ? someFunctionDecl.getParentDecl().flags : someFunctionDecl.flags, 8 /* Ambient */) && memberFunction.block && TypeScript.lastParameterIsRest(memberFunction.callSignature.parameterList);
} else if (nodeType === 137 /* ConstructorDeclaration */) {
var constructorDeclaration = enclosingAST;
return !TypeScript.hasFlag(someFunctionDecl.getParentDecl().flags, 8 /* Ambient */) && constructorDeclaration.block && TypeScript.lastParameterIsRest(constructorDeclaration.callSignature.parameterList);
} else if (nodeType === 218 /* ParenthesizedArrowFunctionExpression */) {
var arrowFunctionExpression = enclosingAST;
return TypeScript.lastParameterIsRest(arrowFunctionExpression.callSignature.parameterList);
} else if (nodeType === 222 /* FunctionExpression */) {
var functionExpression = enclosingAST;
return TypeScript.lastParameterIsRest(functionExpression.callSignature.parameterList);
}
return false;
};
PullTypeResolver.prototype.checkArgumentsCollides = function (ast, context) {
if (ast.kind() === 242 /* Parameter */) {
var enclosingDecl = this.getEnclosingDeclForAST(ast);
if (TypeScript.hasFlag(enclosingDecl.kind, 1032192 /* SomeFunction */)) {
if (this.hasRestParameterCodeGen(enclosingDecl)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters));
}
}
}
};
PullTypeResolver.prototype.checkIndexOfRestArgumentInitializationCollides = function (ast, isDeclaration, context) {
if (!isDeclaration || ast.kind() === 242 /* Parameter */) {
var enclosingDecl = this.getEnclosingDeclForAST(ast);
var declPath = isDeclaration ? [enclosingDecl] : (enclosingDecl ? enclosingDecl.getParentPath() : []);
var resolvedSymbol = null;
var resolvedSymbolContainer;
for (var i = declPath.length - 1; i >= 0; i--) {
var decl = declPath[i];
if (!isDeclaration) {
if (!resolvedSymbol) {
resolvedSymbol = this.resolveNameExpression(ast, context);
if (resolvedSymbol.isError()) {
return;
}
resolvedSymbolContainer = resolvedSymbol.getContainer();
}
if (resolvedSymbolContainer && TypeScript.ArrayUtilities.contains(resolvedSymbolContainer.getDeclarations(), decl)) {
break;
}
}
if (TypeScript.hasFlag(decl.kind, 1032192 /* SomeFunction */)) {
if (this.hasRestParameterCodeGen(decl)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, isDeclaration ? TypeScript.DiagnosticCode.Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter : TypeScript.DiagnosticCode.Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter));
}
}
}
}
};
PullTypeResolver.prototype.checkExternalModuleRequireExportsCollides = function (ast, name, context) {
var enclosingDecl = this.getEnclosingDeclForAST(ast);
var enclosingModule = TypeScript.ASTHelpers.getEnclosingModuleDeclaration(name);
if (TypeScript.ASTHelpers.isAnyNameOfModule(enclosingModule, name)) {
enclosingDecl = this.getEnclosingDeclForAST(enclosingModule);
}
if (enclosingDecl && enclosingDecl.kind === 32 /* DynamicModule */) {
var decl = this.semanticInfoChain.getDeclForAST(ast);
if (!TypeScript.hasFlag(decl.flags, 8 /* Ambient */)) {
var nameText = name.valueText();
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_an_external_module, [nameText, nameText]));
}
}
};
PullTypeResolver.prototype.resolveObjectTypeTypeReference = function (objectType, context) {
var interfaceDecl = this.semanticInfoChain.getDeclForAST(objectType);
TypeScript.Debug.assert(interfaceDecl);
var interfaceSymbol = interfaceDecl.getSymbol();
TypeScript.Debug.assert(interfaceSymbol);
if (objectType.typeMembers) {
var memberDecl = null;
var memberSymbol = null;
var memberType = null;
var typeMembers = objectType.typeMembers;
for (var i = 0; i < typeMembers.nonSeparatorCount(); i++) {
memberDecl = this.semanticInfoChain.getDeclForAST(typeMembers.nonSeparatorAt(i));
memberSymbol = (memberDecl.kind & 7340032 /* SomeSignature */) ? memberDecl.getSignatureSymbol() : memberDecl.getSymbol();
this.resolveAST(typeMembers.nonSeparatorAt(i), false, context);
memberType = memberSymbol.type;
if ((memberType && memberType.isGeneric()) || (memberSymbol.isSignature() && memberSymbol.isGeneric())) {
interfaceSymbol.setHasGenericMember();
}
}
}
interfaceSymbol.setResolved();
if (this.canTypeCheckAST(objectType, context)) {
this.typeCheckObjectTypeTypeReference(objectType, context);
}
return interfaceSymbol;
};
PullTypeResolver.prototype.typeCheckObjectTypeTypeReference = function (objectType, context) {
this.setTypeChecked(objectType, context);
var objectTypeDecl = this.semanticInfoChain.getDeclForAST(objectType);
var objectTypeSymbol = objectTypeDecl.getSymbol();
this.typeCheckMembersAgainstIndexer(objectTypeSymbol, objectTypeDecl, context);
this.checkTypeForDuplicateIndexSignatures(objectTypeSymbol);
};
PullTypeResolver.prototype.resolveTypeAnnotation = function (typeAnnotation, context) {
return this.resolveTypeReference(typeAnnotation.type, context);
};
PullTypeResolver.prototype.resolveTypeReference = function (typeRef, context) {
if (typeRef === null) {
return null;
}
TypeScript.Debug.assert(typeRef.kind() !== 244 /* TypeAnnotation */);
var aliasType = null;
var type = this.computeTypeReferenceSymbol(typeRef, context);
if (type.kind === 4 /* Container */) {
var container = type;
var instanceSymbol = container.getInstanceSymbol();
if (instanceSymbol && (instanceSymbol.anyDeclHasFlag(16384 /* ClassConstructorVariable */) || instanceSymbol.kind === 32768 /* ConstructorMethod */)) {
type = instanceSymbol.type.getAssociatedContainerType();
}
}
if (type && type.isAlias()) {
aliasType = type;
type = aliasType.getExportAssignedTypeSymbol();
}
if (type && !type.isGeneric()) {
if (aliasType) {
this.semanticInfoChain.setAliasSymbolForAST(typeRef, aliasType);
}
}
if (type && !type.isError()) {
if ((type.kind & 58728795 /* SomeType */) === 0) {
if (type.kind & 164 /* SomeContainer */) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(typeRef, TypeScript.DiagnosticCode.Type_reference_cannot_refer_to_container_0, [aliasType ? aliasType.toString() : type.toString()]));
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(typeRef, TypeScript.DiagnosticCode.Type_reference_must_refer_to_type));
}
}
}
if (this.canTypeCheckAST(typeRef, context)) {
this.setTypeChecked(typeRef, context);
}
return type;
};
PullTypeResolver.prototype.getArrayType = function (elementType) {
var arraySymbol = elementType.getArrayType();
if (!arraySymbol) {
arraySymbol = this.createInstantiatedType(this.cachedArrayInterfaceType(), [elementType]);
if (!arraySymbol) {
arraySymbol = this.semanticInfoChain.anyTypeSymbol;
}
elementType.setArrayType(arraySymbol);
}
return arraySymbol;
};
PullTypeResolver.prototype.computeTypeReferenceSymbol = function (term, context) {
switch (term.kind()) {
case 60 /* AnyKeyword */:
return this.semanticInfoChain.anyTypeSymbol;
case 61 /* BooleanKeyword */:
return this.semanticInfoChain.booleanTypeSymbol;
case 67 /* NumberKeyword */:
return this.semanticInfoChain.numberTypeSymbol;
case 69 /* StringKeyword */:
return this.semanticInfoChain.stringTypeSymbol;
case 41 /* VoidKeyword */:
return this.semanticInfoChain.voidTypeSymbol;
}
var typeDeclSymbol = null;
if (term.kind() === 11 /* IdentifierName */) {
typeDeclSymbol = this.resolveTypeNameExpression(term, context);
} else if (term.kind() === 123 /* FunctionType */) {
var functionType = term;
typeDeclSymbol = this.resolveAnyFunctionTypeSignature(functionType, functionType.typeParameterList, functionType.parameterList, functionType.type, context);
} else if (term.kind() === 125 /* ConstructorType */) {
var constructorType = term;
typeDeclSymbol = this.resolveAnyFunctionTypeSignature(constructorType, constructorType.typeParameterList, constructorType.parameterList, constructorType.type, context);
} else if (term.kind() === 122 /* ObjectType */) {
typeDeclSymbol = this.resolveObjectTypeTypeReference(term, context);
} else if (term.kind() === 126 /* GenericType */) {
typeDeclSymbol = this.resolveGenericTypeReference(term, context);
} else if (term.kind() === 121 /* QualifiedName */) {
typeDeclSymbol = this.resolveQualifiedName(term, context);
} else if (term.kind() === 14 /* StringLiteral */) {
var stringConstantAST = term;
var enclosingDecl = this.getEnclosingDeclForAST(term);
typeDeclSymbol = new TypeScript.PullStringConstantTypeSymbol(stringConstantAST.text());
var decl = new TypeScript.PullSynthesizedDecl(stringConstantAST.text(), stringConstantAST.text(), typeDeclSymbol.kind, null, enclosingDecl, enclosingDecl.semanticInfoChain);
typeDeclSymbol.addDeclaration(decl);
} else if (term.kind() === 127 /* TypeQuery */) {
var typeQuery = term;
var typeQueryTerm = typeQuery.name;
var valueSymbol = this.resolveAST(typeQueryTerm, false, context);
if (valueSymbol && valueSymbol.isAlias()) {
if (valueSymbol.assignedValue()) {
valueSymbol = valueSymbol.assignedValue();
} else {
var containerSymbol = valueSymbol.getExportAssignedContainerSymbol();
valueSymbol = (containerSymbol && containerSymbol.isContainer() && !containerSymbol.isEnum()) ? containerSymbol.getInstanceSymbol() : null;
}
}
if (valueSymbol) {
typeDeclSymbol = valueSymbol.type.widenedType(this, typeQueryTerm, context);
} else {
typeDeclSymbol = this.getNewErrorTypeSymbol();
}
} else if (term.kind() === 124 /* ArrayType */) {
var arrayType = term;
var underlying = this.resolveTypeReference(arrayType.type, context);
typeDeclSymbol = this.getArrayType(underlying);
} else {
throw TypeScript.Errors.invalidOperation("unknown type");
}
if (!typeDeclSymbol) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(term, TypeScript.DiagnosticCode.Unable_to_resolve_type));
return this.getNewErrorTypeSymbol();
}
if (typeDeclSymbol.isError()) {
return typeDeclSymbol;
}
if (this.genericTypeIsUsedWithoutRequiredTypeArguments(typeDeclSymbol, term, context)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(term, TypeScript.DiagnosticCode.Generic_type_references_must_include_all_type_arguments));
typeDeclSymbol = this.instantiateTypeToAny(typeDeclSymbol, context);
}
return typeDeclSymbol;
};
PullTypeResolver.prototype.genericTypeIsUsedWithoutRequiredTypeArguments = function (typeSymbol, term, context) {
if (!typeSymbol) {
return false;
}
if (typeSymbol.isAlias()) {
return this.genericTypeIsUsedWithoutRequiredTypeArguments(typeSymbol.getExportAssignedTypeSymbol(), term, context);
}
return typeSymbol.isNamedTypeSymbol() && typeSymbol.isGeneric() && !typeSymbol.isTypeParameter() && (typeSymbol.isResolved || typeSymbol.inResolution) && !typeSymbol.getIsSpecialized() && typeSymbol.getTypeParameters().length && typeSymbol.getTypeArguments() === null && this.isTypeRefWithoutTypeArgs(term);
};
PullTypeResolver.prototype.resolveMemberVariableDeclaration = function (varDecl, context) {
return this.resolveVariableDeclaratorOrParameterOrEnumElement(varDecl, varDecl.modifiers, varDecl.variableDeclarator.propertyName, TypeScript.ASTHelpers.getType(varDecl.variableDeclarator), varDecl.variableDeclarator.equalsValueClause, context);
};
PullTypeResolver.prototype.resolvePropertySignature = function (varDecl, context) {
return this.resolveVariableDeclaratorOrParameterOrEnumElement(varDecl, TypeScript.sentinelEmptyArray, varDecl.propertyName, TypeScript.ASTHelpers.getType(varDecl), null, context);
};
PullTypeResolver.prototype.resolveVariableDeclarator = function (varDecl, context) {
return this.resolveVariableDeclaratorOrParameterOrEnumElement(varDecl, TypeScript.ASTHelpers.getVariableDeclaratorModifiers(varDecl), varDecl.propertyName, TypeScript.ASTHelpers.getType(varDecl), varDecl.equalsValueClause, context);
};
PullTypeResolver.prototype.resolveParameterList = function (list, context) {
return this.resolveSeparatedList(list.parameters, context);
};
PullTypeResolver.prototype.resolveParameter = function (parameter, context) {
return this.resolveVariableDeclaratorOrParameterOrEnumElement(parameter, parameter.modifiers, parameter.identifier, TypeScript.ASTHelpers.getType(parameter), parameter.equalsValueClause, context);
};
PullTypeResolver.prototype.getEnumTypeSymbol = function (enumElement, context) {
var enumDeclaration = enumElement.parent.parent;
var decl = this.semanticInfoChain.getDeclForAST(enumDeclaration);
var symbol = decl.getSymbol();
this.resolveDeclaredSymbol(symbol, context);
return symbol;
};
PullTypeResolver.prototype.resolveEnumElement = function (enumElement, context) {
return this.resolveVariableDeclaratorOrParameterOrEnumElement(enumElement, TypeScript.sentinelEmptyArray, enumElement.propertyName, null, enumElement.equalsValueClause, context);
};
PullTypeResolver.prototype.typeCheckEnumElement = function (enumElement, context) {
this.typeCheckVariableDeclaratorOrParameterOrEnumElement(enumElement, TypeScript.sentinelEmptyArray, enumElement.propertyName, null, enumElement.equalsValueClause, context);
};
PullTypeResolver.prototype.resolveEqualsValueClause = function (clause, isContextuallyTyped, context) {
if (this.canTypeCheckAST(clause, context)) {
this.setTypeChecked(clause, context);
}
return this.resolveAST(clause.value, isContextuallyTyped, context);
};
PullTypeResolver.prototype.resolveVariableDeclaratorOrParameterOrEnumElement = function (varDeclOrParameter, modifiers, name, typeExpr, init, context) {
var hasTypeExpr = typeExpr !== null || varDeclOrParameter.kind() === 243 /* EnumElement */;
var enclosingDecl = this.getEnclosingDeclForAST(varDeclOrParameter);
var decl = this.semanticInfoChain.getDeclForAST(varDeclOrParameter);
if (enclosingDecl && decl.kind === 2048 /* Parameter */) {
enclosingDecl.ensureSymbolIsBound();
}
var declSymbol = decl.getSymbol();
var declParameterSymbol = decl.getValueDecl() ? decl.getValueDecl().getSymbol() : null;
if (declSymbol.isResolved) {
var declType = declSymbol.type;
var valDecl = decl.getValueDecl();
if (valDecl) {
var valSymbol = valDecl.getSymbol();
if (valSymbol && !valSymbol.isResolved) {
valSymbol.type = declType;
valSymbol.setResolved();
}
}
} else {
if (declSymbol.inResolution) {
declSymbol.type = this.semanticInfoChain.anyTypeSymbol;
declSymbol.setResolved();
return declSymbol;
}
if (!declSymbol.type || !declSymbol.type.isError()) {
declSymbol.startResolving();
var typeExprSymbol = this.resolveAndTypeCheckVariableDeclarationTypeExpr(varDeclOrParameter, name, typeExpr, context);
if (!hasTypeExpr) {
this.resolveAndTypeCheckVariableDeclaratorOrParameterInitExpr(varDeclOrParameter, name, typeExpr, init, context, typeExprSymbol);
}
if (!(hasTypeExpr || init)) {
var defaultType = this.semanticInfoChain.anyTypeSymbol;
if (declSymbol.isVarArg && this.cachedArrayInterfaceType()) {
defaultType = this.createInstantiatedType(this.cachedArrayInterfaceType(), [defaultType]);
}
context.setTypeInContext(declSymbol, defaultType);
if (declParameterSymbol) {
declParameterSymbol.type = defaultType;
}
}
declSymbol.setResolved();
if (declParameterSymbol) {
declParameterSymbol.setResolved();
}
}
}
if (this.canTypeCheckAST(varDeclOrParameter, context)) {
this.typeCheckVariableDeclaratorOrParameterOrEnumElement(varDeclOrParameter, modifiers, name, typeExpr, init, context);
}
return declSymbol;
};
PullTypeResolver.prototype.resolveAndTypeCheckVariableDeclarationTypeExpr = function (varDeclOrParameter, name, typeExpr, context) {
var enclosingDecl = this.getEnclosingDeclForAST(varDeclOrParameter);
var decl = this.semanticInfoChain.getDeclForAST(varDeclOrParameter);
var declSymbol = decl.getSymbol();
var declParameterSymbol = decl.getValueDecl() ? decl.getValueDecl().getSymbol() : null;
if (varDeclOrParameter.kind() === 243 /* EnumElement */) {
var result = this.getEnumTypeSymbol(varDeclOrParameter, context);
declSymbol.type = result;
return result;
}
if (!typeExpr) {
return null;
}
var wrapperDecl = this.getEnclosingDecl(decl);
wrapperDecl = wrapperDecl || enclosingDecl;
var typeExprSymbol = this.resolveTypeReference(typeExpr, context);
if (!typeExprSymbol) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Unable_to_resolve_type_of_0, [name.text()]));
declSymbol.type = this.getNewErrorTypeSymbol();
if (declParameterSymbol) {
context.setTypeInContext(declParameterSymbol, this.semanticInfoChain.anyTypeSymbol);
}
} else if (typeExprSymbol.isError()) {
context.setTypeInContext(declSymbol, typeExprSymbol);
if (declParameterSymbol) {
context.setTypeInContext(declParameterSymbol, typeExprSymbol);
}
} else {
if (typeExprSymbol === this.semanticInfoChain.anyTypeSymbol) {
decl.setFlag(16777216 /* IsAnnotatedWithAny */);
}
if (typeExprSymbol.isContainer()) {
var exportedTypeSymbol = typeExprSymbol.getExportAssignedTypeSymbol();
if (exportedTypeSymbol) {
typeExprSymbol = exportedTypeSymbol;
} else {
typeExprSymbol = typeExprSymbol.type;
if (typeExprSymbol.isAlias()) {
typeExprSymbol = typeExprSymbol.getExportAssignedTypeSymbol();
}
if (typeExprSymbol && typeExprSymbol.isContainer() && !typeExprSymbol.isEnum()) {
var instanceSymbol = typeExprSymbol.getInstanceSymbol();
if (!instanceSymbol || !TypeScript.PullHelpers.symbolIsEnum(instanceSymbol)) {
typeExprSymbol = this.getNewErrorTypeSymbol();
} else {
typeExprSymbol = instanceSymbol.type;
}
}
}
} else if (declSymbol.isVarArg && !(typeExprSymbol.isArrayNamedTypeReference() || typeExprSymbol === this.cachedArrayInterfaceType())) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Rest_parameters_must_be_array_types));
typeExprSymbol = this.getNewErrorTypeSymbol();
}
context.setTypeInContext(declSymbol, typeExprSymbol);
if (declParameterSymbol) {
declParameterSymbol.type = typeExprSymbol;
}
if (typeExprSymbol.kind === 16777216 /* FunctionType */ && !typeExprSymbol.getFunctionSymbol()) {
typeExprSymbol.setFunctionSymbol(declSymbol);
}
}
return typeExprSymbol;
};
PullTypeResolver.prototype.resolveAndTypeCheckVariableDeclaratorOrParameterInitExpr = function (varDeclOrParameter, name, typeExpr, init, context, typeExprSymbol) {
if (!init) {
return null;
}
var hasTypeExpr = typeExpr !== null || varDeclOrParameter.kind() === 243 /* EnumElement */;
if (typeExprSymbol) {
context.pushNewContextualType(typeExprSymbol);
}
var enclosingDecl = this.getEnclosingDeclForAST(varDeclOrParameter);
var decl = this.semanticInfoChain.getDeclForAST(varDeclOrParameter);
var declSymbol = decl.getSymbol();
var declParameterSymbol = decl.getValueDecl() ? decl.getValueDecl().getSymbol() : null;
var wrapperDecl = this.getEnclosingDecl(decl);
wrapperDecl = wrapperDecl || enclosingDecl;
var initExprSymbol = this.resolveAST(init, typeExprSymbol !== null, context);
if (typeExprSymbol) {
context.popAnyContextualType();
}
if (!initExprSymbol) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Unable_to_resolve_type_of_0, [name.text()]));
if (!hasTypeExpr) {
context.setTypeInContext(declSymbol, this.getNewErrorTypeSymbol());
if (declParameterSymbol) {
context.setTypeInContext(declParameterSymbol, this.semanticInfoChain.anyTypeSymbol);
}
}
} else {
var initTypeSymbol = initExprSymbol.type;
if (!hasTypeExpr) {
var widenedInitTypeSymbol = initTypeSymbol.widenedType(this, init.value, context);
context.setTypeInContext(declSymbol, widenedInitTypeSymbol);
if (declParameterSymbol) {
context.setTypeInContext(declParameterSymbol, widenedInitTypeSymbol);
}
if (this.compilationSettings.noImplicitAny()) {
if ((widenedInitTypeSymbol !== initTypeSymbol) && (widenedInitTypeSymbol === this.semanticInfoChain.anyTypeSymbol)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Variable_0_implicitly_has_an_any_type, [name.text()]));
}
}
return widenedInitTypeSymbol;
}
}
return initTypeSymbol;
};
PullTypeResolver.prototype.typeCheckPropertySignature = function (varDecl, context) {
this.typeCheckVariableDeclaratorOrParameterOrEnumElement(varDecl, TypeScript.sentinelEmptyArray, varDecl.propertyName, TypeScript.ASTHelpers.getType(varDecl), null, context);
};
PullTypeResolver.prototype.typeCheckMemberVariableDeclaration = function (varDecl, context) {
this.typeCheckVariableDeclaratorOrParameterOrEnumElement(varDecl, varDecl.modifiers, varDecl.variableDeclarator.propertyName, TypeScript.ASTHelpers.getType(varDecl), varDecl.variableDeclarator.equalsValueClause, context);
};
PullTypeResolver.prototype.typeCheckVariableDeclarator = function (varDecl, context) {
this.typeCheckVariableDeclaratorOrParameterOrEnumElement(varDecl, TypeScript.ASTHelpers.getVariableDeclaratorModifiers(varDecl), varDecl.propertyName, TypeScript.ASTHelpers.getType(varDecl), varDecl.equalsValueClause, context);
};
PullTypeResolver.prototype.typeCheckParameter = function (parameter, context) {
this.typeCheckVariableDeclaratorOrParameterOrEnumElement(parameter, parameter.modifiers, parameter.identifier, TypeScript.ASTHelpers.getType(parameter), parameter.equalsValueClause, context);
};
PullTypeResolver.prototype.typeCheckVariableDeclaratorOrParameterOrEnumElement = function (varDeclOrParameter, modifiers, name, typeExpr, init, context) {
var _this = this;
this.setTypeChecked(varDeclOrParameter, context);
var hasTypeExpr = typeExpr !== null || varDeclOrParameter.kind() === 243 /* EnumElement */;
var enclosingDecl = this.getEnclosingDeclForAST(varDeclOrParameter);
var decl = this.semanticInfoChain.getDeclForAST(varDeclOrParameter);
var declSymbol = decl.getSymbol();
var typeExprSymbol = this.resolveAndTypeCheckVariableDeclarationTypeExpr(varDeclOrParameter, name, typeExpr, context);
var initTypeSymbol = this.resolveAndTypeCheckVariableDeclaratorOrParameterInitExpr(varDeclOrParameter, name, typeExpr, init, context, typeExprSymbol);
if (hasTypeExpr || init) {
if (typeExprSymbol && typeExprSymbol.isAlias()) {
typeExprSymbol = typeExprSymbol.getExportAssignedTypeSymbol();
}
if (typeExprSymbol && typeExprSymbol.kind === 32 /* DynamicModule */) {
var exportedTypeSymbol = typeExprSymbol.getExportAssignedTypeSymbol();
if (exportedTypeSymbol) {
typeExprSymbol = exportedTypeSymbol;
} else {
var instanceTypeSymbol = typeExprSymbol.getInstanceType();
if (!instanceTypeSymbol) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Tried_to_set_variable_type_to_uninitialized_module_type_0, [typeExprSymbol.toString()]));
typeExprSymbol = null;
} else {
typeExprSymbol = instanceTypeSymbol;
}
}
}
initTypeSymbol = this.getInstanceTypeForAssignment(varDeclOrParameter, initTypeSymbol, context);
if (initTypeSymbol && typeExprSymbol) {
var comparisonInfo = new TypeComparisonInfo();
var isAssignable = this.sourceIsAssignableToTarget(initTypeSymbol, typeExprSymbol, varDeclOrParameter, context, comparisonInfo);
if (!isAssignable) {
var enclosingSymbol = this.getEnclosingSymbolForAST(varDeclOrParameter);
if (comparisonInfo.message) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [initTypeSymbol.toString(enclosingSymbol), typeExprSymbol.toString(enclosingSymbol), comparisonInfo.message]));
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [initTypeSymbol.toString(enclosingSymbol), typeExprSymbol.toString(enclosingSymbol)]));
}
}
}
} else if (varDeclOrParameter.kind() !== 243 /* EnumElement */ && this.compilationSettings.noImplicitAny() && !this.isForInVariableDeclarator(varDeclOrParameter)) {
var wrapperDecl = this.getEnclosingDecl(decl);
wrapperDecl = wrapperDecl || enclosingDecl;
if ((wrapperDecl.kind === 16384 /* Function */ || wrapperDecl.kind === 32768 /* ConstructorMethod */ || wrapperDecl.kind === 2097152 /* ConstructSignature */)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Parameter_0_of_1_implicitly_has_an_any_type, [name.text(), enclosingDecl.name]));
} else if (wrapperDecl.kind === 65536 /* Method */) {
var parentDecl = wrapperDecl.getParentDecl();
if (!TypeScript.hasFlag(parentDecl.flags, 8 /* Ambient */)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Parameter_0_of_1_implicitly_has_an_any_type, [name.text(), enclosingDecl.name]));
} else if (TypeScript.hasFlag(parentDecl.flags, 8 /* Ambient */) && !TypeScript.hasFlag(wrapperDecl.flags, 2 /* Private */)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Parameter_0_of_1_implicitly_has_an_any_type, [name.text(), enclosingDecl.name]));
}
} else if (decl.kind === 4096 /* Property */ && !declSymbol.getContainer().isNamedTypeSymbol()) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Member_0_of_object_type_implicitly_has_an_any_type, [name.text()]));
} else if (wrapperDecl.kind !== 268435456 /* CatchBlock */) {
if (!TypeScript.hasFlag(wrapperDecl.flags, 8 /* Ambient */)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Variable_0_implicitly_has_an_any_type, [name.text()]));
} else if (TypeScript.hasFlag(wrapperDecl.flags, 8 /* Ambient */) && !TypeScript.hasModifier(modifiers, 2 /* Private */)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Variable_0_implicitly_has_an_any_type, [name.text()]));
}
}
}
if (init && varDeclOrParameter.kind() === 242 /* Parameter */) {
var containerSignature = enclosingDecl.getSignatureSymbol();
if (containerSignature && !containerSignature.isDefinition()) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Default_arguments_are_only_allowed_in_implementation));
}
}
if (declSymbol.kind !== 2048 /* Parameter */ && (declSymbol.kind !== 4096 /* Property */ || declSymbol.getContainer().isNamedTypeSymbol())) {
this.checkSymbolPrivacy(declSymbol, declSymbol.type, function (symbol) {
return _this.variablePrivacyErrorReporter(varDeclOrParameter, declSymbol, symbol, context);
});
}
if ((declSymbol.kind !== 4096 /* Property */ && declSymbol.kind !== 67108864 /* EnumMember */) || declSymbol.anyDeclHasFlag(8388608 /* PropertyParameter */)) {
this.checkNameForCompilerGeneratedDeclarationCollision(varDeclOrParameter, true, name, context);
}
};
PullTypeResolver.prototype.isForInVariableDeclarator = function (ast) {
return ast.kind() === 225 /* VariableDeclarator */ && ast.parent && ast.parent.parent && ast.parent.parent.parent && ast.parent.kind() === 2 /* SeparatedList */ && ast.parent.parent.kind() === 224 /* VariableDeclaration */ && ast.parent.parent.parent.kind() === 155 /* ForInStatement */ && ast.parent.parent.parent.variableDeclaration === ast.parent.parent;
};
PullTypeResolver.prototype.checkSuperCaptureVariableCollides = function (superAST, isDeclaration, context) {
var enclosingDecl = this.getEnclosingDeclForAST(superAST);
var classSymbol = this.getContextualClassSymbolForEnclosingDecl(superAST, enclosingDecl);
if (classSymbol && !classSymbol.anyDeclHasFlag(8 /* Ambient */)) {
if (superAST.kind() === 242 /* Parameter */) {
var enclosingAST = this.getASTForDecl(enclosingDecl);
if (enclosingAST.kind() !== 218 /* ParenthesizedArrowFunctionExpression */ && enclosingAST.kind() !== 219 /* SimpleArrowFunctionExpression */) {
var block = enclosingDecl.kind === 65536 /* Method */ ? enclosingAST.block : enclosingAST.block;
if (!block) {
return;
}
}
}
this.resolveDeclaredSymbol(classSymbol, context);
var parents = classSymbol.getExtendedTypes();
if (parents.length) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(superAST, isDeclaration ? TypeScript.DiagnosticCode.Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference : TypeScript.DiagnosticCode.Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference));
}
}
};
PullTypeResolver.prototype.checkThisCaptureVariableCollides = function (_thisAST, isDeclaration, context) {
if (isDeclaration) {
var decl = this.semanticInfoChain.getDeclForAST(_thisAST);
if (TypeScript.hasFlag(decl.flags, 8 /* Ambient */)) {
return;
}
}
var enclosingDecl = this.getEnclosingDeclForAST(_thisAST);
var enclosingModule = TypeScript.ASTHelpers.getEnclosingModuleDeclaration(_thisAST);
if (TypeScript.ASTHelpers.isAnyNameOfModule(enclosingModule, _thisAST)) {
enclosingDecl = this.getEnclosingDeclForAST(enclosingModule);
}
var declPath = enclosingDecl.getParentPath();
for (var i = declPath.length - 1; i >= 0; i--) {
var decl = declPath[i];
var declKind = decl.kind;
if (declKind === 131072 /* FunctionExpression */ && TypeScript.hasFlag(decl.flags, 8192 /* ArrowFunction */)) {
continue;
}
if (declKind === 16384 /* Function */ || declKind === 65536 /* Method */ || declKind === 32768 /* ConstructorMethod */ || declKind === 262144 /* GetAccessor */ || declKind === 524288 /* SetAccessor */ || declKind === 131072 /* FunctionExpression */ || declKind === 8 /* Class */ || declKind === 4 /* Container */ || declKind === 32 /* DynamicModule */ || declKind === 1 /* Script */) {
if (TypeScript.hasFlag(decl.flags, 262144 /* MustCaptureThis */)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(_thisAST, isDeclaration ? TypeScript.DiagnosticCode.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference : TypeScript.DiagnosticCode.Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference));
}
break;
}
}
};
PullTypeResolver.prototype.postTypeCheckVariableDeclaratorOrParameter = function (varDeclOrParameter, context) {
this.checkThisCaptureVariableCollides(varDeclOrParameter, true, context);
};
PullTypeResolver.prototype.resolveTypeParameterDeclaration = function (typeParameterAST, context) {
var typeParameterDecl = this.semanticInfoChain.getDeclForAST(typeParameterAST);
var typeParameterSymbol = typeParameterDecl.getSymbol();
this.resolveFirstTypeParameterDeclaration(typeParameterSymbol, context);
if (typeParameterSymbol.isResolved && this.canTypeCheckAST(typeParameterAST, context)) {
this.typeCheckTypeParameterDeclaration(typeParameterAST, context);
}
return typeParameterSymbol;
};
PullTypeResolver.prototype.resolveFirstTypeParameterDeclaration = function (typeParameterSymbol, context) {
var typeParameterDecl = typeParameterSymbol.getDeclarations()[0];
var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameterDecl);
if (typeParameterSymbol.isResolved || typeParameterSymbol.inResolution) {
return;
}
typeParameterSymbol.startResolving();
if (typeParameterAST.constraint) {
var constraintTypeSymbol = this.resolveTypeReference(typeParameterAST.constraint.type, context);
if (constraintTypeSymbol) {
typeParameterSymbol.setConstraint(constraintTypeSymbol);
}
}
typeParameterSymbol.setResolved();
};
PullTypeResolver.prototype.typeCheckTypeParameterDeclaration = function (typeParameterAST, context) {
this.setTypeChecked(typeParameterAST, context);
var constraint = this.resolveAST(typeParameterAST.constraint, false, context);
if (constraint) {
var typeParametersAST = typeParameterAST.parent;
var typeParameters = [];
for (var i = 0; i < typeParametersAST.nonSeparatorCount(); i++) {
var currentTypeParameterAST = typeParametersAST.nonSeparatorAt(i);
var currentTypeParameterDecl = this.semanticInfoChain.getDeclForAST(currentTypeParameterAST);
var currentTypeParameter = this.semanticInfoChain.getSymbolForDecl(currentTypeParameterDecl);
typeParameters[currentTypeParameter.pullSymbolID] = currentTypeParameter;
}
if (constraint.wrapsSomeTypeParameter(typeParameters)) {
this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list);
}
}
};
PullTypeResolver.prototype.resolveConstraint = function (constraint, context) {
if (this.canTypeCheckAST(constraint, context)) {
this.setTypeChecked(constraint, context);
}
return this.resolveTypeReference(constraint.type, context);
};
PullTypeResolver.prototype.resolveFunctionBodyReturnTypes = function (funcDeclAST, block, bodyExpression, signature, useContextualType, enclosingDecl, context) {
var _this = this;
var returnStatementsExpressions = [];
var enclosingDeclStack = [enclosingDecl];
var preFindReturnExpressionTypes = function (ast, walker) {
var go = true;
switch (ast.kind()) {
case 129 /* FunctionDeclaration */:
case 219 /* SimpleArrowFunctionExpression */:
case 218 /* ParenthesizedArrowFunctionExpression */:
case 222 /* FunctionExpression */:
case 215 /* ObjectLiteralExpression */:
go = false;
break;
case 150 /* ReturnStatement */:
var returnStatement = ast;
enclosingDecl.setFlag(4194304 /* HasReturnStatement */);
returnStatementsExpressions.push({ expression: returnStatement.expression, enclosingDecl: enclosingDeclStack[enclosingDeclStack.length - 1] });
go = false;
break;
case 236 /* CatchClause */:
case 163 /* WithStatement */:
enclosingDeclStack[enclosingDeclStack.length] = _this.semanticInfoChain.getDeclForAST(ast);
break;
default:
break;
}
walker.options.goChildren = go;
return ast;
};
var postFindReturnExpressionEnclosingDecls = function (ast, walker) {
switch (ast.kind()) {
case 236 /* CatchClause */:
case 163 /* WithStatement */:
enclosingDeclStack.length--;
break;
default:
break;
}
walker.options.goChildren = true;
return ast;
};
if (block) {
TypeScript.getAstWalkerFactory().walk(block, preFindReturnExpressionTypes, postFindReturnExpressionEnclosingDecls);
} else {
returnStatementsExpressions.push({ expression: bodyExpression, enclosingDecl: enclosingDecl });
enclosingDecl.setFlag(4194304 /* HasReturnStatement */);
}
if (!returnStatementsExpressions.length) {
signature.returnType = this.semanticInfoChain.voidTypeSymbol;
} else {
var returnExpressionSymbols = [];
var returnExpressions = [];
for (var i = 0; i < returnStatementsExpressions.length; i++) {
var returnExpression = returnStatementsExpressions[i].expression;
if (returnExpression) {
var returnType = this.resolveAST(returnExpression, useContextualType, context).type;
if (returnType.isError()) {
signature.returnType = returnType;
return;
} else {
if (returnExpression.parent.kind() === 150 /* ReturnStatement */) {
this.setSymbolForAST(returnExpression.parent, returnType, context);
}
}
returnExpressionSymbols.push(returnType);
returnExpressions.push(returnExpression);
}
}
if (!returnExpressionSymbols.length) {
signature.returnType = this.semanticInfoChain.voidTypeSymbol;
} else {
var collection = {
getLength: function () {
return returnExpressionSymbols.length;
},
getTypeAtIndex: function (index) {
return returnExpressionSymbols[index].type;
}
};
var bestCommonReturnType = this.findBestCommonType(collection, context, new TypeComparisonInfo());
var returnType = bestCommonReturnType;
var returnExpression = returnExpressions[returnExpressionSymbols.indexOf(returnType)];
var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST);
var functionSymbol = functionDecl.getSymbol();
if (returnType) {
var previousReturnType = returnType;
var newReturnType = returnType.widenedType(this, returnExpression, context);
signature.returnType = newReturnType;
if (!TypeScript.ArrayUtilities.contains(returnExpressionSymbols, bestCommonReturnType)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Could_not_find_the_best_common_type_of_types_of_all_return_statement_expressions));
}
if (this.compilationSettings.noImplicitAny()) {
if (previousReturnType !== newReturnType && newReturnType === this.semanticInfoChain.anyTypeSymbol) {
var functionName = enclosingDecl.name;
if (functionName === "") {
functionName = enclosingDecl.getFunctionExpressionName();
}
if (functionName != "") {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode._0_which_lacks_return_type_annotation_implicitly_has_an_any_return_type, [functionName]));
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_any_return_type));
}
}
}
}
if (!functionSymbol.type && functionSymbol.isAccessor()) {
functionSymbol.type = signature.returnType;
}
}
}
};
PullTypeResolver.prototype.typeCheckConstructorDeclaration = function (funcDeclAST, context) {
var _this = this;
this.setTypeChecked(funcDeclAST, context);
var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST);
for (var i = 0; i < funcDeclAST.callSignature.parameterList.parameters.nonSeparatorCount(); i++) {
this.resolveAST(funcDeclAST.callSignature.parameterList.parameters.nonSeparatorAt(i), false, context);
}
this.resolveAST(funcDeclAST.block, false, context);
if (funcDecl.getSignatureSymbol() && funcDecl.getSignatureSymbol().isDefinition() && this.enclosingClassIsDerived(funcDecl.getParentDecl())) {
if (!this.constructorHasSuperCall(funcDeclAST)) {
context.postDiagnostic(new TypeScript.Diagnostic(funcDeclAST.fileName(), this.semanticInfoChain.lineMap(funcDeclAST.fileName()), funcDeclAST.start(), "constructor".length, TypeScript.DiagnosticCode.Constructors_for_derived_classes_must_contain_a_super_call));
} else if (this.superCallMustBeFirstStatementInConstructor(funcDecl)) {
var firstStatement = this.getFirstStatementOfBlockOrNull(funcDeclAST.block);
if (!firstStatement || !this.isSuperInvocationExpressionStatement(firstStatement)) {
context.postDiagnostic(new TypeScript.Diagnostic(funcDeclAST.fileName(), this.semanticInfoChain.lineMap(funcDeclAST.fileName()), funcDeclAST.start(), "constructor".length, TypeScript.DiagnosticCode.A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties));
}
}
}
this.validateVariableDeclarationGroups(funcDecl, context);
this.checkFunctionTypePrivacy(funcDeclAST, false, null, TypeScript.ASTHelpers.parametersFromParameterList(funcDeclAST.callSignature.parameterList), null, funcDeclAST.block, context);
this.typeCheckCallBacks.push(function (context) {
_this.typeCheckFunctionOverloads(funcDeclAST, context);
});
};
PullTypeResolver.prototype.constructorHasSuperCall = function (constructorDecl) {
var _this = this;
if (constructorDecl.block) {
var foundSuperCall = false;
var pre = function (ast, walker) {
switch (ast.kind()) {
case 129 /* FunctionDeclaration */:
case 219 /* SimpleArrowFunctionExpression */:
case 218 /* ParenthesizedArrowFunctionExpression */:
case 222 /* FunctionExpression */:
case 215 /* ObjectLiteralExpression */:
walker.options.goChildren = false;
default:
if (_this.isSuperInvocationExpression(ast)) {
foundSuperCall = true;
walker.options.stopWalking = true;
}
}
};
TypeScript.getAstWalkerFactory().walk(constructorDecl.block, pre);
return foundSuperCall;
}
return false;
};
PullTypeResolver.prototype.typeCheckFunctionExpression = function (funcDecl, isContextuallyTyped, context) {
this.typeCheckAnyFunctionExpression(funcDecl, funcDecl.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList), funcDecl.callSignature.typeAnnotation, funcDecl.block, null, isContextuallyTyped, context);
};
PullTypeResolver.prototype.typeCheckCallSignature = function (funcDecl, context) {
this.typeCheckAnyFunctionDeclaration(funcDecl, false, null, funcDecl.typeParameterList, funcDecl.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context);
};
PullTypeResolver.prototype.typeCheckConstructSignature = function (funcDecl, context) {
this.typeCheckAnyFunctionDeclaration(funcDecl, false, null, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context);
};
PullTypeResolver.prototype.typeCheckMethodSignature = function (funcDecl, context) {
this.typeCheckAnyFunctionDeclaration(funcDecl, false, funcDecl.propertyName, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context);
};
PullTypeResolver.prototype.typeCheckMemberFunctionDeclaration = function (funcDecl, context) {
this.typeCheckAnyFunctionDeclaration(funcDecl, TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */), funcDecl.propertyName, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, context);
};
PullTypeResolver.prototype.containsSingleThrowStatement = function (block) {
return block !== null && block.statements.childCount() === 1 && block.statements.childAt(0).kind() === 157 /* ThrowStatement */;
};
PullTypeResolver.prototype.typeCheckAnyFunctionDeclaration = function (funcDeclAST, isStatic, name, typeParameters, parameters, returnTypeAnnotation, block, context) {
var _this = this;
this.setTypeChecked(funcDeclAST, context);
var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST);
if (typeParameters) {
for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) {
this.resolveTypeParameterDeclaration(typeParameters.typeParameters.nonSeparatorAt(i), context);
}
}
this.resolveAST(parameters, false, context);
this.resolveAST(block, false, context);
var enclosingDecl = this.getEnclosingDecl(funcDecl);
this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, returnTypeAnnotation, context);
this.validateVariableDeclarationGroups(funcDecl, context);
this.checkFunctionTypePrivacy(funcDeclAST, isStatic, typeParameters, TypeScript.ASTHelpers.parametersFromParameterList(parameters), returnTypeAnnotation, block, context);
this.checkThatNonVoidFunctionHasReturnExpressionOrThrowStatement(funcDecl, returnTypeAnnotation, funcDecl.getSignatureSymbol().returnType, block, context);
if (funcDecl.kind === 16384 /* Function */) {
this.checkNameForCompilerGeneratedDeclarationCollision(funcDeclAST, true, name, context);
}
this.typeCheckCallBacks.push(function (context) {
_this.typeCheckFunctionOverloads(funcDeclAST, context);
});
};
PullTypeResolver.prototype.checkThatNonVoidFunctionHasReturnExpressionOrThrowStatement = function (functionDecl, returnTypeAnnotation, returnTypeSymbol, block, context) {
var hasReturn = TypeScript.hasFlag(functionDecl.flags, 4194304 /* HasReturnStatement */);
if (block !== null && returnTypeAnnotation !== null && !hasReturn) {
var isVoidOrAny = this.isAnyOrEquivalent(returnTypeSymbol) || returnTypeSymbol === this.semanticInfoChain.voidTypeSymbol;
if (!isVoidOrAny && !this.containsSingleThrowStatement(block)) {
var funcName = functionDecl.getDisplayName() || TypeScript.getLocalizedText(TypeScript.DiagnosticCode.expression, null);
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(returnTypeAnnotation, TypeScript.DiagnosticCode.Function_declared_a_non_void_return_type_but_has_no_return_expression));
}
}
};
PullTypeResolver.prototype.typeCheckIndexSignature = function (funcDeclAST, context) {
var _this = this;
this.setTypeChecked(funcDeclAST, context);
var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST);
this.resolveAST(funcDeclAST.parameter, false, context);
var enclosingDecl = this.getEnclosingDecl(funcDecl);
this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, TypeScript.ASTHelpers.getType(funcDeclAST), context);
this.validateVariableDeclarationGroups(funcDecl, context);
this.checkFunctionTypePrivacy(funcDeclAST, false, null, TypeScript.ASTHelpers.parametersFromParameter(funcDeclAST.parameter), TypeScript.ASTHelpers.getType(funcDeclAST), null, context);
var signature = funcDecl.getSignatureSymbol();
this.typeCheckCallBacks.push(function (context) {
var parentSymbol = funcDecl.getSignatureSymbol().getContainer();
var allIndexSignatures = _this.getBothKindsOfIndexSignaturesExcludingAugmentedType(parentSymbol, context);
var stringIndexSignature = allIndexSignatures.stringSignature;
var numberIndexSignature = allIndexSignatures.numericSignature;
var isNumericIndexer = numberIndexSignature === signature;
if (numberIndexSignature && stringIndexSignature && (isNumericIndexer || stringIndexSignature.getDeclarations()[0].getParentDecl() !== numberIndexSignature.getDeclarations()[0].getParentDecl())) {
var comparisonInfo = new TypeComparisonInfo();
if (!_this.sourceIsAssignableToTarget(numberIndexSignature.returnType, stringIndexSignature.returnType, funcDeclAST, context, comparisonInfo)) {
var enclosingSymbol = _this.getEnclosingSymbolForAST(funcDeclAST);
if (comparisonInfo.message) {
context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Numeric_indexer_type_0_must_be_assignable_to_string_indexer_type_1_NL_2, [numberIndexSignature.returnType.toString(enclosingSymbol), stringIndexSignature.returnType.toString(enclosingSymbol), comparisonInfo.message]));
} else {
context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Numeric_indexer_type_0_must_be_assignable_to_string_indexer_type_1, [numberIndexSignature.returnType.toString(enclosingSymbol), stringIndexSignature.returnType.toString(enclosingSymbol)]));
}
}
}
var allMembers = parentSymbol.type.getAllMembers(536869887 /* All */, 0 /* all */);
for (var i = 0; i < allMembers.length; i++) {
var member = allMembers[i];
var name = member.name;
if (name || (member.kind === 4096 /* Property */ && name === "")) {
if (!allMembers[i].isResolved) {
_this.resolveDeclaredSymbol(allMembers[i], context);
}
if (parentSymbol !== allMembers[i].getContainer()) {
var isMemberNumeric = TypeScript.PullHelpers.isNameNumeric(name);
var indexerKindMatchesMemberNameKind = isNumericIndexer === isMemberNumeric;
var onlyStringIndexerIsPresent = !numberIndexSignature;
if (indexerKindMatchesMemberNameKind || onlyStringIndexerIsPresent) {
var comparisonInfo = new TypeComparisonInfo();
if (!_this.sourceIsAssignableToTarget(allMembers[i].type, signature.returnType, funcDeclAST, context, comparisonInfo, false)) {
_this.reportErrorThatMemberIsNotSubtypeOfIndexer(allMembers[i], signature, funcDeclAST, context, comparisonInfo);
}
}
}
}
}
});
};
PullTypeResolver.prototype.postTypeCheckFunctionDeclaration = function (funcDeclAST, context) {
this.checkThisCaptureVariableCollides(funcDeclAST, true, context);
};
PullTypeResolver.prototype.resolveReturnTypeAnnotationOfFunctionDeclaration = function (funcDeclAST, returnTypeAnnotation, context) {
var returnTypeSymbol = null;
if (returnTypeAnnotation) {
var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST);
returnTypeSymbol = this.resolveTypeReference(returnTypeAnnotation, context);
if (!returnTypeSymbol) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(returnTypeAnnotation, TypeScript.DiagnosticCode.Cannot_resolve_return_type_reference));
} else {
var isConstructor = funcDeclAST.kind() === 137 /* ConstructorDeclaration */ || funcDeclAST.kind() === 143 /* ConstructSignature */;
if (isConstructor && returnTypeSymbol === this.semanticInfoChain.voidTypeSymbol) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Constructors_cannot_have_a_return_type_of_void));
}
}
}
return returnTypeSymbol;
};
PullTypeResolver.prototype.resolveMemberFunctionDeclaration = function (funcDecl, context) {
return this.resolveFunctionDeclaration(funcDecl, TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */), funcDecl.propertyName, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, context);
};
PullTypeResolver.prototype.resolveCallSignature = function (funcDecl, context) {
return this.resolveFunctionDeclaration(funcDecl, false, null, funcDecl.typeParameterList, funcDecl.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context);
};
PullTypeResolver.prototype.resolveConstructSignature = function (funcDecl, context) {
return this.resolveFunctionDeclaration(funcDecl, false, null, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context);
};
PullTypeResolver.prototype.resolveMethodSignature = function (funcDecl, context) {
return this.resolveFunctionDeclaration(funcDecl, false, funcDecl.propertyName, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context);
};
PullTypeResolver.prototype.resolveAnyFunctionDeclaration = function (funcDecl, context) {
return this.resolveFunctionDeclaration(funcDecl, TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */), funcDecl.identifier, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, context);
};
PullTypeResolver.prototype.resolveFunctionExpression = function (funcDecl, isContextuallyTyped, context) {
return this.resolveAnyFunctionExpression(funcDecl, funcDecl.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList), TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, null, isContextuallyTyped, context);
};
PullTypeResolver.prototype.resolveSimpleArrowFunctionExpression = function (funcDecl, isContextuallyTyped, context) {
return this.resolveAnyFunctionExpression(funcDecl, null, TypeScript.ASTHelpers.parametersFromIdentifier(funcDecl.identifier), null, funcDecl.block, funcDecl.expression, isContextuallyTyped, context);
};
PullTypeResolver.prototype.resolveParenthesizedArrowFunctionExpression = function (funcDecl, isContextuallyTyped, context) {
return this.resolveAnyFunctionExpression(funcDecl, funcDecl.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList), TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, funcDecl.expression, isContextuallyTyped, context);
};
PullTypeResolver.prototype.getEnclosingClassDeclaration = function (ast) {
while (ast) {
if (ast.kind() === 131 /* ClassDeclaration */) {
return ast;
}
ast = ast.parent;
}
return null;
};
PullTypeResolver.prototype.resolveConstructorDeclaration = function (funcDeclAST, context) {
var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST);
var funcSymbol = funcDecl.getSymbol();
var signature = funcDecl.getSignatureSymbol();
var hadError = false;
if (signature) {
if (signature.isResolved) {
if (this.canTypeCheckAST(funcDeclAST, context)) {
this.typeCheckConstructorDeclaration(funcDeclAST, context);
}
return funcSymbol;
}
if (!signature.inResolution) {
var classAST = this.getEnclosingClassDeclaration(funcDeclAST);
if (classAST) {
var classDecl = this.semanticInfoChain.getDeclForAST(classAST);
var classSymbol = classDecl.getSymbol();
if (!classSymbol.isResolved && !classSymbol.inResolution) {
this.resolveDeclaredSymbol(classSymbol, context);
}
}
}
var functionTypeSymbol = funcSymbol && funcSymbol.type;
if (signature.inResolution) {
signature.returnType = this.semanticInfoChain.anyTypeSymbol;
if (funcSymbol) {
funcSymbol.setUnresolved();
if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) {
funcSymbol.type = functionTypeSymbol;
}
}
signature.setResolved();
return funcSymbol;
}
if (funcSymbol) {
funcSymbol.startResolving();
}
signature.startResolving();
var prevInTypeCheck = context.inTypeCheck;
context.inTypeCheck = false;
for (var i = 0; i < funcDeclAST.callSignature.parameterList.parameters.nonSeparatorCount(); i++) {
this.resolveParameter(funcDeclAST.callSignature.parameterList.parameters.nonSeparatorAt(i), context);
}
context.inTypeCheck = prevInTypeCheck;
if (signature.isGeneric()) {
if (funcSymbol) {
funcSymbol.type.setHasGenericSignature();
}
}
if (!hadError) {
if (funcSymbol) {
funcSymbol.setUnresolved();
if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) {
funcSymbol.type = functionTypeSymbol;
}
}
signature.setResolved();
}
}
if (funcSymbol) {
this.resolveOtherDeclarations(funcDeclAST, context);
}
if (this.canTypeCheckAST(funcDeclAST, context)) {
this.typeCheckConstructorDeclaration(funcDeclAST, context);
}
return funcSymbol;
};
PullTypeResolver.prototype.resolveIndexMemberDeclaration = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.setTypeChecked(ast, context);
}
return this.resolveIndexSignature(ast.indexSignature, context);
};
PullTypeResolver.prototype.resolveIndexSignature = function (funcDeclAST, context) {
var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST);
var funcSymbol = funcDecl.getSymbol();
var signature = funcDecl.getSignatureSymbol();
var hadError = false;
if (signature) {
if (signature.isResolved) {
if (this.canTypeCheckAST(funcDeclAST, context)) {
this.typeCheckIndexSignature(funcDeclAST, context);
}
return funcSymbol;
}
var functionTypeSymbol = funcSymbol && funcSymbol.type;
if (signature.inResolution) {
if (funcDeclAST.typeAnnotation) {
var returnTypeSymbol = this.resolveTypeReference(TypeScript.ASTHelpers.getType(funcDeclAST), context);
if (!returnTypeSymbol) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(TypeScript.ASTHelpers.getType(funcDeclAST), TypeScript.DiagnosticCode.Cannot_resolve_return_type_reference));
signature.returnType = this.getNewErrorTypeSymbol();
hadError = true;
} else {
signature.returnType = returnTypeSymbol;
}
} else {
signature.returnType = this.semanticInfoChain.anyTypeSymbol;
}
if (funcSymbol) {
funcSymbol.setUnresolved();
if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) {
funcSymbol.type = functionTypeSymbol;
}
}
signature.setResolved();
return funcSymbol;
}
if (funcSymbol) {
funcSymbol.startResolving();
}
signature.startResolving();
if (funcDeclAST.parameter) {
var prevInTypeCheck = context.inTypeCheck;
context.inTypeCheck = false;
this.resolveParameter(funcDeclAST.parameter, context);
context.inTypeCheck = prevInTypeCheck;
}
if (funcDeclAST.typeAnnotation) {
returnTypeSymbol = this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, TypeScript.ASTHelpers.getType(funcDeclAST), context);
if (!returnTypeSymbol) {
signature.returnType = this.getNewErrorTypeSymbol();
hadError = true;
} else {
signature.returnType = returnTypeSymbol;
}
} else {
signature.returnType = this.semanticInfoChain.anyTypeSymbol;
}
if (!hadError) {
if (funcSymbol) {
funcSymbol.setUnresolved();
if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) {
funcSymbol.type = functionTypeSymbol;
}
}
signature.setResolved();
}
}
if (funcSymbol) {
this.resolveOtherDeclarations(funcDeclAST, context);
}
if (this.canTypeCheckAST(funcDeclAST, context)) {
this.typeCheckIndexSignature(funcDeclAST, context);
}
return funcSymbol;
};
PullTypeResolver.prototype.resolveFunctionDeclaration = function (funcDeclAST, isStatic, name, typeParameters, parameterList, returnTypeAnnotation, block, context) {
var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST);
var funcSymbol = funcDecl.getSymbol();
var signature = funcDecl.getSignatureSymbol();
var hadError = false;
var isConstructor = funcDeclAST.kind() === 143 /* ConstructSignature */;
if (signature) {
if (signature.isResolved) {
if (this.canTypeCheckAST(funcDeclAST, context)) {
this.typeCheckAnyFunctionDeclaration(funcDeclAST, isStatic, name, typeParameters, parameterList, returnTypeAnnotation, block, context);
}
return funcSymbol;
}
if (isConstructor && !signature.inResolution) {
var classAST = this.getEnclosingClassDeclaration(funcDeclAST);
if (classAST) {
var classDecl = this.semanticInfoChain.getDeclForAST(classAST);
var classSymbol = classDecl.getSymbol();
if (!classSymbol.isResolved && !classSymbol.inResolution) {
this.resolveDeclaredSymbol(classSymbol, context);
}
}
}
var functionTypeSymbol = funcSymbol && funcSymbol.type;
if (signature.inResolution) {
if (returnTypeAnnotation) {
var returnTypeSymbol = this.resolveTypeReference(returnTypeAnnotation, context);
if (!returnTypeSymbol) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(returnTypeAnnotation, TypeScript.DiagnosticCode.Cannot_resolve_return_type_reference));
signature.returnType = this.getNewErrorTypeSymbol();
hadError = true;
} else {
signature.returnType = returnTypeSymbol;
if (isConstructor && returnTypeSymbol === this.semanticInfoChain.voidTypeSymbol) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Constructors_cannot_have_a_return_type_of_void));
}
}
} else {
signature.returnType = this.semanticInfoChain.anyTypeSymbol;
}
if (funcSymbol) {
funcSymbol.setUnresolved();
if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) {
funcSymbol.type = functionTypeSymbol;
}
}
signature.setResolved();
return funcSymbol;
}
if (funcSymbol) {
funcSymbol.startResolving();
}
signature.startResolving();
if (typeParameters) {
for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) {
this.resolveTypeParameterDeclaration(typeParameters.typeParameters.nonSeparatorAt(i), context);
}
}
if (parameterList) {
var prevInTypeCheck = context.inTypeCheck;
context.inTypeCheck = false;
for (var i = 0; i < parameterList.parameters.nonSeparatorCount(); i++) {
this.resolveParameter(parameterList.parameters.nonSeparatorAt(i), context);
}
context.inTypeCheck = prevInTypeCheck;
}
if (returnTypeAnnotation) {
returnTypeSymbol = this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, returnTypeAnnotation, context);
if (!returnTypeSymbol) {
signature.returnType = this.getNewErrorTypeSymbol();
hadError = true;
} else {
signature.returnType = returnTypeSymbol;
}
} else if (funcDecl.kind !== 2097152 /* ConstructSignature */) {
if (TypeScript.hasFlag(funcDecl.flags, 2048 /* Signature */)) {
signature.returnType = this.semanticInfoChain.anyTypeSymbol;
var parentDeclFlags = 0 /* None */;
if (TypeScript.hasFlag(funcDecl.kind, 65536 /* Method */) || TypeScript.hasFlag(funcDecl.kind, 32768 /* ConstructorMethod */)) {
var parentDecl = funcDecl.getParentDecl();
parentDeclFlags = parentDecl.flags;
}
if (this.compilationSettings.noImplicitAny() && (!TypeScript.hasFlag(parentDeclFlags, 8 /* Ambient */) || (TypeScript.hasFlag(parentDeclFlags, 8 /* Ambient */) && !TypeScript.hasFlag(funcDecl.flags, 2 /* Private */)))) {
var funcDeclASTName = name;
if (funcDeclASTName) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode._0_which_lacks_return_type_annotation_implicitly_has_an_any_return_type, [funcDeclASTName.text()]));
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Lambda_Function_which_lacks_return_type_annotation_implicitly_has_an_any_return_type));
}
}
} else {
this.resolveFunctionBodyReturnTypes(funcDeclAST, block, null, signature, false, funcDecl, context);
}
} else if (funcDecl.kind === 2097152 /* ConstructSignature */) {
signature.returnType = this.semanticInfoChain.anyTypeSymbol;
if (this.compilationSettings.noImplicitAny()) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Constructor_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type));
}
}
if (!hadError) {
if (funcSymbol) {
funcSymbol.setUnresolved();
if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) {
funcSymbol.type = functionTypeSymbol;
}
}
signature.setResolved();
}
}
if (funcSymbol) {
this.resolveOtherDeclarations(funcDeclAST, context);
}
if (this.canTypeCheckAST(funcDeclAST, context)) {
this.typeCheckAnyFunctionDeclaration(funcDeclAST, isStatic, name, typeParameters, parameterList, returnTypeAnnotation, block, context);
}
return funcSymbol;
};
PullTypeResolver.prototype.resolveGetterReturnTypeAnnotation = function (getterFunctionDeclarationAst, enclosingDecl, context) {
if (getterFunctionDeclarationAst && getterFunctionDeclarationAst.typeAnnotation) {
return this.resolveTypeReference(TypeScript.ASTHelpers.getType(getterFunctionDeclarationAst), context);
}
return null;
};
PullTypeResolver.prototype.resolveSetterArgumentTypeAnnotation = function (setterFunctionDeclarationAst, enclosingDecl, context) {
if (setterFunctionDeclarationAst && setterFunctionDeclarationAst.parameterList && setterFunctionDeclarationAst.parameterList.parameters.nonSeparatorCount() > 0) {
var parameter = setterFunctionDeclarationAst.parameterList.parameters.nonSeparatorAt(0);
return this.resolveTypeReference(TypeScript.ASTHelpers.getType(parameter), context);
}
return null;
};
PullTypeResolver.prototype.resolveAccessorDeclaration = function (funcDeclAst, context) {
var functionDeclaration = this.semanticInfoChain.getDeclForAST(funcDeclAst);
var accessorSymbol = functionDeclaration.getSymbol();
if (accessorSymbol.inResolution) {
accessorSymbol.type = this.semanticInfoChain.anyTypeSymbol;
accessorSymbol.setResolved();
return accessorSymbol;
}
if (accessorSymbol.isResolved) {
if (!accessorSymbol.type) {
accessorSymbol.type = this.semanticInfoChain.anyTypeSymbol;
}
} else {
var getterSymbol = accessorSymbol.getGetter();
var getterFunctionDeclarationAst = getterSymbol ? getterSymbol.getDeclarations()[0].ast() : null;
var hasGetter = getterSymbol !== null;
var setterSymbol = accessorSymbol.getSetter();
var setterFunctionDeclarationAst = setterSymbol ? setterSymbol.getDeclarations()[0].ast() : null;
var hasSetter = setterSymbol !== null;
var getterAnnotatedType = this.resolveGetterReturnTypeAnnotation(getterFunctionDeclarationAst, functionDeclaration, context);
var getterHasTypeAnnotation = getterAnnotatedType !== null;
var setterAnnotatedType = this.resolveSetterArgumentTypeAnnotation(setterFunctionDeclarationAst, functionDeclaration, context);
var setterHasTypeAnnotation = setterAnnotatedType !== null;
accessorSymbol.startResolving();
if (hasGetter) {
getterSymbol = this.resolveGetAccessorDeclaration(getterFunctionDeclarationAst, getterFunctionDeclarationAst.parameterList, TypeScript.ASTHelpers.getType(getterFunctionDeclarationAst), getterFunctionDeclarationAst.block, setterAnnotatedType, context);
}
if (hasSetter) {
setterSymbol = this.resolveSetAccessorDeclaration(setterFunctionDeclarationAst, setterFunctionDeclarationAst.parameterList, context);
}
if (hasGetter && hasSetter) {
var setterSig = setterSymbol.type.getCallSignatures()[0];
var setterParameters = setterSig.parameters;
var setterHasParameters = setterParameters.length > 0;
var getterSig = getterSymbol.type.getCallSignatures()[0];
var setterSuppliedTypeSymbol = setterHasParameters ? setterParameters[0].type : null;
var getterSuppliedTypeSymbol = getterSig.returnType;
if (setterHasTypeAnnotation && !getterHasTypeAnnotation) {
getterSuppliedTypeSymbol = setterSuppliedTypeSymbol;
getterSig.returnType = setterSuppliedTypeSymbol;
} else if ((getterHasTypeAnnotation && !setterHasTypeAnnotation) || (!getterHasTypeAnnotation && !setterHasTypeAnnotation)) {
setterSuppliedTypeSymbol = getterSuppliedTypeSymbol;
if (setterHasParameters) {
setterParameters[0].type = getterSuppliedTypeSymbol;
}
}
if (!this.typesAreIdentical(setterSuppliedTypeSymbol, getterSuppliedTypeSymbol, context)) {
accessorSymbol.type = this.getNewErrorTypeSymbol();
} else {
accessorSymbol.type = getterSuppliedTypeSymbol;
}
} else if (hasSetter) {
var setterSig = setterSymbol.type.getCallSignatures()[0];
var setterParameters = setterSig.parameters;
var setterHasParameters = setterParameters.length > 0;
accessorSymbol.type = setterHasParameters ? setterParameters[0].type : this.semanticInfoChain.anyTypeSymbol;
} else {
var getterSig = getterSymbol.type.getCallSignatures()[0];
accessorSymbol.type = getterSig.returnType;
}
accessorSymbol.setResolved();
}
if (this.canTypeCheckAST(funcDeclAst, context)) {
this.typeCheckAccessorDeclaration(funcDeclAst, context);
}
return accessorSymbol;
};
PullTypeResolver.prototype.typeCheckAccessorDeclaration = function (funcDeclAst, context) {
this.setTypeChecked(funcDeclAst, context);
var functionDeclaration = this.semanticInfoChain.getDeclForAST(funcDeclAst);
var accessorSymbol = functionDeclaration.getSymbol();
var getterSymbol = accessorSymbol.getGetter();
var setterSymbol = accessorSymbol.getSetter();
var isGetter = funcDeclAst.kind() === 139 /* GetAccessor */;
if (isGetter) {
var getterFunctionDeclarationAst = funcDeclAst;
context.pushNewContextualType(getterSymbol.type);
this.typeCheckGetAccessorDeclaration(getterFunctionDeclarationAst, context);
context.popAnyContextualType();
} else {
var setterFunctionDeclarationAst = funcDeclAst;
this.typeCheckSetAccessorDeclaration(setterFunctionDeclarationAst, context);
}
};
PullTypeResolver.prototype.resolveGetAccessorDeclaration = function (funcDeclAST, parameters, returnTypeAnnotation, block, setterAnnotatedType, context) {
var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST);
var accessorSymbol = funcDecl.getSymbol();
var getterSymbol = accessorSymbol.getGetter();
var getterTypeSymbol = getterSymbol.type;
var signature = getterTypeSymbol.getCallSignatures()[0];
var hadError = false;
if (signature) {
if (signature.isResolved) {
return getterSymbol;
}
if (signature.inResolution) {
signature.returnType = this.semanticInfoChain.anyTypeSymbol;
signature.setResolved();
return getterSymbol;
}
signature.startResolving();
if (returnTypeAnnotation) {
var returnTypeSymbol = this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, returnTypeAnnotation, context);
if (!returnTypeSymbol) {
signature.returnType = this.getNewErrorTypeSymbol();
hadError = true;
} else {
signature.returnType = returnTypeSymbol;
}
} else {
if (!setterAnnotatedType) {
this.resolveFunctionBodyReturnTypes(funcDeclAST, block, null, signature, false, funcDecl, context);
} else {
signature.returnType = setterAnnotatedType;
}
}
if (!hadError) {
signature.setResolved();
}
}
return getterSymbol;
};
PullTypeResolver.prototype.checkIfGetterAndSetterTypeMatch = function (funcDeclAST, context) {
var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST);
var accessorSymbol = funcDecl.getSymbol();
var getter = accessorSymbol.getGetter();
var setter = accessorSymbol.getSetter();
if (getter && setter) {
var getterAST = getter.getDeclarations()[0].ast();
var setterAST = setter.getDeclarations()[0].ast();
if (getterAST.typeAnnotation && PullTypeResolver.hasSetAccessorParameterTypeAnnotation(setterAST)) {
var setterSig = setter.type.getCallSignatures()[0];
var setterParameters = setterSig.parameters;
var getter = accessorSymbol.getGetter();
var getterSig = getter.type.getCallSignatures()[0];
var setterSuppliedTypeSymbol = setterParameters[0].type;
var getterSuppliedTypeSymbol = getterSig.returnType;
if (!this.typesAreIdentical(setterSuppliedTypeSymbol, getterSuppliedTypeSymbol, context)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.get_and_set_accessor_must_have_the_same_type));
}
}
}
};
PullTypeResolver.prototype.typeCheckGetAccessorDeclaration = function (funcDeclAST, context) {
var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST);
var accessorSymbol = funcDecl.getSymbol();
this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, TypeScript.ASTHelpers.getType(funcDeclAST), context);
this.resolveAST(funcDeclAST.block, false, context);
this.validateVariableDeclarationGroups(funcDecl, context);
var enclosingDecl = this.getEnclosingDecl(funcDecl);
var hasReturn = (funcDecl.flags & (2048 /* Signature */ | 4194304 /* HasReturnStatement */)) !== 0;
var funcNameAST = funcDeclAST.propertyName;
if (!hasReturn && !this.containsSingleThrowStatement(funcDeclAST.block)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcNameAST, TypeScript.DiagnosticCode.Getters_must_return_a_value));
}
var setter = accessorSymbol.getSetter();
if (setter) {
var setterDecl = setter.getDeclarations()[0];
var setterIsPrivate = TypeScript.hasFlag(setterDecl.flags, 2 /* Private */);
var getterIsPrivate = TypeScript.hasModifier(funcDeclAST.modifiers, 2 /* Private */);
if (getterIsPrivate !== setterIsPrivate) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcNameAST, TypeScript.DiagnosticCode.Getter_and_setter_accessors_do_not_agree_in_visibility));
}
this.checkIfGetterAndSetterTypeMatch(funcDeclAST, context);
}
this.checkFunctionTypePrivacy(funcDeclAST, TypeScript.hasModifier(funcDeclAST.modifiers, 16 /* Static */), null, TypeScript.ASTHelpers.parametersFromParameterList(funcDeclAST.parameterList), TypeScript.ASTHelpers.getType(funcDeclAST), funcDeclAST.block, context);
};
PullTypeResolver.hasSetAccessorParameterTypeAnnotation = function (setAccessor) {
return setAccessor.parameterList && setAccessor.parameterList.parameters.nonSeparatorCount() > 0 && setAccessor.parameterList.parameters.nonSeparatorAt(0).typeAnnotation !== null;
};
PullTypeResolver.prototype.resolveSetAccessorDeclaration = function (funcDeclAST, parameterList, context) {
var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST);
var accessorSymbol = funcDecl.getSymbol();
var setterSymbol = accessorSymbol.getSetter();
var setterTypeSymbol = setterSymbol.type;
var signature = funcDecl.getSignatureSymbol();
var hadError = false;
if (signature) {
if (signature.isResolved) {
return setterSymbol;
}
if (signature.inResolution) {
signature.returnType = this.semanticInfoChain.voidTypeSymbol;
signature.setResolved();
return setterSymbol;
}
signature.startResolving();
if (parameterList) {
for (var i = 0; i < parameterList.parameters.nonSeparatorCount(); i++) {
this.resolveParameter(parameterList.parameters.nonSeparatorAt(i), context);
}
}
signature.returnType = this.semanticInfoChain.voidTypeSymbol;
if (!hadError) {
signature.setResolved();
}
}
return setterSymbol;
};
PullTypeResolver.prototype.typeCheckSetAccessorDeclaration = function (funcDeclAST, context) {
var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST);
var accessorSymbol = funcDecl.getSymbol();
if (funcDeclAST.parameterList) {
for (var i = 0; i < funcDeclAST.parameterList.parameters.nonSeparatorCount(); i++) {
this.resolveParameter(funcDeclAST.parameterList.parameters.nonSeparatorAt(i), context);
}
}
this.resolveAST(funcDeclAST.block, false, context);
this.validateVariableDeclarationGroups(funcDecl, context);
var hasReturn = (funcDecl.flags & (2048 /* Signature */ | 4194304 /* HasReturnStatement */)) !== 0;
var getter = accessorSymbol.getGetter();
var funcNameAST = funcDeclAST.propertyName;
if (getter) {
var getterDecl = getter.getDeclarations()[0];
var getterIsPrivate = TypeScript.hasFlag(getterDecl.flags, 2 /* Private */);
var setterIsPrivate = TypeScript.hasModifier(funcDeclAST.modifiers, 2 /* Private */);
if (getterIsPrivate !== setterIsPrivate) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcNameAST, TypeScript.DiagnosticCode.Getter_and_setter_accessors_do_not_agree_in_visibility));
}
this.checkIfGetterAndSetterTypeMatch(funcDeclAST, context);
} else {
if (this.compilationSettings.noImplicitAny()) {
var setterFunctionDeclarationAst = funcDeclAST;
if (!PullTypeResolver.hasSetAccessorParameterTypeAnnotation(setterFunctionDeclarationAst) && accessorSymbol.type === this.semanticInfoChain.anyTypeSymbol) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode._0_which_lacks_get_accessor_and_parameter_type_annotation_on_set_accessor_implicitly_has_an_any_type, [setterFunctionDeclarationAst.propertyName.text()]));
}
}
}
this.checkFunctionTypePrivacy(funcDeclAST, TypeScript.hasModifier(funcDeclAST.modifiers, 16 /* Static */), null, TypeScript.ASTHelpers.parametersFromParameterList(funcDeclAST.parameterList), null, funcDeclAST.block, context);
};
PullTypeResolver.prototype.resolveList = function (list, context) {
if (this.canTypeCheckAST(list, context)) {
this.setTypeChecked(list, context);
for (var i = 0, n = list.childCount(); i < n; i++) {
this.resolveAST(list.childAt(i), false, context);
}
}
return this.semanticInfoChain.voidTypeSymbol;
};
PullTypeResolver.prototype.resolveSeparatedList = function (list, context) {
if (this.canTypeCheckAST(list, context)) {
this.setTypeChecked(list, context);
for (var i = 0, n = list.nonSeparatorCount(); i < n; i++) {
this.resolveAST(list.nonSeparatorAt(i), false, context);
}
}
return this.semanticInfoChain.voidTypeSymbol;
};
PullTypeResolver.prototype.resolveVoidExpression = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.setTypeChecked(ast, context);
this.resolveAST(ast.expression, false, context);
}
return this.semanticInfoChain.undefinedTypeSymbol;
};
PullTypeResolver.prototype.resolveLogicalOperation = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.typeCheckLogicalOperation(ast, context);
}
return this.semanticInfoChain.booleanTypeSymbol;
};
PullTypeResolver.prototype.typeCheckLogicalOperation = function (binex, context) {
this.setTypeChecked(binex, context);
var leftType = this.resolveAST(binex.left, false, context).type;
var rightType = this.resolveAST(binex.right, false, context).type;
var comparisonInfo = new TypeComparisonInfo();
if (!this.sourceIsAssignableToTarget(leftType, rightType, binex, context, comparisonInfo) && !this.sourceIsAssignableToTarget(rightType, leftType, binex, context, comparisonInfo)) {
var enclosingSymbol = this.getEnclosingSymbolForAST(binex);
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binex, TypeScript.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, [
TypeScript.SyntaxFacts.getText(TypeScript.SyntaxFacts.getOperatorTokenFromBinaryExpression(binex.kind())),
leftType.toString(enclosingSymbol), rightType.toString(enclosingSymbol)]));
}
};
PullTypeResolver.prototype.resolveLogicalNotExpression = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.setTypeChecked(ast, context);
this.resolveAST(ast.operand, false, context);
}
return this.semanticInfoChain.booleanTypeSymbol;
};
PullTypeResolver.prototype.resolveUnaryArithmeticOperation = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.typeCheckUnaryArithmeticOperation(ast, context);
}
return this.semanticInfoChain.numberTypeSymbol;
};
PullTypeResolver.prototype.resolvePostfixUnaryExpression = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.typeCheckPostfixUnaryExpression(ast, context);
}
return this.semanticInfoChain.numberTypeSymbol;
};
PullTypeResolver.prototype.isAnyOrNumberOrEnum = function (type) {
return this.isAnyOrEquivalent(type) || type === this.semanticInfoChain.numberTypeSymbol || TypeScript.PullHelpers.symbolIsEnum(type);
};
PullTypeResolver.prototype.typeCheckUnaryArithmeticOperation = function (unaryExpression, context) {
this.setTypeChecked(unaryExpression, context);
var nodeType = unaryExpression.kind();
var expression = this.resolveAST(unaryExpression.operand, false, context);
if (nodeType === 164 /* PlusExpression */ || nodeType == 165 /* NegateExpression */ || nodeType == 166 /* BitwiseNotExpression */) {
return;
}
TypeScript.Debug.assert(nodeType === 168 /* PreIncrementExpression */ || nodeType === 169 /* PreDecrementExpression */);
var operandType = expression.type;
if (!this.isAnyOrNumberOrEnum(operandType)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(unaryExpression.operand, TypeScript.DiagnosticCode.The_type_of_a_unary_arithmetic_operation_operand_must_be_of_type_any_number_or_an_enum_type));
}
if (!this.isReference(unaryExpression.operand, expression)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(unaryExpression.operand, TypeScript.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer));
}
};
PullTypeResolver.prototype.typeCheckPostfixUnaryExpression = function (unaryExpression, context) {
this.setTypeChecked(unaryExpression, context);
var nodeType = unaryExpression.kind();
var expression = this.resolveAST(unaryExpression.operand, false, context);
TypeScript.Debug.assert(nodeType === 210 /* PostIncrementExpression */ || nodeType === 211 /* PostDecrementExpression */);
var operandType = expression.type;
if (!this.isAnyOrNumberOrEnum(operandType)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(unaryExpression.operand, TypeScript.DiagnosticCode.The_type_of_a_unary_arithmetic_operation_operand_must_be_of_type_any_number_or_an_enum_type));
}
if (!this.isReference(unaryExpression.operand, expression)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(unaryExpression.operand, TypeScript.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer));
}
};
PullTypeResolver.prototype.resolveBinaryArithmeticExpression = function (binaryExpression, context) {
if (this.canTypeCheckAST(binaryExpression, context)) {
this.typeCheckBinaryArithmeticExpression(binaryExpression, context);
}
return this.semanticInfoChain.numberTypeSymbol;
};
PullTypeResolver.prototype.typeCheckBinaryArithmeticExpression = function (binaryExpression, context) {
this.setTypeChecked(binaryExpression, context);
var lhsSymbol = this.resolveAST(binaryExpression.left, false, context);
var lhsType = lhsSymbol.type;
var rhsType = this.resolveAST(binaryExpression.right, false, context).type;
if (lhsType === this.semanticInfoChain.nullTypeSymbol || lhsType === this.semanticInfoChain.undefinedTypeSymbol) {
lhsType = rhsType;
}
if (rhsType === this.semanticInfoChain.nullTypeSymbol || rhsType === this.semanticInfoChain.undefinedTypeSymbol) {
rhsType = lhsType;
}
var lhsIsFit = this.isAnyOrNumberOrEnum(lhsType);
var rhsIsFit = this.isAnyOrNumberOrEnum(rhsType);
if (!rhsIsFit) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.right, TypeScript.DiagnosticCode.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type));
}
if (!lhsIsFit) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type));
}
if (lhsIsFit && rhsIsFit) {
switch (binaryExpression.kind()) {
case 183 /* LeftShiftAssignmentExpression */:
case 184 /* SignedRightShiftAssignmentExpression */:
case 185 /* UnsignedRightShiftAssignmentExpression */:
case 176 /* SubtractAssignmentExpression */:
case 177 /* MultiplyAssignmentExpression */:
case 178 /* DivideAssignmentExpression */:
case 179 /* ModuloAssignmentExpression */:
case 182 /* OrAssignmentExpression */:
case 180 /* AndAssignmentExpression */:
case 181 /* ExclusiveOrAssignmentExpression */:
if (!this.isReference(binaryExpression.left, lhsSymbol)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.Invalid_left_hand_side_of_assignment_expression));
}
this.checkAssignability(binaryExpression.left, rhsType, lhsType, context);
}
}
};
PullTypeResolver.prototype.resolveTypeOfExpression = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.setTypeChecked(ast, context);
this.resolveAST(ast.expression, false, context);
}
return this.semanticInfoChain.stringTypeSymbol;
};
PullTypeResolver.prototype.resolveThrowStatement = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.setTypeChecked(ast, context);
this.resolveAST(ast.expression, false, context);
}
return this.semanticInfoChain.voidTypeSymbol;
};
PullTypeResolver.prototype.resolveDeleteExpression = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.setTypeChecked(ast, context);
this.resolveAST(ast.expression, false, context);
}
return this.semanticInfoChain.booleanTypeSymbol;
};
PullTypeResolver.prototype.resolveInstanceOfExpression = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.typeCheckInstanceOfExpression(ast, context);
}
return this.semanticInfoChain.booleanTypeSymbol;
};
PullTypeResolver.prototype.typeCheckInstanceOfExpression = function (binaryExpression, context) {
this.setTypeChecked(binaryExpression, context);
var lhsType = this.resolveAST(binaryExpression.left, false, context).type;
var rhsType = this.resolveAST(binaryExpression.right, false, context).type;
var enclosingSymbol = this.getEnclosingSymbolForAST(binaryExpression);
var isValidLHS = this.isAnyOrEquivalent(lhsType) || lhsType.isObject() || lhsType.isTypeParameter();
var isValidRHS = this.isAnyOrEquivalent(rhsType) || this.typeIsAssignableToFunction(rhsType, binaryExpression, context);
if (!isValidLHS) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter));
}
if (!isValidRHS) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.right, TypeScript.DiagnosticCode.The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type));
}
};
PullTypeResolver.prototype.resolveCommaExpression = function (commaExpression, context) {
if (this.canTypeCheckAST(commaExpression, context)) {
this.setTypeChecked(commaExpression, context);
this.resolveAST(commaExpression.left, false, context);
}
return this.resolveAST(commaExpression.right, false, context).type;
};
PullTypeResolver.prototype.resolveInExpression = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.typeCheckInExpression(ast, context);
}
return this.semanticInfoChain.booleanTypeSymbol;
};
PullTypeResolver.prototype.typeCheckInExpression = function (binaryExpression, context) {
this.setTypeChecked(binaryExpression, context);
var lhsType = this.resolveAST(binaryExpression.left, false, context).type;
var rhsType = this.resolveAST(binaryExpression.right, false, context).type;
var isValidLHS = this.isAnyOrEquivalent(lhsType.type) || lhsType.type === this.semanticInfoChain.stringTypeSymbol || lhsType.type === this.semanticInfoChain.numberTypeSymbol;
var isValidRHS = this.isAnyOrEquivalent(rhsType) || rhsType.isObject() || rhsType.isTypeParameter();
if (!isValidLHS) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number));
}
if (!isValidRHS) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.right, TypeScript.DiagnosticCode.The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter));
}
};
PullTypeResolver.prototype.resolveForStatement = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.setTypeChecked(ast, context);
this.resolveAST(ast.variableDeclaration, false, context);
this.resolveAST(ast.initializer, false, context);
this.resolveAST(ast.condition, false, context);
this.resolveAST(ast.incrementor, false, context);
this.resolveAST(ast.statement, false, context);
}
return this.semanticInfoChain.voidTypeSymbol;
};
PullTypeResolver.prototype.resolveForInStatement = function (forInStatement, context) {
if (this.canTypeCheckAST(forInStatement, context)) {
this.typeCheckForInStatement(forInStatement, context);
}
return this.semanticInfoChain.voidTypeSymbol;
};
PullTypeResolver.prototype.typeCheckForInStatement = function (forInStatement, context) {
this.setTypeChecked(forInStatement, context);
if (forInStatement.variableDeclaration) {
var declaration = forInStatement.variableDeclaration;
if (declaration.declarators.nonSeparatorCount() === 1) {
var varDecl = declaration.declarators.nonSeparatorAt(0);
if (varDecl.typeAnnotation) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(declaration, TypeScript.DiagnosticCode.Variable_declarations_of_a_for_statement_cannot_use_a_type_annotation));
}
}
} else {
var varSym = this.resolveAST(forInStatement.left, false, context);
var isStringOrNumber = varSym.type === this.semanticInfoChain.stringTypeSymbol || this.isAnyOrEquivalent(varSym.type);
if (!isStringOrNumber) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(forInStatement.left, TypeScript.DiagnosticCode.Variable_declarations_of_a_for_statement_must_be_of_types_string_or_any));
}
}
var rhsType = this.resolveAST(forInStatement.expression, false, context).type;
var isValidRHS = rhsType && (this.isAnyOrEquivalent(rhsType) || rhsType.isObject() || rhsType.isTypeParameter());
if (!isValidRHS) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(forInStatement.expression, TypeScript.DiagnosticCode.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter));
}
this.resolveAST(forInStatement.statement, false, context);
};
PullTypeResolver.prototype.resolveWhileStatement = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.typeCheckWhileStatement(ast, context);
}
return this.semanticInfoChain.voidTypeSymbol;
};
PullTypeResolver.prototype.typeCheckWhileStatement = function (ast, context) {
this.setTypeChecked(ast, context);
this.resolveAST(ast.condition, false, context);
this.resolveAST(ast.statement, false, context);
};
PullTypeResolver.prototype.resolveDoStatement = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.typeCheckDoStatement(ast, context);
}
return this.semanticInfoChain.voidTypeSymbol;
};
PullTypeResolver.prototype.typeCheckDoStatement = function (ast, context) {
this.setTypeChecked(ast, context);
this.resolveAST(ast.condition, false, context);
this.resolveAST(ast.statement, false, context);
};
PullTypeResolver.prototype.resolveIfStatement = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.typeCheckIfStatement(ast, context);
}
return this.semanticInfoChain.voidTypeSymbol;
};
PullTypeResolver.prototype.typeCheckIfStatement = function (ast, context) {
this.setTypeChecked(ast, context);
this.resolveAST(ast.condition, false, context);
this.resolveAST(ast.statement, false, context);
this.resolveAST(ast.elseClause, false, context);
};
PullTypeResolver.prototype.resolveElseClause = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.typeCheckElseClause(ast, context);
}
return this.semanticInfoChain.voidTypeSymbol;
};
PullTypeResolver.prototype.typeCheckElseClause = function (ast, context) {
this.setTypeChecked(ast, context);
this.resolveAST(ast.statement, false, context);
};
PullTypeResolver.prototype.resolveBlock = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.setTypeChecked(ast, context);
this.resolveAST(ast.statements, false, context);
}
return this.semanticInfoChain.voidTypeSymbol;
};
PullTypeResolver.prototype.resolveVariableStatement = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.setTypeChecked(ast, context);
this.resolveAST(ast.declaration, false, context);
}
return this.semanticInfoChain.voidTypeSymbol;
};
PullTypeResolver.prototype.resolveVariableDeclarationList = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.setTypeChecked(ast, context);
this.resolveAST(ast.declarators, false, context);
}
return this.semanticInfoChain.voidTypeSymbol;
};
PullTypeResolver.prototype.resolveWithStatement = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.typeCheckWithStatement(ast, context);
}
return this.semanticInfoChain.voidTypeSymbol;
};
PullTypeResolver.prototype.typeCheckWithStatement = function (ast, context) {
this.setTypeChecked(ast, context);
var withStatement = ast;
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(withStatement.condition, TypeScript.DiagnosticCode.All_symbols_within_a_with_block_will_be_resolved_to_any));
};
PullTypeResolver.prototype.resolveTryStatement = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.typeCheckTryStatement(ast, context);
}
return this.semanticInfoChain.voidTypeSymbol;
};
PullTypeResolver.prototype.typeCheckTryStatement = function (ast, context) {
this.setTypeChecked(ast, context);
var tryStatement = ast;
this.resolveAST(tryStatement.block, false, context);
this.resolveAST(tryStatement.catchClause, false, context);
this.resolveAST(tryStatement.finallyClause, false, context);
};
PullTypeResolver.prototype.resolveCatchClause = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.typeCheckCatchClause(ast, context);
}
return this.semanticInfoChain.voidTypeSymbol;
};
PullTypeResolver.prototype.typeCheckCatchClause = function (ast, context) {
this.setTypeChecked(ast, context);
this.resolveAST(ast.block, false, context);
var catchDecl = this.semanticInfoChain.getDeclForAST(ast);
this.validateVariableDeclarationGroups(catchDecl, context);
};
PullTypeResolver.prototype.resolveFinallyClause = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.typeCheckFinallyClause(ast, context);
}
return this.semanticInfoChain.voidTypeSymbol;
};
PullTypeResolver.prototype.typeCheckFinallyClause = function (ast, context) {
this.setTypeChecked(ast, context);
this.resolveAST(ast.block, false, context);
};
PullTypeResolver.prototype.getEnclosingFunctionDeclaration = function (ast) {
var enclosingDecl = this.getEnclosingDeclForAST(ast);
while (enclosingDecl) {
if (enclosingDecl.kind & 1032192 /* SomeFunction */) {
return enclosingDecl;
}
enclosingDecl = enclosingDecl.getParentDecl();
}
return null;
};
PullTypeResolver.prototype.resolveReturnExpression = function (expression, enclosingFunction, context) {
if (enclosingFunction) {
enclosingFunction.setFlag(4194304 /* HasReturnStatement */);
}
var isContextuallyTyped = false;
if (enclosingFunction) {
var enclosingDeclAST = this.getASTForDecl(enclosingFunction);
var typeAnnotation = TypeScript.ASTHelpers.getType(enclosingDeclAST);
if (typeAnnotation) {
var returnTypeAnnotationSymbol = this.resolveTypeReference(typeAnnotation, context);
if (returnTypeAnnotationSymbol) {
isContextuallyTyped = true;
context.pushNewContextualType(returnTypeAnnotationSymbol);
}
} else {
var currentContextualType = context.getContextualType();
if (currentContextualType && currentContextualType.isFunction()) {
var contextualSignatures = currentContextualType.kind == 33554432 /* ConstructorType */ ? currentContextualType.getConstructSignatures() : currentContextualType.getCallSignatures();
var currentContextualTypeSignatureSymbol = contextualSignatures[0];
var currentContextualTypeReturnTypeSymbol = currentContextualTypeSignatureSymbol.returnType;
if (currentContextualTypeReturnTypeSymbol) {
isContextuallyTyped = true;
context.propagateContextualType(currentContextualTypeReturnTypeSymbol);
}
}
}
}
var result = this.resolveAST(expression, isContextuallyTyped, context).type;
if (isContextuallyTyped) {
context.popAnyContextualType();
}
return result;
};
PullTypeResolver.prototype.typeCheckReturnExpression = function (expression, expressionType, enclosingFunction, context) {
if (enclosingFunction && enclosingFunction.kind === 32768 /* ConstructorMethod */) {
var classDecl = enclosingFunction.getParentDecl();
if (classDecl) {
var classSymbol = classDecl.getSymbol();
this.resolveDeclaredSymbol(classSymbol, context);
var comparisonInfo = new TypeComparisonInfo();
var isAssignable = this.sourceIsAssignableToTarget(expressionType, classSymbol.type, expression, context, comparisonInfo);
if (!isAssignable) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(expression, TypeScript.DiagnosticCode.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class));
}
}
}
if (enclosingFunction && enclosingFunction.kind === 524288 /* SetAccessor */) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(expression, TypeScript.DiagnosticCode.Setters_cannot_return_a_value));
}
if (enclosingFunction) {
var enclosingDeclAST = this.getASTForDecl(enclosingFunction);
var typeAnnotation = TypeScript.ASTHelpers.getType(enclosingDeclAST);
if (typeAnnotation || enclosingFunction.kind === 262144 /* GetAccessor */) {
var signatureSymbol = enclosingFunction.getSignatureSymbol();
var sigReturnType = signatureSymbol.returnType;
if (expressionType && sigReturnType) {
var comparisonInfo = new TypeComparisonInfo();
var upperBound = null;
this.resolveDeclaredSymbol(expressionType, context);
this.resolveDeclaredSymbol(sigReturnType, context);
var isAssignable = this.sourceIsAssignableToTarget(expressionType, sigReturnType, expression, context, comparisonInfo);
if (!isAssignable) {
var enclosingSymbol = this.getEnclosingSymbolForAST(expression);
if (comparisonInfo.message) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(expression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [expressionType.toString(enclosingSymbol), sigReturnType.toString(enclosingSymbol), comparisonInfo.message]));
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(expression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [expressionType.toString(enclosingSymbol), sigReturnType.toString(enclosingSymbol)]));
}
}
}
}
}
};
PullTypeResolver.prototype.resolveReturnStatement = function (returnAST, context) {
var enclosingFunction = this.getEnclosingFunctionDeclaration(returnAST);
if (enclosingFunction) {
enclosingFunction.setFlag(4194304 /* HasReturnStatement */);
}
var returnType = this.getSymbolForAST(returnAST, context);
var canTypeCheckAST = this.canTypeCheckAST(returnAST, context);
if (!returnType || canTypeCheckAST) {
var returnExpr = returnAST.expression;
var resolvedReturnType = returnExpr === null ? this.semanticInfoChain.voidTypeSymbol : this.resolveReturnExpression(returnExpr, enclosingFunction, context);
if (!returnType) {
returnType = resolvedReturnType;
this.setSymbolForAST(returnAST, resolvedReturnType, context);
}
if (returnExpr && canTypeCheckAST) {
this.setTypeChecked(returnExpr, context);
this.typeCheckReturnExpression(returnExpr, resolvedReturnType, enclosingFunction, context);
}
}
return returnType;
};
PullTypeResolver.prototype.resolveSwitchStatement = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.typeCheckSwitchStatement(ast, context);
}
return this.semanticInfoChain.voidTypeSymbol;
};
PullTypeResolver.prototype.typeCheckSwitchStatement = function (ast, context) {
this.setTypeChecked(ast, context);
var expressionType = this.resolveAST(ast.expression, false, context).type;
for (var i = 0, n = ast.switchClauses.childCount(); i < n; i++) {
var switchClause = ast.switchClauses.childAt(i);
if (switchClause.kind() === 233 /* CaseSwitchClause */) {
var caseSwitchClause = switchClause;
var caseClauseExpressionType = this.resolveAST(caseSwitchClause.expression, false, context).type;
this.resolveAST(caseSwitchClause.statements, false, context);
var comparisonInfo = new TypeComparisonInfo();
if (!this.sourceIsAssignableToTarget(expressionType, caseClauseExpressionType, caseSwitchClause.expression, context, comparisonInfo) && !this.sourceIsAssignableToTarget(caseClauseExpressionType, expressionType, caseSwitchClause.expression, context, comparisonInfo)) {
var enclosingSymbol = this.getEnclosingSymbolForAST(caseSwitchClause.expression);
if (comparisonInfo.message) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(caseSwitchClause.expression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [caseClauseExpressionType.toString(enclosingSymbol), expressionType.toString(enclosingSymbol), comparisonInfo.message]));
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(caseSwitchClause.expression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [caseClauseExpressionType.toString(enclosingSymbol), expressionType.toString(enclosingSymbol)]));
}
}
} else {
var defaultSwitchClause = switchClause;
this.resolveAST(defaultSwitchClause.statements, false, context);
}
}
};
PullTypeResolver.prototype.resolveLabeledStatement = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.typeCheckLabeledStatement(ast, context);
}
return this.semanticInfoChain.voidTypeSymbol;
};
PullTypeResolver.prototype.typeCheckLabeledStatement = function (ast, context) {
this.setTypeChecked(ast, context);
var labelIdentifier = ast.identifier.valueText();
var breakableLabels = this.getEnclosingLabels(ast, true, false);
var matchingLabel = TypeScript.ArrayUtilities.firstOrDefault(breakableLabels, function (s) {
return s.identifier.valueText() === labelIdentifier;
});
if (matchingLabel) {
context.postDiagnostic(this.semanticInfoChain.duplicateIdentifierDiagnosticFromAST(ast.identifier, labelIdentifier, matchingLabel));
}
this.resolveAST(ast.statement, false, context);
};
PullTypeResolver.prototype.labelIsOnContinuableConstruct = function (statement) {
switch (statement.kind()) {
case 160 /* LabeledStatement */:
return this.labelIsOnContinuableConstruct(statement.statement);
case 158 /* WhileStatement */:
case 154 /* ForStatement */:
case 155 /* ForInStatement */:
case 161 /* DoStatement */:
return true;
default:
return false;
}
};
PullTypeResolver.prototype.resolveContinueStatement = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.typeCheckContinueStatement(ast, context);
}
return this.semanticInfoChain.voidTypeSymbol;
};
PullTypeResolver.prototype.isIterationStatement = function (ast) {
switch (ast.kind()) {
case 154 /* ForStatement */:
case 155 /* ForInStatement */:
case 158 /* WhileStatement */:
case 161 /* DoStatement */:
return true;
}
return false;
};
PullTypeResolver.prototype.isAnyFunctionExpressionOrDeclaration = function (ast) {
switch (ast.kind()) {
case 219 /* SimpleArrowFunctionExpression */:
case 218 /* ParenthesizedArrowFunctionExpression */:
case 222 /* FunctionExpression */:
case 129 /* FunctionDeclaration */:
case 135 /* MemberFunctionDeclaration */:
case 241 /* FunctionPropertyAssignment */:
case 137 /* ConstructorDeclaration */:
case 139 /* GetAccessor */:
case 140 /* SetAccessor */:
return true;
}
return false;
};
PullTypeResolver.prototype.inSwitchStatement = function (ast) {
while (ast) {
if (ast.kind() === 151 /* SwitchStatement */) {
return true;
}
if (this.isAnyFunctionExpressionOrDeclaration(ast)) {
return false;
}
ast = ast.parent;
}
return false;
};
PullTypeResolver.prototype.inIterationStatement = function (ast, crossFunctions) {
while (ast) {
if (this.isIterationStatement(ast)) {
return true;
}
if (!crossFunctions && this.isAnyFunctionExpressionOrDeclaration(ast)) {
return false;
}
ast = ast.parent;
}
return false;
};
PullTypeResolver.prototype.getEnclosingLabels = function (ast, breakable, crossFunctions) {
var result = [];
ast = ast.parent;
while (ast) {
if (ast.kind() === 160 /* LabeledStatement */) {
var labeledStatement = ast;
if (breakable) {
result.push(labeledStatement);
} else {
if (this.labelIsOnContinuableConstruct(labeledStatement.statement)) {
result.push(labeledStatement);
}
}
}
if (!crossFunctions && this.isAnyFunctionExpressionOrDeclaration(ast)) {
break;
}
ast = ast.parent;
}
return result;
};
PullTypeResolver.prototype.typeCheckContinueStatement = function (ast, context) {
this.setTypeChecked(ast, context);
if (!this.inIterationStatement(ast, false)) {
if (this.inIterationStatement(ast, true)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary));
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.continue_statement_can_only_be_used_within_an_enclosing_iteration_statement));
}
} else if (ast.identifier) {
var continuableLabels = this.getEnclosingLabels(ast, false, false);
if (!TypeScript.ArrayUtilities.any(continuableLabels, function (s) {
return s.identifier.valueText() === ast.identifier.valueText();
})) {
var continuableLabels = this.getEnclosingLabels(ast, false, true);
if (TypeScript.ArrayUtilities.any(continuableLabels, function (s) {
return s.identifier.valueText() === ast.identifier.valueText();
})) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary));
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_not_found));
}
}
}
};
PullTypeResolver.prototype.resolveBreakStatement = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.typeCheckBreakStatement(ast, context);
}
return this.semanticInfoChain.voidTypeSymbol;
};
PullTypeResolver.prototype.typeCheckBreakStatement = function (ast, context) {
this.setTypeChecked(ast, context);
if (ast.identifier) {
var breakableLabels = this.getEnclosingLabels(ast, true, false);
if (!TypeScript.ArrayUtilities.any(breakableLabels, function (s) {
return s.identifier.valueText() === ast.identifier.valueText();
})) {
var breakableLabels = this.getEnclosingLabels(ast, true, true);
if (TypeScript.ArrayUtilities.any(breakableLabels, function (s) {
return s.identifier.valueText() === ast.identifier.valueText();
})) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary));
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_not_found));
}
}
} else if (!this.inIterationStatement(ast, false) && !this.inSwitchStatement(ast)) {
if (this.inIterationStatement(ast, true)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary));
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement));
}
}
};
PullTypeResolver.prototype.resolveAST = function (ast, isContextuallyTyped, context) {
if (!ast) {
return;
}
var symbol = this.getSymbolForAST(ast, context);
if (symbol && symbol.isResolved) {
this.typeCheckAST(ast, isContextuallyTyped, context);
return symbol;
}
if (ast.isExpression() && !isTypesOnlyLocation(ast)) {
return this.resolveExpressionAST(ast, isContextuallyTyped, context);
}
var nodeType = ast.kind();
switch (nodeType) {
case 124 /* ArrayType */:
case 126 /* GenericType */:
case 122 /* ObjectType */:
case 127 /* TypeQuery */:
case 125 /* ConstructorType */:
case 123 /* FunctionType */:
return this.resolveTypeReference(ast, context);
case 1 /* List */:
return this.resolveList(ast, context);
case 2 /* SeparatedList */:
return this.resolveSeparatedList(ast, context);
case 120 /* SourceUnit */:
return this.resolveSourceUnit(ast, context);
case 132 /* EnumDeclaration */:
return this.resolveEnumDeclaration(ast, context);
case 130 /* ModuleDeclaration */:
return this.resolveModuleDeclaration(ast, context);
case 128 /* InterfaceDeclaration */:
return this.resolveInterfaceDeclaration(ast, context);
case 131 /* ClassDeclaration */:
return this.resolveClassDeclaration(ast, context);
case 224 /* VariableDeclaration */:
return this.resolveVariableDeclarationList(ast, context);
case 136 /* MemberVariableDeclaration */:
return this.resolveMemberVariableDeclaration(ast, context);
case 225 /* VariableDeclarator */:
return this.resolveVariableDeclarator(ast, context);
case 141 /* PropertySignature */:
return this.resolvePropertySignature(ast, context);
case 227 /* ParameterList */:
return this.resolveParameterList(ast, context);
case 242 /* Parameter */:
return this.resolveParameter(ast, context);
case 243 /* EnumElement */:
return this.resolveEnumElement(ast, context);
case 232 /* EqualsValueClause */:
return this.resolveEqualsValueClause(ast, isContextuallyTyped, context);
case 238 /* TypeParameter */:
return this.resolveTypeParameterDeclaration(ast, context);
case 239 /* Constraint */:
return this.resolveConstraint(ast, context);
case 133 /* ImportDeclaration */:
return this.resolveImportDeclaration(ast, context);
case 240 /* SimplePropertyAssignment */:
return this.resolveSimplePropertyAssignment(ast, isContextuallyTyped, context);
case 241 /* FunctionPropertyAssignment */:
return this.resolveFunctionPropertyAssignment(ast, isContextuallyTyped, context);
case 11 /* IdentifierName */:
TypeScript.Debug.assert(isTypesOnlyLocation(ast));
return this.resolveTypeNameExpression(ast, context);
case 121 /* QualifiedName */:
return this.resolveQualifiedName(ast, context);
case 137 /* ConstructorDeclaration */:
return this.resolveConstructorDeclaration(ast, context);
case 139 /* GetAccessor */:
case 140 /* SetAccessor */:
return this.resolveAccessorDeclaration(ast, context);
case 138 /* IndexMemberDeclaration */:
return this.resolveIndexMemberDeclaration(ast, context);
case 144 /* IndexSignature */:
return this.resolveIndexSignature(ast, context);
case 135 /* MemberFunctionDeclaration */:
return this.resolveMemberFunctionDeclaration(ast, context);
case 142 /* CallSignature */:
return this.resolveCallSignature(ast, context);
case 143 /* ConstructSignature */:
return this.resolveConstructSignature(ast, context);
case 145 /* MethodSignature */:
return this.resolveMethodSignature(ast, context);
case 129 /* FunctionDeclaration */:
return this.resolveAnyFunctionDeclaration(ast, context);
case 244 /* TypeAnnotation */:
return this.resolveTypeAnnotation(ast, context);
case 134 /* ExportAssignment */:
return this.resolveExportAssignmentStatement(ast, context);
case 157 /* ThrowStatement */:
return this.resolveThrowStatement(ast, context);
case 149 /* ExpressionStatement */:
return this.resolveExpressionStatement(ast, context);
case 154 /* ForStatement */:
return this.resolveForStatement(ast, context);
case 155 /* ForInStatement */:
return this.resolveForInStatement(ast, context);
case 158 /* WhileStatement */:
return this.resolveWhileStatement(ast, context);
case 161 /* DoStatement */:
return this.resolveDoStatement(ast, context);
case 147 /* IfStatement */:
return this.resolveIfStatement(ast, context);
case 235 /* ElseClause */:
return this.resolveElseClause(ast, context);
case 146 /* Block */:
return this.resolveBlock(ast, context);
case 148 /* VariableStatement */:
return this.resolveVariableStatement(ast, context);
case 163 /* WithStatement */:
return this.resolveWithStatement(ast, context);
case 159 /* TryStatement */:
return this.resolveTryStatement(ast, context);
case 236 /* CatchClause */:
return this.resolveCatchClause(ast, context);
case 237 /* FinallyClause */:
return this.resolveFinallyClause(ast, context);
case 150 /* ReturnStatement */:
return this.resolveReturnStatement(ast, context);
case 151 /* SwitchStatement */:
return this.resolveSwitchStatement(ast, context);
case 153 /* ContinueStatement */:
return this.resolveContinueStatement(ast, context);
case 152 /* BreakStatement */:
return this.resolveBreakStatement(ast, context);
case 160 /* LabeledStatement */:
return this.resolveLabeledStatement(ast, context);
}
return this.semanticInfoChain.anyTypeSymbol;
};
PullTypeResolver.prototype.resolveExpressionAST = function (ast, isContextuallyOrInferentiallyTyped, context) {
var expressionSymbol = this.resolveExpressionWorker(ast, isContextuallyOrInferentiallyTyped, context);
if (isContextuallyOrInferentiallyTyped && context.isInferentiallyTyping()) {
return this.alterPotentialGenericFunctionTypeToInstantiatedFunctionTypeForTypeArgumentInference(expressionSymbol, context);
} else {
return expressionSymbol;
}
};
PullTypeResolver.prototype.resolveExpressionWorker = function (ast, isContextuallyTyped, context) {
switch (ast.kind()) {
case 215 /* ObjectLiteralExpression */:
return this.resolveObjectLiteralExpression(ast, isContextuallyTyped, context);
case 11 /* IdentifierName */:
return this.resolveNameExpression(ast, context);
case 212 /* MemberAccessExpression */:
return this.resolveMemberAccessExpression(ast, context);
case 222 /* FunctionExpression */:
return this.resolveFunctionExpression(ast, isContextuallyTyped, context);
case 219 /* SimpleArrowFunctionExpression */:
return this.resolveSimpleArrowFunctionExpression(ast, isContextuallyTyped, context);
case 218 /* ParenthesizedArrowFunctionExpression */:
return this.resolveParenthesizedArrowFunctionExpression(ast, isContextuallyTyped, context);
case 214 /* ArrayLiteralExpression */:
return this.resolveArrayLiteralExpression(ast, isContextuallyTyped, context);
case 35 /* ThisKeyword */:
return this.resolveThisExpression(ast, context);
case 50 /* SuperKeyword */:
return this.resolveSuperExpression(ast, context);
case 213 /* InvocationExpression */:
return this.resolveInvocationExpression(ast, context);
case 216 /* ObjectCreationExpression */:
return this.resolveObjectCreationExpression(ast, context);
case 220 /* CastExpression */:
return this.resolveCastExpression(ast, context);
case 13 /* NumericLiteral */:
return this.semanticInfoChain.numberTypeSymbol;
case 14 /* StringLiteral */:
return this.semanticInfoChain.stringTypeSymbol;
case 32 /* NullKeyword */:
return this.semanticInfoChain.nullTypeSymbol;
case 37 /* TrueKeyword */:
case 24 /* FalseKeyword */:
return this.semanticInfoChain.booleanTypeSymbol;
case 172 /* VoidExpression */:
return this.resolveVoidExpression(ast, context);
case 174 /* AssignmentExpression */:
return this.resolveAssignmentExpression(ast, context);
case 167 /* LogicalNotExpression */:
return this.resolveLogicalNotExpression(ast, context);
case 193 /* NotEqualsWithTypeConversionExpression */:
case 192 /* EqualsWithTypeConversionExpression */:
case 194 /* EqualsExpression */:
case 195 /* NotEqualsExpression */:
case 196 /* LessThanExpression */:
case 198 /* LessThanOrEqualExpression */:
case 199 /* GreaterThanOrEqualExpression */:
case 197 /* GreaterThanExpression */:
return this.resolveLogicalOperation(ast, context);
case 208 /* AddExpression */:
case 175 /* AddAssignmentExpression */:
return this.resolveBinaryAdditionOperation(ast, context);
case 164 /* PlusExpression */:
case 165 /* NegateExpression */:
case 166 /* BitwiseNotExpression */:
case 168 /* PreIncrementExpression */:
case 169 /* PreDecrementExpression */:
return this.resolveUnaryArithmeticOperation(ast, context);
case 210 /* PostIncrementExpression */:
case 211 /* PostDecrementExpression */:
return this.resolvePostfixUnaryExpression(ast, context);
case 209 /* SubtractExpression */:
case 205 /* MultiplyExpression */:
case 206 /* DivideExpression */:
case 207 /* ModuloExpression */:
case 189 /* BitwiseOrExpression */:
case 191 /* BitwiseAndExpression */:
case 202 /* LeftShiftExpression */:
case 203 /* SignedRightShiftExpression */:
case 204 /* UnsignedRightShiftExpression */:
case 190 /* BitwiseExclusiveOrExpression */:
case 181 /* ExclusiveOrAssignmentExpression */:
case 183 /* LeftShiftAssignmentExpression */:
case 184 /* SignedRightShiftAssignmentExpression */:
case 185 /* UnsignedRightShiftAssignmentExpression */:
case 176 /* SubtractAssignmentExpression */:
case 177 /* MultiplyAssignmentExpression */:
case 178 /* DivideAssignmentExpression */:
case 179 /* ModuloAssignmentExpression */:
case 182 /* OrAssignmentExpression */:
case 180 /* AndAssignmentExpression */:
return this.resolveBinaryArithmeticExpression(ast, context);
case 221 /* ElementAccessExpression */:
return this.resolveElementAccessExpression(ast, context);
case 187 /* LogicalOrExpression */:
return this.resolveLogicalOrExpression(ast, isContextuallyTyped, context);
case 188 /* LogicalAndExpression */:
return this.resolveLogicalAndExpression(ast, context);
case 171 /* TypeOfExpression */:
return this.resolveTypeOfExpression(ast, context);
case 170 /* DeleteExpression */:
return this.resolveDeleteExpression(ast, context);
case 186 /* ConditionalExpression */:
return this.resolveConditionalExpression(ast, isContextuallyTyped, context);
case 12 /* RegularExpressionLiteral */:
return this.resolveRegularExpressionLiteral();
case 217 /* ParenthesizedExpression */:
return this.resolveParenthesizedExpression(ast, context);
case 200 /* InstanceOfExpression */:
return this.resolveInstanceOfExpression(ast, context);
case 173 /* CommaExpression */:
return this.resolveCommaExpression(ast, context);
case 201 /* InExpression */:
return this.resolveInExpression(ast, context);
case 223 /* OmittedExpression */:
return this.semanticInfoChain.undefinedTypeSymbol;
}
TypeScript.Debug.fail("resolveExpressionASTWorker: Missing expression kind: " + TypeScript.SyntaxKind[ast.kind()]);
};
PullTypeResolver.prototype.typeCheckAST = function (ast, isContextuallyTyped, context) {
if (!this.canTypeCheckAST(ast, context)) {
return;
}
var nodeType = ast.kind();
switch (nodeType) {
case 120 /* SourceUnit */:
this.typeCheckSourceUnit(ast, context);
return;
case 132 /* EnumDeclaration */:
this.typeCheckEnumDeclaration(ast, context);
return;
case 130 /* ModuleDeclaration */:
this.typeCheckModuleDeclaration(ast, context);
return;
case 128 /* InterfaceDeclaration */:
this.typeCheckInterfaceDeclaration(ast, context);
return;
case 131 /* ClassDeclaration */:
this.typeCheckClassDeclaration(ast, context);
return;
case 243 /* EnumElement */:
this.typeCheckEnumElement(ast, context);
return;
case 136 /* MemberVariableDeclaration */:
this.typeCheckMemberVariableDeclaration(ast, context);
return;
case 225 /* VariableDeclarator */:
this.typeCheckVariableDeclarator(ast, context);
return;
case 141 /* PropertySignature */:
this.typeCheckPropertySignature(ast, context);
return;
case 242 /* Parameter */:
this.typeCheckParameter(ast, context);
return;
case 133 /* ImportDeclaration */:
this.typeCheckImportDeclaration(ast, context);
return;
case 215 /* ObjectLiteralExpression */:
this.resolveObjectLiteralExpression(ast, isContextuallyTyped, context);
return;
case 241 /* FunctionPropertyAssignment */:
this.typeCheckFunctionPropertyAssignment(ast, isContextuallyTyped, context);
return;
case 11 /* IdentifierName */:
if (isTypesOnlyLocation(ast)) {
this.resolveTypeNameExpression(ast, context);
} else {
this.resolveNameExpression(ast, context);
}
return;
case 212 /* MemberAccessExpression */:
this.resolveMemberAccessExpression(ast, context);
return;
case 121 /* QualifiedName */:
this.resolveQualifiedName(ast, context);
return;
case 222 /* FunctionExpression */:
this.typeCheckFunctionExpression(ast, isContextuallyTyped, context);
return;
case 137 /* ConstructorDeclaration */:
this.typeCheckConstructorDeclaration(ast, context);
return;
case 139 /* GetAccessor */:
case 140 /* SetAccessor */:
this.typeCheckAccessorDeclaration(ast, context);
return;
case 135 /* MemberFunctionDeclaration */:
this.typeCheckMemberFunctionDeclaration(ast, context);
return;
case 145 /* MethodSignature */:
this.typeCheckMethodSignature(ast, context);
return;
case 144 /* IndexSignature */:
this.typeCheckIndexSignature(ast, context);
break;
case 142 /* CallSignature */:
this.typeCheckCallSignature(ast, context);
return;
case 143 /* ConstructSignature */:
this.typeCheckConstructSignature(ast, context);
return;
case 129 /* FunctionDeclaration */: {
var funcDecl = ast;
this.typeCheckAnyFunctionDeclaration(funcDecl, TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */), funcDecl.identifier, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, context);
return;
}
case 219 /* SimpleArrowFunctionExpression */:
this.typeCheckSimpleArrowFunctionExpression(ast, isContextuallyTyped, context);
return;
case 218 /* ParenthesizedArrowFunctionExpression */:
this.typeCheckParenthesizedArrowFunctionExpression(ast, isContextuallyTyped, context);
return;
case 214 /* ArrayLiteralExpression */:
this.resolveArrayLiteralExpression(ast, isContextuallyTyped, context);
return;
case 213 /* InvocationExpression */:
this.typeCheckInvocationExpression(ast, context);
return;
case 216 /* ObjectCreationExpression */:
this.typeCheckObjectCreationExpression(ast, context);
return;
case 150 /* ReturnStatement */:
this.resolveReturnStatement(ast, context);
return;
default:
TypeScript.Debug.assert(false, "Failure nodeType: " + TypeScript.SyntaxKind[ast.kind()] + ". Implement typeCheck when symbol is set for the ast as part of resolution.");
}
};
PullTypeResolver.prototype.processPostTypeCheckWorkItems = function (context) {
while (this.postTypeCheckWorkitems.length) {
var ast = this.postTypeCheckWorkitems.pop();
this.postTypeCheck(ast, context);
}
};
PullTypeResolver.prototype.postTypeCheck = function (ast, context) {
var nodeType = ast.kind();
switch (nodeType) {
case 242 /* Parameter */:
case 225 /* VariableDeclarator */:
this.postTypeCheckVariableDeclaratorOrParameter(ast, context);
return;
case 131 /* ClassDeclaration */:
this.postTypeCheckClassDeclaration(ast, context);
return;
case 129 /* FunctionDeclaration */:
this.postTypeCheckFunctionDeclaration(ast, context);
return;
case 130 /* ModuleDeclaration */:
this.postTypeCheckModuleDeclaration(ast, context);
return;
case 132 /* EnumDeclaration */:
this.postTypeCheckEnumDeclaration(ast, context);
return;
case 133 /* ImportDeclaration */:
this.postTypeCheckImportDeclaration(ast, context);
return;
case 11 /* IdentifierName */:
this.postTypeCheckNameExpression(ast, context);
return;
default:
TypeScript.Debug.assert(false, "Implement postTypeCheck clause to handle the postTypeCheck work, nodeType: " + TypeScript.SyntaxKind[ast.kind()]);
}
};
PullTypeResolver.prototype.resolveRegularExpressionLiteral = function () {
if (this.cachedRegExpInterfaceType()) {
return this.cachedRegExpInterfaceType();
} else {
return this.semanticInfoChain.anyTypeSymbol;
}
};
PullTypeResolver.prototype.postTypeCheckNameExpression = function (nameAST, context) {
this.checkThisCaptureVariableCollides(nameAST, false, context);
};
PullTypeResolver.prototype.typeCheckNameExpression = function (nameAST, context) {
this.setTypeChecked(nameAST, context);
this.checkNameForCompilerGeneratedDeclarationCollision(nameAST, false, nameAST, context);
};
PullTypeResolver.prototype.resolveNameExpression = function (nameAST, context) {
var nameSymbol = this.getSymbolForAST(nameAST, context);
var foundCached = nameSymbol !== null;
if (!foundCached || this.canTypeCheckAST(nameAST, context)) {
if (this.canTypeCheckAST(nameAST, context)) {
this.typeCheckNameExpression(nameAST, context);
}
nameSymbol = this.computeNameExpression(nameAST, context);
}
this.resolveDeclaredSymbol(nameSymbol, context);
if (nameSymbol && (nameSymbol.type !== this.semanticInfoChain.anyTypeSymbol || nameSymbol.anyDeclHasFlag(16777216 /* IsAnnotatedWithAny */ | 1 /* Exported */))) {
this.setSymbolForAST(nameAST, nameSymbol, context);
}
return nameSymbol;
};
PullTypeResolver.prototype.isInEnumDecl = function (decl) {
if (decl.kind & 64 /* Enum */) {
return true;
}
var declPath = decl.getParentPath();
var disallowedKinds = 164 /* SomeContainer */ | 58728795 /* SomeType */;
for (var i = declPath.length - 1; i >= 0; i--) {
var decl = declPath[i];
if (decl.kind & 64 /* Enum */) {
return true;
}
if (decl.kind & disallowedKinds) {
return false;
}
}
return false;
};
PullTypeResolver.prototype.getSomeInnermostFunctionScopeDecl = function (declPath) {
for (var i = declPath.length - 1; i >= 0; i--) {
var decl = declPath[i];
if (decl.kind & 1032192 /* SomeFunction */) {
return decl;
}
}
return null;
};
PullTypeResolver.prototype.isFromFunctionScope = function (nameSymbol, functionScopeDecl) {
var _this = this;
return TypeScript.ArrayUtilities.any(nameSymbol.getDeclarations(), function (nameSymbolDecl) {
return _this.getSomeInnermostFunctionScopeDecl(nameSymbolDecl.getParentPath()) === functionScopeDecl;
});
};
PullTypeResolver.prototype.findConstructorDeclOfEnclosingType = function (decl) {
var current = decl;
while (current) {
if (TypeScript.hasFlag(current.kind, 4096 /* Property */)) {
var parentDecl = current.getParentDecl();
if (TypeScript.hasFlag(parentDecl.kind, 8 /* Class */)) {
return TypeScript.ArrayUtilities.lastOrDefault(parentDecl.getChildDecls(), function (decl) {
return TypeScript.hasFlag(decl.kind, 32768 /* ConstructorMethod */);
});
}
}
if (TypeScript.hasFlag(current.kind, 164 /* SomeContainer */)) {
return null;
}
current = current.getParentDecl();
}
return null;
};
PullTypeResolver.prototype.checkNameAsPartOfInitializerExpressionForInstanceMemberVariable = function (nameAST) {
var id = nameAST.valueText();
if (id.length === 0) {
return null;
}
var memberVariableDeclarationAST = TypeScript.ASTHelpers.getEnclosingMemberVariableDeclaration(nameAST);
if (memberVariableDeclarationAST) {
var memberVariableDecl = this.semanticInfoChain.getDeclForAST(memberVariableDeclarationAST);
if (!TypeScript.hasFlag(memberVariableDecl.flags, 16 /* Static */)) {
var constructorDecl = this.findConstructorDeclOfEnclosingType(memberVariableDecl);
if (constructorDecl) {
var childDecls = constructorDecl.searchChildDecls(id, 68147712 /* SomeValue */);
if (childDecls.length) {
var memberVariableSymbol = memberVariableDecl.getSymbol();
return this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor, [memberVariableSymbol.getScopedName(constructorDecl.getSymbol()), nameAST.text()]);
}
}
}
}
return null;
};
PullTypeResolver.prototype.computeNameExpression = function (nameAST, context) {
var id = nameAST.valueText();
if (id.length === 0) {
return this.semanticInfoChain.anyTypeSymbol;
}
var nameSymbol = null;
var enclosingDecl = this.getEnclosingDeclForAST(nameAST);
if (TypeScript.hasFlag(enclosingDecl.flags, 8388608 /* PropertyParameter */)) {
var valueDecl = enclosingDecl.getValueDecl();
if (valueDecl && TypeScript.hasFlag(valueDecl.kind, 2048 /* Parameter */)) {
enclosingDecl = valueDecl;
}
}
var diagnosticForInitializer = this.checkNameAsPartOfInitializerExpressionForInstanceMemberVariable(nameAST);
if (TypeScript.ASTHelpers.isDeclarationASTOrDeclarationNameAST(nameAST)) {
nameSymbol = this.semanticInfoChain.getDeclForAST(nameAST.parent).getSymbol();
}
var declPath = enclosingDecl.getParentPath();
if (!nameSymbol) {
var searchKind = 68147712 /* SomeValue */;
if (!this.isInEnumDecl(enclosingDecl)) {
searchKind = searchKind & ~(67108864 /* EnumMember */);
}
var nameSymbol = this.getSymbolFromDeclPath(id, declPath, searchKind);
}
if (id === "arguments") {
var functionScopeDecl = this.getSomeInnermostFunctionScopeDecl(declPath);
if (functionScopeDecl) {
if (!nameSymbol || !this.isFromFunctionScope(nameSymbol, functionScopeDecl)) {
nameSymbol = this.cachedFunctionArgumentsSymbol();
this.resolveDeclaredSymbol(this.cachedIArgumentsInterfaceType(), context);
}
}
}
if (!nameSymbol) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Could_not_find_symbol_0, [nameAST.text()]));
return this.getNewErrorTypeSymbol(id);
} else if (diagnosticForInitializer) {
context.postDiagnostic(diagnosticForInitializer);
return this.getNewErrorTypeSymbol(id);
}
var nameDeclaration = nameSymbol.getDeclarations()[0];
var nameParentDecl = nameDeclaration.getParentDecl();
if (nameParentDecl && (nameParentDecl.kind & 1032192 /* SomeFunction */) && (nameParentDecl.flags & 33554432 /* HasDefaultArgs */)) {
var enclosingFunctionAST = this.semanticInfoChain.getASTForDecl(nameParentDecl);
var currentParameterIndex = this.getCurrentParameterIndexForFunction(nameAST, enclosingFunctionAST);
var parameterList = TypeScript.ASTHelpers.getParameterList(enclosingFunctionAST);
if (currentParameterIndex >= 0) {
var matchingParameter;
if (parameterList) {
for (var i = 0; i <= currentParameterIndex; i++) {
var candidateParameter = parameterList.parameters.nonSeparatorAt(i);
if (candidateParameter && candidateParameter.identifier.valueText() === id) {
matchingParameter = candidateParameter;
break;
}
}
}
if (!matchingParameter) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it, [parameterList.parameters.nonSeparatorAt(currentParameterIndex).identifier.text(), nameAST.text()]));
return this.getNewErrorTypeSymbol(id);
} else if (matchingParameter === TypeScript.ASTHelpers.getEnclosingParameterForInitializer(nameAST)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Parameter_0_cannot_be_referenced_in_its_initializer, [parameterList.parameters.nonSeparatorAt(currentParameterIndex).identifier.text()]));
return this.getNewErrorTypeSymbol(id);
}
}
}
var aliasSymbol = null;
if (nameSymbol.isType() && nameSymbol.isAlias()) {
aliasSymbol = nameSymbol;
if (!this.inTypeQuery(nameAST)) {
aliasSymbol.setIsUsedAsValue();
}
this.resolveDeclaredSymbol(nameSymbol, context);
this.resolveDeclaredSymbol(aliasSymbol.assignedValue(), context);
this.resolveDeclaredSymbol(aliasSymbol.assignedContainer(), context);
var exportAssignmentSymbol = nameSymbol.getExportAssignedValueSymbol();
if (exportAssignmentSymbol) {
nameSymbol = exportAssignmentSymbol;
} else {
aliasSymbol = null;
}
}
if (aliasSymbol) {
this.semanticInfoChain.setAliasSymbolForAST(nameAST, aliasSymbol);
}
return nameSymbol;
};
PullTypeResolver.prototype.getCurrentParameterIndexForFunction = function (parameter, funcDecl) {
var parameterList = TypeScript.ASTHelpers.getParameterList(funcDecl);
if (parameterList) {
while (parameter && parameter.parent) {
if (parameter.parent.parent === parameterList) {
return parameterList.parameters.nonSeparatorIndexOf(parameter);
}
parameter = parameter.parent;
}
}
return -1;
};
PullTypeResolver.prototype.resolveMemberAccessExpression = function (dottedNameAST, context) {
return this.resolveDottedNameExpression(dottedNameAST, dottedNameAST.expression, dottedNameAST.name, context);
};
PullTypeResolver.prototype.resolveDottedNameExpression = function (dottedNameAST, expression, name, context) {
var symbol = this.getSymbolForAST(dottedNameAST, context);
var foundCached = symbol !== null;
if (!foundCached || this.canTypeCheckAST(dottedNameAST, context)) {
var canTypeCheckDottedNameAST = this.canTypeCheckAST(dottedNameAST, context);
if (canTypeCheckDottedNameAST) {
this.setTypeChecked(dottedNameAST, context);
}
symbol = this.computeDottedNameExpression(expression, name, context, canTypeCheckDottedNameAST);
}
this.resolveDeclaredSymbol(symbol, context);
if (symbol && (symbol.type !== this.semanticInfoChain.anyTypeSymbol || symbol.anyDeclHasFlag(16777216 /* IsAnnotatedWithAny */ | 1 /* Exported */))) {
this.setSymbolForAST(dottedNameAST, symbol, context);
this.setSymbolForAST(name, symbol, context);
}
return symbol;
};
PullTypeResolver.prototype.computeDottedNameExpression = function (expression, name, context, checkSuperPrivateAndStaticAccess) {
var rhsName = name.valueText();
if (rhsName.length === 0) {
return this.semanticInfoChain.anyTypeSymbol;
}
var lhs = this.resolveAST(expression, false, context);
return this.computeDottedNameExpressionFromLHS(lhs, expression, name, context, checkSuperPrivateAndStaticAccess);
};
PullTypeResolver.prototype.computeDottedNameExpressionFromLHS = function (lhs, expression, name, context, checkSuperPrivateAndStaticAccess) {
var rhsName = name.valueText();
if (rhsName.length === 0) {
return this.semanticInfoChain.anyTypeSymbol;
}
var lhsType = lhs.type;
if (lhs.isAlias()) {
var lhsAlias = lhs;
if (!this.inTypeQuery(expression)) {
lhsAlias.setIsUsedAsValue();
}
lhsType = lhsAlias.getExportAssignedTypeSymbol();
}
if (lhsType.isAlias()) {
lhsType = lhsType.getExportAssignedTypeSymbol();
}
if (!lhsType) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, TypeScript.DiagnosticCode.Could_not_find_enclosing_symbol_for_dotted_name_0, [name.text()]));
return this.getNewErrorTypeSymbol();
}
if (!lhsType.isResolved) {
var potentiallySpecializedType = this.resolveDeclaredSymbol(lhsType, context);
if (potentiallySpecializedType !== lhsType) {
if (!lhs.isType()) {
context.setTypeInContext(lhs, potentiallySpecializedType);
}
lhsType = potentiallySpecializedType;
}
}
if (lhsType.isContainer() && !lhsType.isAlias() && !lhsType.isEnum()) {
var instanceSymbol = lhsType.getInstanceSymbol();
if (instanceSymbol) {
lhsType = instanceSymbol.type;
}
}
var originalLhsTypeForErrorReporting = lhsType;
lhsType = this.getApparentType(lhsType).widenedType(this, expression, context);
if (this.isAnyOrEquivalent(lhsType)) {
return lhsType;
}
var nameSymbol = this._getNamedPropertySymbolOfAugmentedType(rhsName, lhsType);
if (!nameSymbol) {
if (lhsType.kind === 32 /* DynamicModule */) {
var container = lhsType;
var associatedInstance = container.getInstanceSymbol();
if (associatedInstance) {
var instanceType = associatedInstance.type;
nameSymbol = this.getNamedPropertySymbol(rhsName, 68147712 /* SomeValue */, instanceType);
}
} else {
var associatedType = lhsType.getAssociatedContainerType();
if (associatedType && !associatedType.isClass()) {
nameSymbol = this.getNamedPropertySymbol(rhsName, 68147712 /* SomeValue */, associatedType);
}
}
if (!nameSymbol) {
var enclosingDecl = this.getEnclosingDeclForAST(expression);
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, TypeScript.DiagnosticCode.The_property_0_does_not_exist_on_value_of_type_1, [name.text(), originalLhsTypeForErrorReporting.toString(enclosingDecl ? enclosingDecl.getSymbol() : null)]));
return this.getNewErrorTypeSymbol(rhsName);
}
}
if (checkSuperPrivateAndStaticAccess) {
this.checkForSuperMemberAccess(expression, name, nameSymbol, context) || this.checkForPrivateMemberAccess(name, lhsType, nameSymbol, context);
}
return nameSymbol;
};
PullTypeResolver.prototype.resolveTypeNameExpression = function (nameAST, context) {
var typeNameSymbol = this.getSymbolForAST(nameAST, context);
if (!typeNameSymbol || !typeNameSymbol.isType() || this.canTypeCheckAST(nameAST, context)) {
if (this.canTypeCheckAST(nameAST, context)) {
this.setTypeChecked(nameAST, context);
}
typeNameSymbol = this.computeTypeNameExpression(nameAST, context);
this.setSymbolForAST(nameAST, typeNameSymbol, context);
}
this.resolveDeclaredSymbol(typeNameSymbol, context);
return typeNameSymbol;
};
PullTypeResolver.prototype.computeTypeNameExpression = function (nameAST, context) {
var id = nameAST.valueText();
if (id.length === 0) {
return this.semanticInfoChain.anyTypeSymbol;
}
var enclosingDecl = this.getEnclosingDeclForAST(nameAST);
var declPath = enclosingDecl.getParentPath();
var onLeftOfDot = this.isLeftSideOfQualifiedName(nameAST);
var kindToCheckFirst = onLeftOfDot ? 164 /* SomeContainer */ : 58728795 /* SomeType */;
var kindToCheckSecond = onLeftOfDot ? 58728795 /* SomeType */ : 164 /* SomeContainer */;
var typeNameSymbol = this.getSymbolFromDeclPath(id, declPath, kindToCheckFirst);
if (!typeNameSymbol) {
typeNameSymbol = this.getSymbolFromDeclPath(id, declPath, kindToCheckSecond);
}
if (!typeNameSymbol) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Could_not_find_symbol_0, [nameAST.text()]));
return this.getNewErrorTypeSymbol(id);
}
var typeNameSymbolAlias = null;
if (typeNameSymbol.isAlias()) {
typeNameSymbolAlias = typeNameSymbol;
this.resolveDeclaredSymbol(typeNameSymbol, context);
var aliasedType = typeNameSymbolAlias.getExportAssignedTypeSymbol();
this.resolveDeclaredSymbol(aliasedType, context);
}
if (typeNameSymbol.isTypeParameter()) {
if (this.isInStaticMemberContext(enclosingDecl)) {
var parentDecl = typeNameSymbol.getDeclarations()[0].getParentDecl();
if (parentDecl.kind === 8 /* Class */) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Static_members_cannot_reference_class_type_parameters));
return this.getNewErrorTypeSymbol();
}
}
}
if (!typeNameSymbol.isGeneric() && (typeNameSymbol.isClass() || typeNameSymbol.isInterface())) {
typeNameSymbol = TypeScript.PullTypeReferenceSymbol.createTypeReference(typeNameSymbol);
}
return typeNameSymbol;
};
PullTypeResolver.prototype.isInStaticMemberContext = function (decl) {
while (decl) {
if (TypeScript.hasFlag(decl.kind, 1032192 /* SomeFunction */ | 4096 /* Property */) && TypeScript.hasFlag(decl.flags, 16 /* Static */)) {
return true;
}
if (TypeScript.hasFlag(decl.kind, 164 /* SomeContainer */)) {
return false;
}
decl = decl.getParentDecl();
}
return false;
};
PullTypeResolver.prototype.isLeftSideOfQualifiedName = function (ast) {
return ast && ast.parent && ast.parent.kind() === 121 /* QualifiedName */ && ast.parent.left === ast;
};
PullTypeResolver.prototype.resolveGenericTypeReference = function (genericTypeAST, context) {
var genericTypeSymbol = this.resolveAST(genericTypeAST.name, false, context).type;
if (genericTypeSymbol.isError()) {
return genericTypeSymbol;
}
if (!genericTypeSymbol.inResolution && !genericTypeSymbol.isResolved) {
this.resolveDeclaredSymbol(genericTypeSymbol, context);
}
if (genericTypeSymbol.isAlias()) {
if (this.inClassExtendsHeritageClause(genericTypeAST) && !this.inTypeArgumentList(genericTypeAST)) {
genericTypeSymbol.setIsUsedAsValue();
}
genericTypeSymbol = genericTypeSymbol.getExportAssignedTypeSymbol();
}
var typeParameters = genericTypeSymbol.getTypeParameters();
if (typeParameters.length === 0) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(genericTypeAST, TypeScript.DiagnosticCode.Type_0_does_not_have_type_parameters, [genericTypeSymbol.toString()]));
return this.getNewErrorTypeSymbol();
}
var typeArgs = [];
if (genericTypeAST.typeArgumentList && genericTypeAST.typeArgumentList.typeArguments.nonSeparatorCount()) {
for (var i = 0; i < genericTypeAST.typeArgumentList.typeArguments.nonSeparatorCount(); i++) {
typeArgs[i] = this.resolveTypeReference(genericTypeAST.typeArgumentList.typeArguments.nonSeparatorAt(i), context);
if (typeArgs[i].isError()) {
typeArgs[i] = this.semanticInfoChain.anyTypeSymbol;
}
}
}
if (typeArgs.length && typeArgs.length !== typeParameters.length) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(genericTypeAST, TypeScript.DiagnosticCode.Generic_type_0_requires_1_type_argument_s, [genericTypeSymbol.toString(), genericTypeSymbol.getTypeParameters().length]));
return this.getNewErrorTypeSymbol();
}
if (!genericTypeSymbol.isResolved) {
var typeDecls = genericTypeSymbol.getDeclarations();
var childDecls = null;
for (var i = 0; i < typeDecls.length; i++) {
childDecls = typeDecls[i].getChildDecls();
for (var j = 0; j < childDecls.length; j++) {
childDecls[j].ensureSymbolIsBound();
}
}
}
var specializedSymbol = this.createInstantiatedType(genericTypeSymbol, typeArgs);
var typeConstraint = null;
var upperBound = null;
typeParameters = specializedSymbol.getTypeParameters();
var typeConstraintSubstitutionMap = [];
var typeArg = null;
var instantiatedSubstitutionMap = specializedSymbol.getTypeParameterArgumentMap();
for (var i = 0; i < typeParameters.length; i++) {
typeConstraintSubstitutionMap[typeParameters[i].pullSymbolID] = typeParameters[i];
}
for (var id in instantiatedSubstitutionMap) {
typeConstraintSubstitutionMap[id] = instantiatedSubstitutionMap[id];
}
for (var iArg = 0; (iArg < typeArgs.length) && (iArg < typeParameters.length); iArg++) {
typeArg = typeArgs[iArg];
typeConstraint = typeParameters[iArg].getConstraint();
typeConstraintSubstitutionMap[typeParameters[iArg].pullSymbolID] = typeArg;
if (typeConstraint) {
if (typeConstraint.isTypeParameter()) {
for (var j = 0; j < typeParameters.length && j < typeArgs.length; j++) {
if (typeParameters[j] === typeConstraint) {
typeConstraint = typeArgs[j];
}
}
} else if (typeConstraint.isGeneric()) {
typeConstraint = this.instantiateType(typeConstraint, typeConstraintSubstitutionMap);
}
if (typeArg.isTypeParameter()) {
upperBound = typeArg.getConstraint();
if (upperBound) {
typeArg = upperBound;
}
}
if (typeArg.inResolution || (typeArg.isTypeReference() && typeArg.referencedTypeSymbol.inResolution)) {
return specializedSymbol;
}
if (!this.sourceIsAssignableToTarget(typeArg, typeConstraint, genericTypeAST, context)) {
var enclosingSymbol = this.getEnclosingSymbolForAST(genericTypeAST);
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(genericTypeAST, TypeScript.DiagnosticCode.Type_0_does_not_satisfy_the_constraint_1_for_type_parameter_2, [typeArg.toString(enclosingSymbol, true), typeConstraint.toString(enclosingSymbol, true), typeParameters[iArg].toString(enclosingSymbol, true)]));
}
}
}
return specializedSymbol;
};
PullTypeResolver.prototype.resolveQualifiedName = function (dottedNameAST, context) {
if (this.inTypeQuery(dottedNameAST)) {
return this.resolveDottedNameExpression(dottedNameAST, dottedNameAST.left, dottedNameAST.right, context).type;
}
var symbol = this.getSymbolForAST(dottedNameAST, context);
if (!symbol || this.canTypeCheckAST(dottedNameAST, context)) {
var canTypeCheck = this.canTypeCheckAST(dottedNameAST, context);
if (canTypeCheck) {
this.setTypeChecked(dottedNameAST, context);
}
symbol = this.computeQualifiedName(dottedNameAST, context);
this.setSymbolForAST(dottedNameAST, symbol, context);
}
this.resolveDeclaredSymbol(symbol, context);
return symbol;
};
PullTypeResolver.prototype.isLastNameOfModuleNameModuleReference = function (ast) {
return ast.kind() === 11 /* IdentifierName */ && ast.parent && ast.parent.kind() === 121 /* QualifiedName */ && ast.parent.right === ast && ast.parent.parent && ast.parent.parent.kind() === 246 /* ModuleNameModuleReference */;
};
PullTypeResolver.prototype.computeQualifiedName = function (dottedNameAST, context) {
var rhsName = dottedNameAST.right.valueText();
if (rhsName.length === 0) {
return this.semanticInfoChain.anyTypeSymbol;
}
var enclosingDecl = this.getEnclosingDeclForAST(dottedNameAST);
var lhs = this.resolveAST(dottedNameAST.left, false, context);
var lhsType = lhs.isAlias() ? lhs.getExportAssignedContainerSymbol() : lhs.type;
if (this.inClassExtendsHeritageClause(dottedNameAST) && !this.inTypeArgumentList(dottedNameAST)) {
if (lhs.isAlias()) {
lhs.setIsUsedAsValue();
}
}
if (!lhsType) {
return this.getNewErrorTypeSymbol();
}
if (this.isAnyOrEquivalent(lhsType)) {
return lhsType;
}
var onLeftOfDot = this.isLeftSideOfQualifiedName(dottedNameAST);
var isNameOfModule = dottedNameAST.parent.kind() === 130 /* ModuleDeclaration */ && dottedNameAST.parent.name === dottedNameAST;
var memberKind = (onLeftOfDot || isNameOfModule) ? 164 /* SomeContainer */ : 58728795 /* SomeType */;
var childTypeSymbol = this.getNamedPropertySymbol(rhsName, memberKind, lhsType);
if (!childTypeSymbol && !isNameOfModule && this.isLastNameOfModuleNameModuleReference(dottedNameAST.right)) {
childTypeSymbol = this.getNamedPropertySymbol(rhsName, 68147712 /* SomeValue */, lhsType);
}
if (!childTypeSymbol && lhsType.isContainer()) {
var exportedContainer = lhsType.getExportAssignedContainerSymbol();
if (exportedContainer) {
childTypeSymbol = this.getNamedPropertySymbol(rhsName, memberKind, exportedContainer);
}
}
if (!childTypeSymbol && enclosingDecl) {
var parentDecl = enclosingDecl;
while (parentDecl) {
if (parentDecl.kind & 164 /* SomeContainer */) {
break;
}
parentDecl = parentDecl.getParentDecl();
}
if (parentDecl) {
var enclosingSymbolType = parentDecl.getSymbol().type;
if (enclosingSymbolType === lhsType) {
childTypeSymbol = this.getNamedPropertySymbol(rhsName, memberKind, lhsType);
}
}
}
if (!childTypeSymbol) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(dottedNameAST.right, TypeScript.DiagnosticCode.The_property_0_does_not_exist_on_value_of_type_1, [dottedNameAST.right.text(), lhsType.toString(enclosingDecl ? enclosingDecl.getSymbol() : null)]));
return this.getNewErrorTypeSymbol(rhsName);
}
return childTypeSymbol;
};
PullTypeResolver.prototype.shouldContextuallyTypeAnyFunctionExpression = function (functionExpressionAST, typeParameters, parameters, returnTypeAnnotation, context) {
if (typeParameters && typeParameters.typeParameters.nonSeparatorCount() > 0) {
return false;
}
if (returnTypeAnnotation) {
return false;
}
if (parameters) {
for (var i = 0, n = parameters.length; i < n; i++) {
if (parameters.typeAt(i)) {
return false;
}
}
}
var contextualFunctionTypeSymbol = context.getContextualType();
if (contextualFunctionTypeSymbol) {
this.resolveDeclaredSymbol(contextualFunctionTypeSymbol, context);
var callSignatures = contextualFunctionTypeSymbol.getCallSignatures();
var exactlyOneCallSignature = callSignatures && callSignatures.length === 1;
if (!exactlyOneCallSignature) {
return false;
}
var callSignatureIsGeneric = callSignatures[0].getTypeParameters().length > 0;
return !callSignatureIsGeneric;
}
return false;
};
PullTypeResolver.prototype.resolveAnyFunctionExpression = function (funcDeclAST, typeParameters, parameters, returnTypeAnnotation, block, bodyExpression, isContextuallyTyped, context) {
var funcDeclSymbol = null;
var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST);
TypeScript.Debug.assert(functionDecl);
if (functionDecl && functionDecl.hasSymbol()) {
funcDeclSymbol = functionDecl.getSymbol();
if (funcDeclSymbol.isResolved || funcDeclSymbol.inResolution) {
return funcDeclSymbol;
}
}
funcDeclSymbol = functionDecl.getSymbol();
TypeScript.Debug.assert(funcDeclSymbol);
var funcDeclType = funcDeclSymbol.type;
var signature = funcDeclType.getCallSignatures()[0];
funcDeclSymbol.startResolving();
if (typeParameters) {
for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) {
this.resolveTypeParameterDeclaration(typeParameters.typeParameters.nonSeparatorAt(i), context);
}
}
var assigningFunctionSignature = null;
if (isContextuallyTyped && this.shouldContextuallyTypeAnyFunctionExpression(funcDeclAST, typeParameters, parameters, returnTypeAnnotation, context)) {
assigningFunctionSignature = context.getContextualType().getCallSignatures()[0];
}
this.resolveAnyFunctionExpressionParameters(funcDeclAST, typeParameters, parameters, returnTypeAnnotation, isContextuallyTyped, context);
if (returnTypeAnnotation) {
signature.returnType = this.resolveTypeReference(returnTypeAnnotation, context);
} else {
if (assigningFunctionSignature) {
var returnType = assigningFunctionSignature.returnType;
if (returnType) {
context.propagateContextualType(returnType);
this.resolveFunctionBodyReturnTypes(funcDeclAST, block, bodyExpression, signature, true, functionDecl, context);
context.popAnyContextualType();
} else {
signature.returnType = this.semanticInfoChain.anyTypeSymbol;
if (this.compilationSettings.noImplicitAny()) {
var functionExpressionName = functionDecl.getFunctionExpressionName();
if (functionExpressionName != "") {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode._0_which_lacks_return_type_annotation_implicitly_has_an_any_return_type, [functionExpressionName]));
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_any_return_type));
}
}
}
} else {
this.resolveFunctionBodyReturnTypes(funcDeclAST, block, bodyExpression, signature, false, functionDecl, context);
}
}
context.setTypeInContext(funcDeclSymbol, funcDeclType);
funcDeclSymbol.setResolved();
if (this.canTypeCheckAST(funcDeclAST, context)) {
this.typeCheckAnyFunctionExpression(funcDeclAST, typeParameters, parameters, returnTypeAnnotation, block, bodyExpression, isContextuallyTyped, context);
}
return funcDeclSymbol;
};
PullTypeResolver.prototype.resolveAnyFunctionExpressionParameters = function (funcDeclAST, typeParameters, parameters, returnTypeAnnotation, isContextuallyTyped, context) {
if (!parameters) {
return;
}
var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST);
var contextParams = [];
var assigningFunctionSignature = null;
if (isContextuallyTyped && this.shouldContextuallyTypeAnyFunctionExpression(funcDeclAST, typeParameters, parameters, returnTypeAnnotation, context)) {
assigningFunctionSignature = context.getContextualType().getCallSignatures()[0];
}
if (assigningFunctionSignature) {
contextParams = assigningFunctionSignature.parameters;
}
var contextualParametersCount = contextParams.length;
for (var i = 0, n = parameters.length; i < n; i++) {
var actualParameterIsVarArgParameter = (i === (n - 1)) && parameters.lastParameterIsRest();
var correspondingContextualParameter = null;
var contextualParameterType = null;
if (i < contextualParametersCount) {
correspondingContextualParameter = contextParams[i];
} else if (contextualParametersCount && contextParams[contextualParametersCount - 1].isVarArg) {
correspondingContextualParameter = contextParams[contextualParametersCount - 1];
}
if (correspondingContextualParameter) {
if (correspondingContextualParameter.isVarArg === actualParameterIsVarArgParameter) {
contextualParameterType = correspondingContextualParameter.type;
} else if (correspondingContextualParameter.isVarArg) {
contextualParameterType = correspondingContextualParameter.type.getElementType();
}
}
this.resolveFunctionExpressionParameter(parameters.astAt(i), parameters.identifierAt(i), parameters.typeAt(i), parameters.initializerAt(i), contextualParameterType, functionDecl, context);
}
};
PullTypeResolver.prototype.typeCheckSimpleArrowFunctionExpression = function (arrowFunction, isContextuallyTyped, context) {
return this.typeCheckAnyFunctionExpression(arrowFunction, null, TypeScript.ASTHelpers.parametersFromIdentifier(arrowFunction.identifier), null, arrowFunction.block, arrowFunction.expression, isContextuallyTyped, context);
};
PullTypeResolver.prototype.typeCheckParenthesizedArrowFunctionExpression = function (arrowFunction, isContextuallyTyped, context) {
return this.typeCheckAnyFunctionExpression(arrowFunction, arrowFunction.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(arrowFunction.callSignature.parameterList), TypeScript.ASTHelpers.getType(arrowFunction), arrowFunction.block, arrowFunction.expression, isContextuallyTyped, context);
};
PullTypeResolver.prototype.typeCheckAnyFunctionExpression = function (funcDeclAST, typeParameters, parameters, returnTypeAnnotation, block, bodyExpression, isContextuallyTyped, context) {
var _this = this;
this.setTypeChecked(funcDeclAST, context);
var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST);
var funcDeclSymbol = functionDecl.getSymbol();
var funcDeclType = funcDeclSymbol.type;
var signature = funcDeclType.getCallSignatures()[0];
var returnTypeSymbol = signature.returnType;
if (typeParameters) {
for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) {
this.resolveTypeParameterDeclaration(typeParameters.typeParameters.nonSeparatorAt(i), context);
}
}
this.resolveAnyFunctionExpressionParameters(funcDeclAST, typeParameters, parameters, returnTypeAnnotation, isContextuallyTyped, context);
context.pushNewContextualType(null);
if (block) {
this.resolveAST(block, false, context);
} else {
var bodyExpressionType = this.resolveReturnExpression(bodyExpression, functionDecl, context);
this.typeCheckReturnExpression(bodyExpression, bodyExpressionType, functionDecl, context);
}
context.popAnyContextualType();
this.checkThatNonVoidFunctionHasReturnExpressionOrThrowStatement(functionDecl, returnTypeAnnotation, returnTypeSymbol, block, context);
this.validateVariableDeclarationGroups(functionDecl, context);
this.typeCheckCallBacks.push(function (context) {
_this.typeCheckFunctionOverloads(funcDeclAST, context);
});
};
PullTypeResolver.prototype.resolveThisExpression = function (thisExpression, context) {
var enclosingDecl = this.getEnclosingDeclForAST(thisExpression);
var thisTypeSymbol = this.getContextualClassSymbolForEnclosingDecl(thisExpression, enclosingDecl) || this.semanticInfoChain.anyTypeSymbol;
if (this.canTypeCheckAST(thisExpression, context)) {
this.typeCheckThisExpression(thisExpression, context, enclosingDecl);
}
return thisTypeSymbol;
};
PullTypeResolver.prototype.inTypeArgumentList = function (ast) {
var previous = null;
var current = ast;
while (current) {
switch (current.kind()) {
case 126 /* GenericType */:
var genericType = current;
if (genericType.typeArgumentList === previous) {
return true;
}
break;
case 226 /* ArgumentList */:
var argumentList = current;
return argumentList.typeArgumentList === previous;
}
previous = current;
current = current.parent;
}
return false;
};
PullTypeResolver.prototype.inClassExtendsHeritageClause = function (ast) {
while (ast) {
switch (ast.kind()) {
case 230 /* ExtendsHeritageClause */:
var heritageClause = ast;
return heritageClause.parent.parent.kind() === 131 /* ClassDeclaration */;
case 137 /* ConstructorDeclaration */:
case 131 /* ClassDeclaration */:
case 130 /* ModuleDeclaration */:
return false;
}
ast = ast.parent;
}
return false;
};
PullTypeResolver.prototype.inTypeQuery = function (ast) {
while (ast) {
switch (ast.kind()) {
case 127 /* TypeQuery */:
return true;
case 129 /* FunctionDeclaration */:
case 213 /* InvocationExpression */:
case 137 /* ConstructorDeclaration */:
case 131 /* ClassDeclaration */:
case 130 /* ModuleDeclaration */:
return false;
}
ast = ast.parent;
}
return false;
};
PullTypeResolver.prototype.inArgumentListOfSuperInvocation = function (ast) {
var previous = null;
var current = ast;
while (current) {
switch (current.kind()) {
case 213 /* InvocationExpression */:
var invocationExpression = current;
if (previous === invocationExpression.argumentList && invocationExpression.expression.kind() === 50 /* SuperKeyword */) {
return true;
}
break;
case 137 /* ConstructorDeclaration */:
case 131 /* ClassDeclaration */:
case 130 /* ModuleDeclaration */:
return false;
}
previous = current;
current = current.parent;
}
return false;
};
PullTypeResolver.prototype.inConstructorParameterList = function (ast) {
var previous = null;
var current = ast;
while (current) {
switch (current.kind()) {
case 142 /* CallSignature */:
var callSignature = current;
if (previous === callSignature.parameterList && callSignature.parent.kind() === 137 /* ConstructorDeclaration */) {
return true;
}
case 131 /* ClassDeclaration */:
case 130 /* ModuleDeclaration */:
return false;
}
previous = current;
current = current.parent;
}
return false;
};
PullTypeResolver.prototype.isFunctionAccessorOrNonArrowFunctionExpression = function (decl) {
if (decl.kind === 262144 /* GetAccessor */ || decl.kind === 524288 /* SetAccessor */) {
return true;
}
return this.isFunctionOrNonArrowFunctionExpression(decl);
};
PullTypeResolver.prototype.isFunctionOrNonArrowFunctionExpression = function (decl) {
if (decl.kind === 16384 /* Function */) {
return true;
} else if (decl.kind === 131072 /* FunctionExpression */ && !TypeScript.hasFlag(decl.flags, 8192 /* ArrowFunction */)) {
return true;
}
return false;
};
PullTypeResolver.prototype.typeCheckThisExpression = function (thisExpression, context, enclosingDecl) {
this.checkForThisCaptureInArrowFunction(thisExpression);
if (this.inConstructorParameterList(thisExpression)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(thisExpression, TypeScript.DiagnosticCode.this_cannot_be_referenced_in_constructor_arguments));
return;
}
for (var currentDecl = enclosingDecl; currentDecl !== null; currentDecl = currentDecl.getParentDecl()) {
if (this.isFunctionAccessorOrNonArrowFunctionExpression(currentDecl)) {
return;
} else if (currentDecl.kind === 4 /* Container */ || currentDecl.kind === 32 /* DynamicModule */) {
if (currentDecl.getParentDecl() === null) {
return;
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(thisExpression, TypeScript.DiagnosticCode.this_cannot_be_referenced_within_module_bodies));
return;
}
} else if (currentDecl.kind === 64 /* Enum */) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(thisExpression, TypeScript.DiagnosticCode.this_cannot_be_referenced_in_current_location));
return;
} else if (currentDecl.kind === 32768 /* ConstructorMethod */) {
if (this.inArgumentListOfSuperInvocation(thisExpression) && this.superCallMustBeFirstStatementInConstructor(currentDecl)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(thisExpression, TypeScript.DiagnosticCode.this_cannot_be_referenced_in_current_location));
}
return;
} else if (currentDecl.kind === 8 /* Class */) {
if (this.inStaticMemberVariableDeclaration(thisExpression)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(thisExpression, TypeScript.DiagnosticCode.this_cannot_be_referenced_in_static_initializers_in_a_class_body));
}
return;
}
}
};
PullTypeResolver.prototype.getContextualClassSymbolForEnclosingDecl = function (ast, enclosingDecl) {
var declPath = enclosingDecl.getParentPath();
if (declPath.length) {
var isStaticContext = false;
for (var i = declPath.length - 1; i >= 0; i--) {
var decl = declPath[i];
var declKind = decl.kind;
var declFlags = decl.flags;
if (declFlags & 16 /* Static */) {
isStaticContext = true;
} else if (declKind === 131072 /* FunctionExpression */ && !TypeScript.hasFlag(declFlags, 8192 /* ArrowFunction */)) {
return null;
} else if (declKind === 16384 /* Function */) {
return null;
} else if (declKind === 8 /* Class */) {
if (this.inStaticMemberVariableDeclaration(ast)) {
return this.getNewErrorTypeSymbol();
} else {
var classSymbol = decl.getSymbol();
if (isStaticContext) {
var constructorSymbol = classSymbol.getConstructorMethod();
return constructorSymbol.type;
} else {
return classSymbol;
}
}
}
}
}
return null;
};
PullTypeResolver.prototype.inStaticMemberVariableDeclaration = function (ast) {
while (ast) {
if (ast.kind() === 136 /* MemberVariableDeclaration */ && TypeScript.hasModifier(ast.modifiers, 16 /* Static */)) {
return true;
}
ast = ast.parent;
}
return false;
};
PullTypeResolver.prototype.resolveSuperExpression = function (ast, context) {
var enclosingDecl = this.getEnclosingDeclForAST(ast);
var superType = this.semanticInfoChain.anyTypeSymbol;
var classSymbol = this.getContextualClassSymbolForEnclosingDecl(ast, enclosingDecl);
if (classSymbol) {
this.resolveDeclaredSymbol(classSymbol, context);
var parents = classSymbol.getExtendedTypes();
if (parents.length) {
superType = parents[0];
}
}
if (this.canTypeCheckAST(ast, context)) {
this.typeCheckSuperExpression(ast, context, enclosingDecl);
}
return superType;
};
PullTypeResolver.prototype.typeCheckSuperExpression = function (ast, context, enclosingDecl) {
this.setTypeChecked(ast, context);
this.checkForThisCaptureInArrowFunction(ast);
var isSuperCall = ast.parent.kind() === 213 /* InvocationExpression */;
var isSuperPropertyAccess = ast.parent.kind() === 212 /* MemberAccessExpression */;
TypeScript.Debug.assert(isSuperCall || isSuperPropertyAccess);
if (isSuperPropertyAccess) {
for (var currentDecl = enclosingDecl; currentDecl !== null; currentDecl = currentDecl.getParentDecl()) {
if (this.isFunctionOrNonArrowFunctionExpression(currentDecl)) {
break;
} else if (currentDecl.kind === 8 /* Class */) {
if (!this.enclosingClassIsDerived(currentDecl)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.super_cannot_be_referenced_in_non_derived_classes));
return;
} else if (this.inConstructorParameterList(ast)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.super_cannot_be_referenced_in_constructor_arguments));
return;
} else if (this.inStaticMemberVariableDeclaration(ast)) {
break;
}
return;
}
}
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class));
return;
} else {
if (enclosingDecl.kind === 32768 /* ConstructorMethod */) {
var classDecl = enclosingDecl.getParentDecl();
if (!this.enclosingClassIsDerived(classDecl)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.super_cannot_be_referenced_in_non_derived_classes));
return;
} else if (this.inConstructorParameterList(ast)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.super_cannot_be_referenced_in_constructor_arguments));
return;
}
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors));
}
}
};
PullTypeResolver.prototype.resolveSimplePropertyAssignment = function (propertyAssignment, isContextuallyTyped, context) {
return this.resolveAST(propertyAssignment.expression, isContextuallyTyped, context);
};
PullTypeResolver.prototype.resolveFunctionPropertyAssignment = function (funcProp, isContextuallyTyped, context) {
return this.resolveAnyFunctionExpression(funcProp, funcProp.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(funcProp.callSignature.parameterList), TypeScript.ASTHelpers.getType(funcProp), funcProp.block, null, isContextuallyTyped, context);
};
PullTypeResolver.prototype.typeCheckFunctionPropertyAssignment = function (funcProp, isContextuallyTyped, context) {
this.typeCheckAnyFunctionExpression(funcProp, funcProp.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(funcProp.callSignature.parameterList), TypeScript.ASTHelpers.getType(funcProp), funcProp.block, null, isContextuallyTyped, context);
};
PullTypeResolver.prototype.resolveObjectLiteralExpression = function (expressionAST, isContextuallyTyped, context, additionalResults) {
var symbol = this.getSymbolForAST(expressionAST, context);
var hasResolvedSymbol = symbol && symbol.isResolved;
if (!hasResolvedSymbol || additionalResults || this.canTypeCheckAST(expressionAST, context)) {
if (this.canTypeCheckAST(expressionAST, context)) {
this.setTypeChecked(expressionAST, context);
}
symbol = this.computeObjectLiteralExpression(expressionAST, isContextuallyTyped, context, additionalResults);
this.setSymbolForAST(expressionAST, symbol, context);
}
return symbol;
};
PullTypeResolver.prototype.bindObjectLiteralMembers = function (objectLiteralDeclaration, objectLiteralTypeSymbol, objectLiteralMembers, isUsingExistingSymbol, pullTypeContext) {
var boundMemberSymbols = [];
var memberSymbol;
for (var i = 0, len = objectLiteralMembers.nonSeparatorCount(); i < len; i++) {
var propertyAssignment = objectLiteralMembers.nonSeparatorAt(i);
var id = this.getPropertyAssignmentName(propertyAssignment);
var assignmentText = getPropertyAssignmentNameTextFromIdentifier(id);
var isAccessor = propertyAssignment.kind() === 139 /* GetAccessor */ || propertyAssignment.kind() === 140 /* SetAccessor */;
var decl = this.semanticInfoChain.getDeclForAST(propertyAssignment);
TypeScript.Debug.assert(decl);
if (propertyAssignment.kind() === 240 /* SimplePropertyAssignment */) {
if (!isUsingExistingSymbol) {
memberSymbol = new TypeScript.PullSymbol(assignmentText.memberName, 4096 /* Property */);
memberSymbol.addDeclaration(decl);
decl.setSymbol(memberSymbol);
} else {
memberSymbol = decl.getSymbol();
}
} else if (propertyAssignment.kind() === 241 /* FunctionPropertyAssignment */) {
memberSymbol = decl.getSymbol();
} else {
TypeScript.Debug.assert(isAccessor);
memberSymbol = decl.getSymbol();
}
if (!isUsingExistingSymbol && !isAccessor) {
var existingMember = objectLiteralTypeSymbol.findMember(memberSymbol.name, true);
if (existingMember) {
pullTypeContext.postDiagnostic(this.semanticInfoChain.duplicateIdentifierDiagnosticFromAST(propertyAssignment, assignmentText.actualText, existingMember.getDeclarations()[0].ast()));
}
objectLiteralTypeSymbol.addMember(memberSymbol);
}
boundMemberSymbols.push(memberSymbol);
}
return boundMemberSymbols;
};
PullTypeResolver.prototype.resolveObjectLiteralMembers = function (objectLiteralDeclaration, objectLiteralTypeSymbol, objectLiteralContextualType, objectLiteralMembers, stringIndexerSignature, numericIndexerSignature, allMemberTypes, allNumericMemberTypes, boundMemberSymbols, isUsingExistingSymbol, pullTypeContext, additionalResults) {
for (var i = 0, len = objectLiteralMembers.nonSeparatorCount(); i < len; i++) {
var propertyAssignment = objectLiteralMembers.nonSeparatorAt(i);
var acceptedContextualType = false;
var assigningSymbol = null;
var id = this.getPropertyAssignmentName(propertyAssignment);
var memberSymbol = boundMemberSymbols[i];
var contextualMemberType = null;
if (objectLiteralContextualType) {
assigningSymbol = this.getNamedPropertySymbol(memberSymbol.name, 68147712 /* SomeValue */, objectLiteralContextualType);
if (!assigningSymbol) {
if (numericIndexerSignature && TypeScript.PullHelpers.isNameNumeric(memberSymbol.name)) {
assigningSymbol = numericIndexerSignature;
} else if (stringIndexerSignature) {
assigningSymbol = stringIndexerSignature;
}
}
if (assigningSymbol) {
this.resolveDeclaredSymbol(assigningSymbol, pullTypeContext);
contextualMemberType = assigningSymbol.kind === 4194304 /* IndexSignature */ ? assigningSymbol.returnType : assigningSymbol.type;
pullTypeContext.propagateContextualType(contextualMemberType);
acceptedContextualType = true;
if (additionalResults) {
additionalResults.membersContextTypeSymbols[i] = contextualMemberType;
}
}
}
var memberSymbolType = this.resolveAST(propertyAssignment, contextualMemberType !== null, pullTypeContext).type;
if (memberSymbolType) {
if (memberSymbolType.isGeneric()) {
objectLiteralTypeSymbol.setHasGenericMember();
}
if (stringIndexerSignature) {
allMemberTypes.push(memberSymbolType);
}
if (numericIndexerSignature && TypeScript.PullHelpers.isNameNumeric(memberSymbol.name)) {
allNumericMemberTypes.push(memberSymbolType);
}
}
if (acceptedContextualType) {
pullTypeContext.popAnyContextualType();
}
var isAccessor = propertyAssignment.kind() === 140 /* SetAccessor */ || propertyAssignment.kind() === 139 /* GetAccessor */;
if (!memberSymbol.isResolved) {
if (isAccessor) {
this.setSymbolForAST(id, memberSymbolType, pullTypeContext);
} else {
pullTypeContext.setTypeInContext(memberSymbol, memberSymbolType);
memberSymbol.setResolved();
this.setSymbolForAST(id, memberSymbol, pullTypeContext);
}
}
}
};
PullTypeResolver.prototype.computeObjectLiteralExpression = function (objectLitAST, isContextuallyTyped, context, additionalResults) {
var objectLitDecl = this.semanticInfoChain.getDeclForAST(objectLitAST);
TypeScript.Debug.assert(objectLitDecl);
var typeSymbol = this.getSymbolForAST(objectLitAST, context);
var isUsingExistingSymbol = !!typeSymbol;
if (!typeSymbol) {
typeSymbol = new TypeScript.PullTypeSymbol("", 256 /* ObjectLiteral */);
typeSymbol.addDeclaration(objectLitDecl);
this.setSymbolForAST(objectLitAST, typeSymbol, context);
objectLitDecl.setSymbol(typeSymbol);
}
var propertyAssignments = objectLitAST.propertyAssignments;
var contextualType = null;
if (isContextuallyTyped) {
contextualType = context.getContextualType();
this.resolveDeclaredSymbol(contextualType, context);
}
var stringIndexerSignature = null;
var numericIndexerSignature = null;
var allMemberTypes = null;
var allNumericMemberTypes = null;
if (contextualType) {
var indexSignatures = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(contextualType, context);
stringIndexerSignature = indexSignatures.stringSignature;
numericIndexerSignature = indexSignatures.numericSignature;
var inInferentialTyping = context.isInferentiallyTyping();
if (stringIndexerSignature) {
allMemberTypes = inInferentialTyping ? [] : [stringIndexerSignature.returnType];
}
if (numericIndexerSignature) {
allNumericMemberTypes = inInferentialTyping ? [] : [numericIndexerSignature.returnType];
}
}
if (propertyAssignments) {
if (additionalResults) {
additionalResults.membersContextTypeSymbols = [];
}
var boundMemberSymbols = this.bindObjectLiteralMembers(objectLitDecl, typeSymbol, propertyAssignments, isUsingExistingSymbol, context);
this.resolveObjectLiteralMembers(objectLitDecl, typeSymbol, contextualType, propertyAssignments, stringIndexerSignature, numericIndexerSignature, allMemberTypes, allNumericMemberTypes, boundMemberSymbols, isUsingExistingSymbol, context, additionalResults);
if (!isUsingExistingSymbol) {
this.stampObjectLiteralWithIndexSignature(typeSymbol, allMemberTypes, stringIndexerSignature, context);
this.stampObjectLiteralWithIndexSignature(typeSymbol, allNumericMemberTypes, numericIndexerSignature, context);
}
}
typeSymbol.setResolved();
return typeSymbol;
};
PullTypeResolver.prototype.getPropertyAssignmentName = function (propertyAssignment) {
if (propertyAssignment.kind() === 240 /* SimplePropertyAssignment */) {
return propertyAssignment.propertyName;
} else if (propertyAssignment.kind() === 241 /* FunctionPropertyAssignment */) {
return propertyAssignment.propertyName;
} else if (propertyAssignment.kind() === 139 /* GetAccessor */) {
return propertyAssignment.propertyName;
} else if (propertyAssignment.kind() === 140 /* SetAccessor */) {
return propertyAssignment.propertyName;
} else {
TypeScript.Debug.assert(false);
}
};
PullTypeResolver.prototype.stampObjectLiteralWithIndexSignature = function (objectLiteralSymbol, indexerTypeCandidates, contextualIndexSignature, context) {
if (contextualIndexSignature) {
var typeCollection = {
getLength: function () {
return indexerTypeCandidates.length;
},
getTypeAtIndex: function (index) {
return indexerTypeCandidates[index];
}
};
var decl = objectLiteralSymbol.getDeclarations()[0];
var indexerReturnType = this.findBestCommonType(typeCollection, context).widenedType(this, null, context);
if (indexerReturnType === contextualIndexSignature.returnType) {
objectLiteralSymbol.addIndexSignature(contextualIndexSignature);
} else {
this.semanticInfoChain.addSyntheticIndexSignature(decl, objectLiteralSymbol, this.getASTForDecl(decl), contextualIndexSignature.parameters[0].name, contextualIndexSignature.parameters[0].type, indexerReturnType);
}
}
};
PullTypeResolver.prototype.resolveArrayLiteralExpression = function (arrayLit, isContextuallyTyped, context) {
var symbol = this.getSymbolForAST(arrayLit, context);
if (!symbol || this.canTypeCheckAST(arrayLit, context)) {
if (this.canTypeCheckAST(arrayLit, context)) {
this.setTypeChecked(arrayLit, context);
}
symbol = this.computeArrayLiteralExpressionSymbol(arrayLit, isContextuallyTyped, context);
this.setSymbolForAST(arrayLit, symbol, context);
}
return symbol;
};
PullTypeResolver.prototype.computeArrayLiteralExpressionSymbol = function (arrayLit, isContextuallyTyped, context) {
var elements = arrayLit.expressions;
var elementType = null;
var elementTypes = [];
var comparisonInfo = new TypeComparisonInfo();
var contextualElementType = null;
comparisonInfo.onlyCaptureFirstError = true;
if (isContextuallyTyped) {
var contextualType = context.getContextualType();
this.resolveDeclaredSymbol(contextualType, context);
if (contextualType) {
var indexSignatures = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(contextualType, context);
if (indexSignatures.numericSignature) {
contextualElementType = indexSignatures.numericSignature.returnType;
}
}
}
if (elements) {
if (contextualElementType) {
context.propagateContextualType(contextualElementType);
}
for (var i = 0, n = elements.nonSeparatorCount(); i < n; i++) {
elementTypes.push(this.resolveAST(elements.nonSeparatorAt(i), contextualElementType !== null, context).type);
}
if (contextualElementType) {
context.popAnyContextualType();
}
}
if (elementTypes.length) {
elementType = elementTypes[0];
}
var collection;
if (contextualElementType && !context.isInferentiallyTyping()) {
if (!elementType) {
elementType = contextualElementType;
}
collection = {
getLength: function () {
return elements.nonSeparatorCount() + 1;
},
getTypeAtIndex: function (index) {
return index === 0 ? contextualElementType : elementTypes[index - 1];
}
};
} else {
collection = {
getLength: function () {
return elements.nonSeparatorCount();
},
getTypeAtIndex: function (index) {
return elementTypes[index];
}
};
}
elementType = elementType ? this.findBestCommonType(collection, context, comparisonInfo) : elementType;
if (!elementType) {
elementType = this.semanticInfoChain.undefinedTypeSymbol;
}
return this.getArrayType(elementType);
};
PullTypeResolver.prototype.resolveElementAccessExpression = function (callEx, context) {
var symbolAndDiagnostic = this.computeElementAccessExpressionSymbolAndDiagnostic(callEx, context);
if (this.canTypeCheckAST(callEx, context)) {
this.typeCheckElementAccessExpression(callEx, context, symbolAndDiagnostic);
}
return symbolAndDiagnostic.symbol;
};
PullTypeResolver.prototype.typeCheckElementAccessExpression = function (callEx, context, symbolAndDiagnostic) {
this.setTypeChecked(callEx, context);
context.postDiagnostic(symbolAndDiagnostic.diagnostic);
};
PullTypeResolver.prototype.computeElementAccessExpressionSymbolAndDiagnostic = function (callEx, context) {
var targetSymbol = this.resolveAST(callEx.expression, false, context);
var indexType = this.resolveAST(callEx.argumentExpression, false, context).type;
var targetTypeSymbol = targetSymbol.type;
targetTypeSymbol = this.getApparentType(targetTypeSymbol);
if (this.isAnyOrEquivalent(targetTypeSymbol)) {
return { symbol: targetTypeSymbol };
}
var elementType = targetTypeSymbol.getElementType();
var isNumberIndex = indexType === this.semanticInfoChain.numberTypeSymbol || TypeScript.PullHelpers.symbolIsEnum(indexType);
if (elementType && isNumberIndex) {
return { symbol: elementType };
}
if (callEx.argumentExpression.kind() === 14 /* StringLiteral */ || callEx.argumentExpression.kind() === 13 /* NumericLiteral */) {
var memberName = callEx.argumentExpression.kind() === 14 /* StringLiteral */ ? TypeScript.stripStartAndEndQuotes(callEx.argumentExpression.text()) : callEx.argumentExpression.valueText();
var member = this._getNamedPropertySymbolOfAugmentedType(memberName, targetTypeSymbol);
if (member) {
this.resolveDeclaredSymbol(member, context);
return { symbol: member.type };
}
}
var signatures = this.getBothKindsOfIndexSignaturesIncludingAugmentedType(targetTypeSymbol, context);
var stringSignature = signatures.stringSignature;
var numberSignature = signatures.numericSignature;
if (numberSignature && (isNumberIndex || indexType === this.semanticInfoChain.anyTypeSymbol)) {
return { symbol: numberSignature.returnType || this.semanticInfoChain.anyTypeSymbol };
} else if (stringSignature && (isNumberIndex || indexType === this.semanticInfoChain.anyTypeSymbol || indexType === this.semanticInfoChain.stringTypeSymbol)) {
return { symbol: stringSignature.returnType || this.semanticInfoChain.anyTypeSymbol };
} else if (isNumberIndex || indexType === this.semanticInfoChain.anyTypeSymbol || indexType === this.semanticInfoChain.stringTypeSymbol) {
if (this.compilationSettings.noImplicitAny()) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(callEx.argumentExpression, TypeScript.DiagnosticCode.Index_signature_of_object_type_implicitly_has_an_any_type));
}
return { symbol: this.semanticInfoChain.anyTypeSymbol };
} else {
return {
symbol: this.getNewErrorTypeSymbol(),
diagnostic: this.semanticInfoChain.diagnosticFromAST(callEx, TypeScript.DiagnosticCode.Value_of_type_0_is_not_indexable_by_type_1, [targetTypeSymbol.toString(), indexType.toString()])
};
}
};
PullTypeResolver.prototype.getBothKindsOfIndexSignaturesIncludingAugmentedType = function (enclosingType, context) {
return this._getBothKindsOfIndexSignatures(enclosingType, context, true);
};
PullTypeResolver.prototype.getBothKindsOfIndexSignaturesExcludingAugmentedType = function (enclosingType, context) {
return this._getBothKindsOfIndexSignatures(enclosingType, context, false);
};
PullTypeResolver.prototype._getBothKindsOfIndexSignatures = function (enclosingType, context, includeAugmentedType) {
var signatures = includeAugmentedType ? enclosingType.getIndexSignaturesOfAugmentedType(this, this.cachedFunctionInterfaceType(), this.cachedObjectInterfaceType()) : enclosingType.getIndexSignatures();
var stringSignature = null;
var numberSignature = null;
var signature = null;
var paramSymbols;
var paramType;
for (var i = 0; i < signatures.length; i++) {
if (stringSignature && numberSignature) {
break;
}
signature = signatures[i];
if (!signature.isResolved) {
this.resolveDeclaredSymbol(signature, context);
}
paramSymbols = signature.parameters;
if (paramSymbols.length) {
paramType = paramSymbols[0].type;
if (!stringSignature && paramType === this.semanticInfoChain.stringTypeSymbol) {
stringSignature = signature;
continue;
} else if (!numberSignature && paramType === this.semanticInfoChain.numberTypeSymbol) {
numberSignature = signature;
continue;
}
}
}
return {
numericSignature: numberSignature,
stringSignature: stringSignature
};
};
PullTypeResolver.prototype._addUnhiddenSignaturesFromBaseType = function (derivedTypeSignatures, baseTypeSignatures, signaturesBeingAggregated) {
var _this = this;
if (!derivedTypeSignatures) {
signaturesBeingAggregated.push.apply(signaturesBeingAggregated, baseTypeSignatures);
return;
}
var context = new TypeScript.PullTypeResolutionContext(this);
for (var i = 0; i < baseTypeSignatures.length; i++) {
var baseSignature = baseTypeSignatures[i];
var signatureIsHidden = TypeScript.ArrayUtilities.any(derivedTypeSignatures, function (sig) {
return _this.signaturesAreIdenticalWithNewEnclosingTypes(baseSignature, sig, context, false);
});
if (!signatureIsHidden) {
signaturesBeingAggregated.push(baseSignature);
}
}
};
PullTypeResolver.prototype.resolveBinaryAdditionOperation = function (binaryExpression, context) {
var lhsExpression = this.resolveAST(binaryExpression.left, false, context);
var lhsType = lhsExpression.type;
var rhsType = this.resolveAST(binaryExpression.right, false, context).type;
if (TypeScript.PullHelpers.symbolIsEnum(lhsType)) {
lhsType = this.semanticInfoChain.numberTypeSymbol;
}
if (TypeScript.PullHelpers.symbolIsEnum(rhsType)) {
rhsType = this.semanticInfoChain.numberTypeSymbol;
}
var isLhsTypeNullOrUndefined = lhsType === this.semanticInfoChain.nullTypeSymbol || lhsType === this.semanticInfoChain.undefinedTypeSymbol;
var isRhsTypeNullOrUndefined = rhsType === this.semanticInfoChain.nullTypeSymbol || rhsType === this.semanticInfoChain.undefinedTypeSymbol;
if (isLhsTypeNullOrUndefined) {
if (isRhsTypeNullOrUndefined) {
lhsType = rhsType = this.semanticInfoChain.anyTypeSymbol;
} else {
lhsType = rhsType;
}
} else if (isRhsTypeNullOrUndefined) {
rhsType = lhsType;
}
var exprType = null;
if (lhsType === this.semanticInfoChain.stringTypeSymbol || rhsType === this.semanticInfoChain.stringTypeSymbol) {
exprType = this.semanticInfoChain.stringTypeSymbol;
} else if (this.isAnyOrEquivalent(lhsType) || this.isAnyOrEquivalent(rhsType)) {
exprType = this.semanticInfoChain.anyTypeSymbol;
} else if (rhsType === this.semanticInfoChain.numberTypeSymbol && lhsType === this.semanticInfoChain.numberTypeSymbol) {
exprType = this.semanticInfoChain.numberTypeSymbol;
}
if (this.canTypeCheckAST(binaryExpression, context)) {
this.setTypeChecked(binaryExpression, context);
if (exprType) {
if (binaryExpression.kind() === 175 /* AddAssignmentExpression */) {
if (!this.isReference(binaryExpression.left, lhsExpression)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.Invalid_left_hand_side_of_assignment_expression));
}
this.checkAssignability(binaryExpression.left, exprType, lhsType, context);
}
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.Invalid_expression_types_not_known_to_support_the_addition_operator));
}
}
if (!exprType) {
exprType = this.semanticInfoChain.anyTypeSymbol;
}
return exprType;
};
PullTypeResolver.prototype.bestCommonTypeOfTwoTypes = function (type1, type2, context) {
return this.findBestCommonType({
getLength: function () {
return 2;
},
getTypeAtIndex: function (index) {
switch (index) {
case 0:
return type1;
case 1:
return type2;
}
}
}, context);
};
PullTypeResolver.prototype.bestCommonTypeOfThreeTypes = function (type1, type2, type3, context) {
return this.findBestCommonType({
getLength: function () {
return 3;
},
getTypeAtIndex: function (index) {
switch (index) {
case 0:
return type1;
case 1:
return type2;
case 2:
return type3;
}
}
}, context);
};
PullTypeResolver.prototype.resolveLogicalOrExpression = function (binex, isContextuallyTyped, context) {
if (this.canTypeCheckAST(binex, context)) {
this.setTypeChecked(binex, context);
}
if (isContextuallyTyped) {
var contextualType = context.getContextualType();
var leftType = this.resolveAST(binex.left, isContextuallyTyped, context).type;
var rightType = this.resolveAST(binex.right, isContextuallyTyped, context).type;
return context.isInferentiallyTyping() ? this.bestCommonTypeOfTwoTypes(leftType, rightType, context) : this.bestCommonTypeOfThreeTypes(contextualType, leftType, rightType, context);
} else {
var leftType = this.resolveAST(binex.left, false, context).type;
context.pushNewContextualType(leftType);
var rightType = this.resolveAST(binex.right, true, context).type;
context.popAnyContextualType();
return this.bestCommonTypeOfTwoTypes(leftType, rightType, context);
}
};
PullTypeResolver.prototype.resolveLogicalAndExpression = function (binex, context) {
if (this.canTypeCheckAST(binex, context)) {
this.setTypeChecked(binex, context);
this.resolveAST(binex.left, false, context);
}
return this.resolveAST(binex.right, false, context).type;
};
PullTypeResolver.prototype.computeTypeOfConditionalExpression = function (leftType, rightType, isContextuallyTyped, context) {
if (isContextuallyTyped && !context.isInferentiallyTyping()) {
var contextualType = context.getContextualType();
return this.bestCommonTypeOfThreeTypes(contextualType, leftType, rightType, context);
} else {
return this.bestCommonTypeOfTwoTypes(leftType, rightType, context);
}
};
PullTypeResolver.prototype.resolveConditionalExpression = function (trinex, isContextuallyTyped, context) {
var leftType = this.resolveAST(trinex.whenTrue, isContextuallyTyped, context).type;
var rightType = this.resolveAST(trinex.whenFalse, isContextuallyTyped, context).type;
var expressionType = this.computeTypeOfConditionalExpression(leftType, rightType, isContextuallyTyped, context);
var conditionalTypesAreValid = this.conditionExpressionTypesAreValid(leftType, rightType, expressionType, isContextuallyTyped, context);
if (this.canTypeCheckAST(trinex, context)) {
this.setTypeChecked(trinex, context);
this.resolveAST(trinex.condition, false, context);
if (!this.conditionExpressionTypesAreValid(leftType, rightType, expressionType, isContextuallyTyped, context)) {
if (isContextuallyTyped) {
var contextualType = context.getContextualType();
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(trinex, TypeScript.DiagnosticCode.Type_of_conditional_0_must_be_identical_to_1_2_or_3, [expressionType.toString(), leftType.toString(), rightType.toString(), contextualType.toString()]));
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(trinex, TypeScript.DiagnosticCode.Type_of_conditional_0_must_be_identical_to_1_or_2, [expressionType.toString(), leftType.toString(), rightType.toString()]));
}
}
}
if (!conditionalTypesAreValid) {
return this.getNewErrorTypeSymbol();
}
return expressionType;
};
PullTypeResolver.prototype.conditionExpressionTypesAreValid = function (leftType, rightType, expressionType, isContextuallyTyped, context) {
if (isContextuallyTyped) {
var contextualType = context.getContextualType();
if (this.typesAreIdentical(expressionType, leftType, context) || this.typesAreIdentical(expressionType, rightType, context) || this.typesAreIdentical(expressionType, contextualType, context)) {
return true;
}
} else {
if (this.typesAreIdentical(expressionType, leftType, context) || this.typesAreIdentical(expressionType, rightType, context)) {
return true;
}
}
return false;
};
PullTypeResolver.prototype.resolveParenthesizedExpression = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.setTypeChecked(ast, context);
}
return this.resolveAST(ast.expression, false, context);
};
PullTypeResolver.prototype.resolveExpressionStatement = function (ast, context) {
if (this.canTypeCheckAST(ast, context)) {
this.setTypeChecked(ast, context);
this.resolveAST(ast.expression, false, context);
}
return this.semanticInfoChain.voidTypeSymbol;
};
PullTypeResolver.prototype.resolveInvocationExpression = function (callEx, context, additionalResults) {
var symbol = this.getSymbolForAST(callEx, context);
if (!symbol || !symbol.isResolved) {
if (!additionalResults) {
additionalResults = new PullAdditionalCallResolutionData();
}
symbol = this.computeInvocationExpressionSymbol(callEx, context, additionalResults);
if (this.canTypeCheckAST(callEx, context)) {
this.setTypeChecked(callEx, context);
}
if (symbol !== this.semanticInfoChain.anyTypeSymbol) {
this.setSymbolForAST(callEx, symbol, context);
}
this.semanticInfoChain.setCallResolutionDataForAST(callEx, additionalResults);
} else {
if (this.canTypeCheckAST(callEx, context)) {
this.typeCheckInvocationExpression(callEx, context);
}
var callResolutionData = this.semanticInfoChain.getCallResolutionDataForAST(callEx);
if (additionalResults && (callResolutionData !== additionalResults)) {
additionalResults.actualParametersContextTypeSymbols = callResolutionData.actualParametersContextTypeSymbols;
additionalResults.candidateSignature = callResolutionData.candidateSignature;
additionalResults.resolvedSignatures = callResolutionData.resolvedSignatures;
additionalResults.targetSymbol = callResolutionData.targetSymbol;
}
}
return symbol;
};
PullTypeResolver.prototype.typeCheckInvocationExpression = function (callEx, context) {
this.setTypeChecked(callEx, context);
var targetSymbol = this.resolveAST(callEx.expression, false, context);
if (callEx.argumentList.arguments) {
var callResolutionData = this.semanticInfoChain.getCallResolutionDataForAST(callEx);
var len = callEx.argumentList.arguments.nonSeparatorCount();
for (var i = 0; i < len; i++) {
var contextualType = callResolutionData.actualParametersContextTypeSymbols ? callResolutionData.actualParametersContextTypeSymbols[i] : null;
if (contextualType) {
context.pushNewContextualType(contextualType);
}
this.resolveAST(callEx.argumentList.arguments.nonSeparatorAt(i), contextualType !== null, context);
if (contextualType) {
context.popAnyContextualType();
contextualType = null;
}
}
}
for (var i = 0; i < callResolutionData.diagnosticsFromOverloadResolution.length; i++) {
context.postDiagnostic(callResolutionData.diagnosticsFromOverloadResolution[i]);
}
};
PullTypeResolver.prototype.computeInvocationExpressionSymbol = function (callEx, context, additionalResults) {
var targetSymbol = this.resolveAST(callEx.expression, false, context);
var targetAST = this.getCallTargetErrorSpanAST(callEx);
var targetTypeSymbol = targetSymbol.type;
if (this.isAnyOrEquivalent(targetTypeSymbol)) {
this.resolveAST(callEx.argumentList.arguments, false, context);
if (callEx.argumentList.typeArgumentList && callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount()) {
if (targetTypeSymbol === this.semanticInfoChain.anyTypeSymbol) {
this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Untyped_function_calls_may_not_accept_type_arguments), additionalResults, context);
return this.getNewErrorTypeSymbol();
}
}
return this.semanticInfoChain.anyTypeSymbol;
}
var isSuperCall = false;
if (callEx.expression.kind() === 50 /* SuperKeyword */) {
isSuperCall = true;
if (targetTypeSymbol.isClass()) {
targetSymbol = targetTypeSymbol.getConstructorMethod();
this.resolveDeclaredSymbol(targetSymbol, context);
targetTypeSymbol = targetSymbol.type;
} else {
this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Calls_to_super_are_only_valid_inside_a_class), additionalResults, context);
this.resolveAST(callEx.argumentList.arguments, false, context);
return this.getNewErrorTypeSymbol();
}
}
var signatures = isSuperCall ? targetTypeSymbol.getConstructSignatures() : targetTypeSymbol.getCallSignatures();
if (!signatures.length && (targetTypeSymbol.kind === 33554432 /* ConstructorType */)) {
this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new, [targetTypeSymbol.toString()]), additionalResults, context);
}
var explicitTypeArgs = null;
var couldNotFindGenericOverload = false;
var couldNotAssignToConstraint;
var constraintDiagnostic = null;
var typeArgumentCountDiagnostic = null;
var diagnostics = [];
if (callEx.argumentList.typeArgumentList) {
explicitTypeArgs = [];
if (callEx.argumentList.typeArgumentList && callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount()) {
for (var i = 0; i < callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount(); i++) {
explicitTypeArgs[i] = this.resolveTypeReference(callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorAt(i), context);
}
}
}
var triedToInferTypeArgs = false;
var resolvedSignatures = [];
var inferredOrExplicitTypeArgs;
var specializedSignature;
var typeParameters;
var typeConstraint = null;
var beforeResolutionSignatures = signatures;
var targetTypeReplacementMap = targetTypeSymbol.getTypeParameterArgumentMap();
for (var i = 0; i < signatures.length; i++) {
typeParameters = signatures[i].getTypeParameters();
couldNotAssignToConstraint = false;
if (signatures[i].isGeneric() && typeParameters.length) {
if (isSuperCall && targetTypeSymbol.isGeneric() && !callEx.argumentList.typeArgumentList) {
explicitTypeArgs = signatures[i].returnType.getTypeArguments();
}
if (explicitTypeArgs) {
if (explicitTypeArgs.length === typeParameters.length) {
inferredOrExplicitTypeArgs = explicitTypeArgs;
} else {
typeArgumentCountDiagnostic = typeArgumentCountDiagnostic || this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Signature_expected_0_type_arguments_got_1_instead, [typeParameters.length, explicitTypeArgs.length]);
continue;
}
} else {
TypeScript.Debug.assert(callEx.argumentList);
var typeArgumentInferenceContext = new TypeScript.InvocationTypeArgumentInferenceContext(this, context, signatures[i], callEx.argumentList.arguments);
inferredOrExplicitTypeArgs = this.inferArgumentTypesForSignature(typeArgumentInferenceContext, new TypeComparisonInfo(), context);
triedToInferTypeArgs = true;
}
TypeScript.Debug.assert(inferredOrExplicitTypeArgs && inferredOrExplicitTypeArgs.length == typeParameters.length);
var mutableTypeReplacementMap = new TypeScript.PullInstantiationHelpers.MutableTypeArgumentMap(targetTypeReplacementMap ? targetTypeReplacementMap : []);
TypeScript.PullInstantiationHelpers.updateMutableTypeParameterArgumentMap(typeParameters, inferredOrExplicitTypeArgs, mutableTypeReplacementMap);
var typeReplacementMap = mutableTypeReplacementMap.typeParameterArgumentMap;
if (explicitTypeArgs) {
for (var j = 0; j < typeParameters.length; j++) {
typeConstraint = typeParameters[j].getConstraint();
if (typeConstraint) {
if (typeConstraint.isGeneric()) {
typeConstraint = this.instantiateType(typeConstraint, typeReplacementMap);
}
if (!this.sourceIsAssignableToTarget(inferredOrExplicitTypeArgs[j], typeConstraint, targetAST, context, null, true)) {
var enclosingSymbol = this.getEnclosingSymbolForAST(targetAST);
constraintDiagnostic = this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Type_0_does_not_satisfy_the_constraint_1_for_type_parameter_2, [inferredOrExplicitTypeArgs[j].toString(enclosingSymbol, true), typeConstraint.toString(enclosingSymbol, true), typeParameters[j].toString(enclosingSymbol, true)]);
couldNotAssignToConstraint = true;
}
if (couldNotAssignToConstraint) {
break;
}
}
}
}
if (couldNotAssignToConstraint) {
continue;
}
specializedSignature = this.instantiateSignature(signatures[i], typeReplacementMap);
if (specializedSignature) {
resolvedSignatures[resolvedSignatures.length] = specializedSignature;
}
} else {
if (!(callEx.argumentList.typeArgumentList && callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount())) {
resolvedSignatures[resolvedSignatures.length] = signatures[i];
}
}
}
if (signatures.length && !resolvedSignatures.length) {
couldNotFindGenericOverload = true;
}
signatures = resolvedSignatures;
var errorCondition = null;
if (!signatures.length) {
additionalResults.targetSymbol = targetSymbol;
additionalResults.resolvedSignatures = beforeResolutionSignatures;
additionalResults.candidateSignature = beforeResolutionSignatures && beforeResolutionSignatures.length ? beforeResolutionSignatures[0] : null;
additionalResults.actualParametersContextTypeSymbols = actualParametersContextTypeSymbols;
this.resolveAST(callEx.argumentList.arguments, false, context);
if (!couldNotFindGenericOverload) {
if (this.cachedFunctionInterfaceType() && this.sourceIsAssignableToTarget(targetTypeSymbol, this.cachedFunctionInterfaceType(), targetAST, context)) {
if (callEx.argumentList.typeArgumentList) {
this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Non_generic_functions_may_not_accept_type_arguments), additionalResults, context);
}
return this.semanticInfoChain.anyTypeSymbol;
}
this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(callEx, TypeScript.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature), additionalResults, context);
} else if (constraintDiagnostic) {
this.postOverloadResolutionDiagnostics(constraintDiagnostic, additionalResults, context);
} else if (typeArgumentCountDiagnostic) {
this.postOverloadResolutionDiagnostics(typeArgumentCountDiagnostic, additionalResults, context);
} else {
this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(callEx, TypeScript.DiagnosticCode.Could_not_select_overload_for_call_expression), additionalResults, context);
}
return this.getNewErrorTypeSymbol();
}
var signature = this.resolveOverloads(callEx, signatures, callEx.argumentList.typeArgumentList !== null, context, diagnostics);
var useBeforeResolutionSignatures = signature == null;
if (!signature) {
for (var i = 0; i < diagnostics.length; i++) {
this.postOverloadResolutionDiagnostics(diagnostics[i], additionalResults, context);
}
this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Could_not_select_overload_for_call_expression), additionalResults, context);
errorCondition = this.getNewErrorTypeSymbol();
if (!signatures.length) {
return errorCondition;
}
signature = signatures[0];
}
var rootSignature = signature.getRootSymbol();
if (!rootSignature.isGeneric() && callEx.argumentList.typeArgumentList) {
this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Non_generic_functions_may_not_accept_type_arguments), additionalResults, context);
} else if (rootSignature.isGeneric() && callEx.argumentList.typeArgumentList && rootSignature.getTypeParameters() && (callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount() !== rootSignature.getTypeParameters().length)) {
this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Signature_expected_0_type_arguments_got_1_instead, [rootSignature.getTypeParameters().length, callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount()]), additionalResults, context);
}
var returnType = isSuperCall ? this.semanticInfoChain.voidTypeSymbol : signature.returnType;
var actualParametersContextTypeSymbols = [];
if (callEx.argumentList.arguments) {
var len = callEx.argumentList.arguments.nonSeparatorCount();
var params = signature.parameters;
var contextualType = null;
var signatureDecl = signature.getDeclarations()[0];
for (var i = 0; i < len; i++) {
if (params.length) {
if (i < params.length - 1 || (i < params.length && !signature.hasVarArgs)) {
this.resolveDeclaredSymbol(params[i], context);
contextualType = params[i].type;
} else if (signature.hasVarArgs) {
contextualType = params[params.length - 1].type;
if (contextualType.isArrayNamedTypeReference()) {
contextualType = contextualType.getElementType();
}
}
}
if (contextualType) {
context.pushNewContextualType(contextualType);
actualParametersContextTypeSymbols[i] = contextualType;
}
this.resolveAST(callEx.argumentList.arguments.nonSeparatorAt(i), contextualType !== null, context);
if (contextualType) {
context.popAnyContextualType();
contextualType = null;
}
}
}
additionalResults.targetSymbol = targetSymbol;
if (useBeforeResolutionSignatures && beforeResolutionSignatures) {
additionalResults.resolvedSignatures = beforeResolutionSignatures;
additionalResults.candidateSignature = beforeResolutionSignatures[0];
} else {
additionalResults.resolvedSignatures = signatures;
additionalResults.candidateSignature = signature;
}
additionalResults.actualParametersContextTypeSymbols = actualParametersContextTypeSymbols;
if (errorCondition) {
return errorCondition;
}
if (!returnType) {
returnType = this.semanticInfoChain.anyTypeSymbol;
}
return returnType;
};
PullTypeResolver.prototype.resolveObjectCreationExpression = function (callEx, context, additionalResults) {
var symbol = this.getSymbolForAST(callEx, context);
if (!symbol || !symbol.isResolved) {
if (!additionalResults) {
additionalResults = new PullAdditionalCallResolutionData();
}
symbol = this.computeObjectCreationExpressionSymbol(callEx, context, additionalResults);
if (this.canTypeCheckAST(callEx, context)) {
this.setTypeChecked(callEx, context);
}
this.setSymbolForAST(callEx, symbol, context);
this.semanticInfoChain.setCallResolutionDataForAST(callEx, additionalResults);
} else {
if (this.canTypeCheckAST(callEx, context)) {
this.typeCheckObjectCreationExpression(callEx, context);
}
var callResolutionData = this.semanticInfoChain.getCallResolutionDataForAST(callEx);
if (additionalResults && (callResolutionData !== additionalResults)) {
additionalResults.actualParametersContextTypeSymbols = callResolutionData.actualParametersContextTypeSymbols;
additionalResults.candidateSignature = callResolutionData.candidateSignature;
additionalResults.resolvedSignatures = callResolutionData.resolvedSignatures;
additionalResults.targetSymbol = callResolutionData.targetSymbol;
}
}
return symbol;
};
PullTypeResolver.prototype.typeCheckObjectCreationExpression = function (callEx, context) {
this.setTypeChecked(callEx, context);
this.resolveAST(callEx.expression, false, context);
var callResolutionData = this.semanticInfoChain.getCallResolutionDataForAST(callEx);
if (callEx.argumentList) {
var callResolutionData = this.semanticInfoChain.getCallResolutionDataForAST(callEx);
var len = callEx.argumentList.arguments.nonSeparatorCount();
for (var i = 0; i < len; i++) {
var contextualType = callResolutionData.actualParametersContextTypeSymbols ? callResolutionData.actualParametersContextTypeSymbols[i] : null;
if (contextualType) {
context.pushNewContextualType(contextualType);
}
this.resolveAST(callEx.argumentList.arguments.nonSeparatorAt(i), contextualType !== null, context);
if (contextualType) {
context.popAnyContextualType();
contextualType = null;
}
}
}
for (var i = 0; i < callResolutionData.diagnosticsFromOverloadResolution.length; i++) {
context.postDiagnostic(callResolutionData.diagnosticsFromOverloadResolution[i]);
}
};
PullTypeResolver.prototype.postOverloadResolutionDiagnostics = function (diagnostic, additionalResults, context) {
if (!context.inProvisionalResolution()) {
additionalResults.diagnosticsFromOverloadResolution.push(diagnostic);
}
context.postDiagnostic(diagnostic);
};
PullTypeResolver.prototype.computeObjectCreationExpressionSymbol = function (callEx, context, additionalResults) {
var _this = this;
var returnType = null;
var targetSymbol = this.resolveAST(callEx.expression, false, context);
var targetTypeSymbol = targetSymbol.isType() ? targetSymbol : targetSymbol.type;
var targetAST = this.getCallTargetErrorSpanAST(callEx);
var constructSignatures = targetTypeSymbol.getConstructSignatures();
var explicitTypeArgs = null;
var usedCallSignaturesInstead = false;
var couldNotAssignToConstraint;
var constraintDiagnostic = null;
var typeArgumentCountDiagnostic = null;
var diagnostics = [];
if (this.isAnyOrEquivalent(targetTypeSymbol)) {
if (callEx.argumentList) {
this.resolveAST(callEx.argumentList.arguments, false, context);
}
return targetTypeSymbol;
}
if (!constructSignatures.length) {
constructSignatures = targetTypeSymbol.getCallSignatures();
usedCallSignaturesInstead = true;
if (this.compilationSettings.noImplicitAny()) {
this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(callEx, TypeScript.DiagnosticCode.new_expression_which_lacks_a_constructor_signature_implicitly_has_an_any_type), additionalResults, context);
}
}
if (constructSignatures.length) {
if (callEx.argumentList && callEx.argumentList.typeArgumentList) {
explicitTypeArgs = [];
if (callEx.argumentList.typeArgumentList && callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount()) {
for (var i = 0; i < callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount(); i++) {
explicitTypeArgs[i] = this.resolveTypeReference(callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorAt(i), context);
}
}
}
if (targetTypeSymbol.isGeneric()) {
var resolvedSignatures = [];
var inferredOrExplicitTypeArgs;
var specializedSignature;
var typeParameters;
var typeConstraint = null;
var triedToInferTypeArgs;
var targetTypeReplacementMap = targetTypeSymbol.getTypeParameterArgumentMap();
for (var i = 0; i < constructSignatures.length; i++) {
couldNotAssignToConstraint = false;
if (constructSignatures[i].isGeneric()) {
typeParameters = constructSignatures[i].getTypeParameters();
if (explicitTypeArgs) {
if (explicitTypeArgs.length === typeParameters.length) {
inferredOrExplicitTypeArgs = explicitTypeArgs;
} else {
typeArgumentCountDiagnostic = typeArgumentCountDiagnostic || this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Signature_expected_0_type_arguments_got_1_instead, [typeParameters.length, explicitTypeArgs.length]);
continue;
}
} else if (callEx.argumentList) {
var typeArgumentInferenceContext = new TypeScript.InvocationTypeArgumentInferenceContext(this, context, constructSignatures[i], callEx.argumentList.arguments);
inferredOrExplicitTypeArgs = this.inferArgumentTypesForSignature(typeArgumentInferenceContext, new TypeComparisonInfo(), context);
triedToInferTypeArgs = true;
} else {
inferredOrExplicitTypeArgs = TypeScript.ArrayUtilities.select(typeParameters, function (typeParameter) {
return typeParameter.getDefaultConstraint(_this.semanticInfoChain);
});
}
TypeScript.Debug.assert(inferredOrExplicitTypeArgs && inferredOrExplicitTypeArgs.length == typeParameters.length);
var mutableTypeReplacementMap = new TypeScript.PullInstantiationHelpers.MutableTypeArgumentMap(targetTypeReplacementMap ? targetTypeReplacementMap : []);
TypeScript.PullInstantiationHelpers.updateMutableTypeParameterArgumentMap(typeParameters, inferredOrExplicitTypeArgs, mutableTypeReplacementMap);
var typeReplacementMap = mutableTypeReplacementMap.typeParameterArgumentMap;
if (explicitTypeArgs) {
for (var j = 0; j < typeParameters.length; j++) {
typeConstraint = typeParameters[j].getConstraint();
if (typeConstraint) {
if (typeConstraint.isGeneric()) {
typeConstraint = this.instantiateType(typeConstraint, typeReplacementMap);
}
if (!this.sourceIsAssignableToTarget(inferredOrExplicitTypeArgs[j], typeConstraint, targetAST, context, null, true)) {
var enclosingSymbol = this.getEnclosingSymbolForAST(targetAST);
constraintDiagnostic = this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Type_0_does_not_satisfy_the_constraint_1_for_type_parameter_2, [inferredOrExplicitTypeArgs[j].toString(enclosingSymbol, true), typeConstraint.toString(enclosingSymbol, true), typeParameters[j].toString(enclosingSymbol, true)]);
couldNotAssignToConstraint = true;
}
if (couldNotAssignToConstraint) {
break;
}
}
}
}
if (couldNotAssignToConstraint) {
continue;
}
specializedSignature = this.instantiateSignature(constructSignatures[i], typeReplacementMap);
if (specializedSignature) {
resolvedSignatures[resolvedSignatures.length] = specializedSignature;
}
} else {
if (!(callEx.argumentList && callEx.argumentList.typeArgumentList && callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount())) {
resolvedSignatures[resolvedSignatures.length] = constructSignatures[i];
}
}
}
constructSignatures = resolvedSignatures;
}
var signature = this.resolveOverloads(callEx, constructSignatures, callEx.argumentList && callEx.argumentList.typeArgumentList !== null, context, diagnostics);
additionalResults.targetSymbol = targetSymbol;
additionalResults.resolvedSignatures = constructSignatures;
additionalResults.candidateSignature = signature;
additionalResults.actualParametersContextTypeSymbols = [];
if (!constructSignatures.length) {
if (constraintDiagnostic) {
this.postOverloadResolutionDiagnostics(constraintDiagnostic, additionalResults, context);
} else if (typeArgumentCountDiagnostic) {
this.postOverloadResolutionDiagnostics(typeArgumentCountDiagnostic, additionalResults, context);
}
return this.getNewErrorTypeSymbol();
}
var errorCondition = null;
if (!signature) {
for (var i = 0; i < diagnostics.length; i++) {
this.postOverloadResolutionDiagnostics(diagnostics[i], additionalResults, context);
}
this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Could_not_select_overload_for_new_expression), additionalResults, context);
errorCondition = this.getNewErrorTypeSymbol();
if (!constructSignatures.length) {
return errorCondition;
}
signature = constructSignatures[0];
}
returnType = signature.returnType;
if (returnType && !signature.isGeneric() && returnType.isGeneric() && !returnType.getIsSpecialized()) {
if (explicitTypeArgs && explicitTypeArgs.length) {
returnType = this.createInstantiatedType(returnType, explicitTypeArgs);
} else {
returnType = this.instantiateTypeToAny(returnType, context);
}
}
if (usedCallSignaturesInstead) {
if (returnType !== this.semanticInfoChain.voidTypeSymbol) {
this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Call_signatures_used_in_a_new_expression_must_have_a_void_return_type), additionalResults, context);
return this.getNewErrorTypeSymbol();
} else {
returnType = this.semanticInfoChain.anyTypeSymbol;
}
}
if (!returnType) {
returnType = signature.returnType;
if (!returnType) {
returnType = targetTypeSymbol;
}
}
var actualParametersContextTypeSymbols = [];
if (callEx.argumentList && callEx.argumentList.arguments) {
var len = callEx.argumentList.arguments.nonSeparatorCount();
var params = signature.parameters;
var contextualType = null;
var signatureDecl = signature.getDeclarations()[0];
for (var i = 0; i < len; i++) {
if (params.length) {
if (i < params.length - 1 || (i < params.length && !signature.hasVarArgs)) {
this.resolveDeclaredSymbol(params[i], context);
contextualType = params[i].type;
} else if (signature.hasVarArgs) {
contextualType = params[params.length - 1].type;
if (contextualType.isArrayNamedTypeReference()) {
contextualType = contextualType.getElementType();
}
}
}
if (contextualType) {
context.pushNewContextualType(contextualType);
actualParametersContextTypeSymbols[i] = contextualType;
}
this.resolveAST(callEx.argumentList.arguments.nonSeparatorAt(i), contextualType !== null, context);
if (contextualType) {
context.popAnyContextualType();
contextualType = null;
}
}
}
additionalResults.targetSymbol = targetSymbol;
additionalResults.resolvedSignatures = constructSignatures;
additionalResults.candidateSignature = signature;
additionalResults.actualParametersContextTypeSymbols = actualParametersContextTypeSymbols;
if (errorCondition) {
return errorCondition;
}
if (!returnType) {
returnType = this.semanticInfoChain.anyTypeSymbol;
}
return returnType;
} else if (callEx.argumentList) {
this.resolveAST(callEx.argumentList.arguments, false, context);
}
this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Invalid_new_expression), additionalResults, context);
return this.getNewErrorTypeSymbol();
};
PullTypeResolver.prototype.instantiateSignatureInContext = function (signatureAToInstantiate, contextualSignatureB, context, shouldFixContextualSignatureParameterTypes) {
var typeReplacementMap = [];
var inferredTypeArgs;
var specializedSignature;
var typeParameters = signatureAToInstantiate.getTypeParameters();
var typeConstraint = null;
var typeArgumentInferenceContext = new TypeScript.ContextualSignatureInstantiationTypeArgumentInferenceContext(this, context, signatureAToInstantiate, contextualSignatureB, shouldFixContextualSignatureParameterTypes);
inferredTypeArgs = this.inferArgumentTypesForSignature(typeArgumentInferenceContext, new TypeComparisonInfo(), context);
var functionTypeA = signatureAToInstantiate.functionType;
var functionTypeB = contextualSignatureB.functionType;
var enclosingTypeParameterMap;
if (functionTypeA) {
enclosingTypeParameterMap = functionTypeA.getTypeParameterArgumentMap();
for (var id in enclosingTypeParameterMap) {
typeReplacementMap[id] = enclosingTypeParameterMap[id];
}
}
if (functionTypeB) {
enclosingTypeParameterMap = functionTypeB.getTypeParameterArgumentMap();
for (var id in enclosingTypeParameterMap) {
typeReplacementMap[id] = enclosingTypeParameterMap[id];
}
}
TypeScript.PullInstantiationHelpers.updateTypeParameterArgumentMap(typeParameters, inferredTypeArgs, typeReplacementMap);
return this.instantiateSignature(signatureAToInstantiate, typeReplacementMap);
};
PullTypeResolver.prototype.resolveCastExpression = function (assertionExpression, context) {
var typeAssertionType = this.resolveTypeReference(assertionExpression.type, context).type;
if (this.canTypeCheckAST(assertionExpression, context)) {
this.typeCheckCastExpression(assertionExpression, context, typeAssertionType);
}
return typeAssertionType;
};
PullTypeResolver.prototype.typeCheckCastExpression = function (assertionExpression, context, typeAssertionType) {
this.setTypeChecked(assertionExpression, context);
context.pushNewContextualType(typeAssertionType);
var exprType = this.resolveAST(assertionExpression.expression, true, context).type;
context.popAnyContextualType();
this.resolveDeclaredSymbol(typeAssertionType, context);
this.resolveDeclaredSymbol(exprType, context);
var comparisonInfo = new TypeComparisonInfo();
var isAssignable = this.sourceIsAssignableToTarget(exprType, typeAssertionType, assertionExpression, context, comparisonInfo);
if (!isAssignable) {
var widenedExprType = exprType.widenedType(this, assertionExpression.expression, context);
isAssignable = this.sourceIsAssignableToTarget(typeAssertionType, widenedExprType, assertionExpression, context, comparisonInfo);
}
if (!isAssignable) {
var enclosingSymbol = this.getEnclosingSymbolForAST(assertionExpression);
if (comparisonInfo.message) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(assertionExpression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [exprType.toString(enclosingSymbol), typeAssertionType.toString(enclosingSymbol), comparisonInfo.message]));
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(assertionExpression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [exprType.toString(enclosingSymbol), typeAssertionType.toString(enclosingSymbol)]));
}
}
};
PullTypeResolver.prototype.resolveAssignmentExpression = function (binaryExpression, context) {
var leftExpr = this.resolveAST(binaryExpression.left, false, context);
var leftType = leftExpr.type;
context.pushNewContextualType(leftType);
var rightType = this.resolveAST(binaryExpression.right, true, context).type;
context.popAnyContextualType();
rightType = this.getInstanceTypeForAssignment(binaryExpression.left, rightType, context);
if (this.canTypeCheckAST(binaryExpression, context)) {
this.setTypeChecked(binaryExpression, context);
if (!this.isReference(binaryExpression.left, leftExpr)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.Invalid_left_hand_side_of_assignment_expression));
} else {
this.checkAssignability(binaryExpression.left, rightType, leftExpr.type, context);
}
}
return rightType;
};
PullTypeResolver.prototype.getInstanceTypeForAssignment = function (lhs, type, context) {
var typeToReturn = type;
if (typeToReturn && typeToReturn.isAlias()) {
typeToReturn = typeToReturn.getExportAssignedTypeSymbol();
}
if (typeToReturn && typeToReturn.isContainer() && !typeToReturn.isEnum()) {
var instanceTypeSymbol = typeToReturn.getInstanceType();
if (!instanceTypeSymbol) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(lhs, TypeScript.DiagnosticCode.Tried_to_set_variable_type_to_uninitialized_module_type_0, [type.toString()]));
typeToReturn = null;
} else {
typeToReturn = instanceTypeSymbol;
}
}
return typeToReturn;
};
PullTypeResolver.prototype.widenType = function (type, ast, context) {
if (type === this.semanticInfoChain.undefinedTypeSymbol || type === this.semanticInfoChain.nullTypeSymbol || type.isError()) {
return this.semanticInfoChain.anyTypeSymbol;
}
if (type.isArrayNamedTypeReference()) {
return this.widenArrayType(type, ast, context);
} else if (type.kind === 256 /* ObjectLiteral */) {
return this.widenObjectLiteralType(type, ast, context);
}
return type;
};
PullTypeResolver.prototype.widenArrayType = function (type, ast, context) {
var elementType = type.getElementType().widenedType(this, ast, context);
if (this.compilationSettings.noImplicitAny() && ast) {
if (elementType === this.semanticInfoChain.anyTypeSymbol && type.getElementType() !== this.semanticInfoChain.anyTypeSymbol) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Array_Literal_implicitly_has_an_any_type_from_widening));
}
}
return this.getArrayType(elementType);
};
PullTypeResolver.prototype.widenObjectLiteralType = function (type, ast, context) {
if (!this.needsToWidenObjectLiteralType(type, ast, context)) {
return type;
}
TypeScript.Debug.assert(type.name === "");
var newObjectTypeSymbol = new TypeScript.PullTypeSymbol(type.name, type.kind);
var declsOfObjectType = type.getDeclarations();
TypeScript.Debug.assert(declsOfObjectType.length === 1);
newObjectTypeSymbol.addDeclaration(declsOfObjectType[0]);
var members = type.getMembers();
for (var i = 0; i < members.length; i++) {
var memberType = members[i].type;
var widenedMemberType = members[i].type.widenedType(this, ast, context);
var newMember = new TypeScript.PullSymbol(members[i].name, members[i].kind);
var declsOfMember = members[i].getDeclarations();
newMember.addDeclaration(declsOfMember[0]);
newMember.type = widenedMemberType;
newObjectTypeSymbol.addMember(newMember);
newMember.setResolved();
if (this.compilationSettings.noImplicitAny() && ast && widenedMemberType === this.semanticInfoChain.anyTypeSymbol && memberType !== this.semanticInfoChain.anyTypeSymbol) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Object_literal_s_property_0_implicitly_has_an_any_type_from_widening, [members[i].name]));
}
}
var indexers = type.getIndexSignatures();
for (var i = 0; i < indexers.length; i++) {
var newIndexer = new TypeScript.PullSignatureSymbol(4194304 /* IndexSignature */);
var parameter = indexers[i].parameters[0];
var newParameter = new TypeScript.PullSymbol(parameter.name, parameter.kind);
newParameter.type = parameter.type;
newIndexer.addParameter(newParameter);
newIndexer.returnType = indexers[i].returnType;
newObjectTypeSymbol.addIndexSignature(newIndexer);
}
return newObjectTypeSymbol;
};
PullTypeResolver.prototype.needsToWidenObjectLiteralType = function (type, ast, context) {
var members = type.getMembers();
for (var i = 0; i < members.length; i++) {
var memberType = members[i].type;
if (memberType !== memberType.widenedType(this, ast, context)) {
return true;
}
}
return false;
};
PullTypeResolver.prototype.findBestCommonType = function (collection, context, comparisonInfo) {
var len = collection.getLength();
for (var i = 0; i < len; i++) {
var candidateType = collection.getTypeAtIndex(i);
if (this.typeIsBestCommonTypeCandidate(candidateType, collection, context)) {
return candidateType;
}
}
return this.semanticInfoChain.emptyTypeSymbol;
};
PullTypeResolver.prototype.typeIsBestCommonTypeCandidate = function (candidateType, collection, context) {
for (var i = 0; i < collection.getLength(); i++) {
var otherType = collection.getTypeAtIndex(i);
if (candidateType === otherType) {
continue;
}
if (!this.sourceIsSubtypeOfTarget(otherType, candidateType, null, context)) {
return false;
}
}
return true;
};
PullTypeResolver.prototype.typesAreIdenticalInEnclosingTypes = function (t1, t2, context) {
t1 = this.getSymbolForRelationshipCheck(t1);
t2 = this.getSymbolForRelationshipCheck(t2);
if (t1 === t2) {
return true;
}
if (t1 && t2) {
if (context.oneOfClassificationsIsInfinitelyExpanding()) {
return this.infinitelyExpandingTypesAreIdentical(t1, t2, context);
}
}
return this.typesAreIdentical(t1, t2, context);
};
PullTypeResolver.prototype.typesAreIdenticalWithNewEnclosingTypes = function (t1, t2, context) {
var enclosingTypeWalkers = context.resetEnclosingTypeWalkers();
var areTypesIdentical = this.typesAreIdentical(t1, t2, context);
context.setEnclosingTypeWalkers(enclosingTypeWalkers);
return areTypesIdentical;
};
PullTypeResolver.prototype.typesAreIdentical = function (t1, t2, context) {
t1 = this.getSymbolForRelationshipCheck(t1);
t2 = this.getSymbolForRelationshipCheck(t2);
if (t1 === t2) {
return true;
}
if (!t1 || !t2) {
return false;
}
if (TypeScript.hasFlag(t1.kind, 64 /* Enum */) || TypeScript.hasFlag(t2.kind, 64 /* Enum */)) {
return false;
}
if (t1.isPrimitive() && t1.isStringConstant() && t2.isPrimitive() && t2.isStringConstant()) {
return TypeScript.stripStartAndEndQuotes(t1.name) === TypeScript.stripStartAndEndQuotes(t2.name);
}
if (t1.isPrimitive() || t2.isPrimitive()) {
return false;
}
if (t1.isError() && t2.isError()) {
return true;
}
var isIdentical = this.identicalCache.valueAt(t1.pullSymbolID, t2.pullSymbolID);
if (isIdentical != undefined) {
return isIdentical;
}
if (t1.isTypeParameter() !== t2.isTypeParameter()) {
return false;
} else if (t1.isTypeParameter()) {
var t1ParentDeclaration = t1.getDeclarations()[0].getParentDecl();
var t2ParentDeclaration = t2.getDeclarations()[0].getParentDecl();
if (t1ParentDeclaration === t2ParentDeclaration) {
return this.symbolsShareDeclaration(t1, t2);
} else {
return false;
}
}
if (t1.isPrimitive() !== t2.isPrimitive()) {
return false;
}
this.identicalCache.setValueAt(t1.pullSymbolID, t2.pullSymbolID, true);
var symbolsWhenStartedWalkingTypes = context.startWalkingTypes(t1, t2);
isIdentical = this.typesAreIdenticalWorker(t1, t2, context);
context.endWalkingTypes(symbolsWhenStartedWalkingTypes);
this.identicalCache.setValueAt(t1.pullSymbolID, t2.pullSymbolID, isIdentical);
return isIdentical;
};
PullTypeResolver.prototype.typesAreIdenticalWorker = function (t1, t2, context) {
if (t1.getIsSpecialized() && t2.getIsSpecialized()) {
if (TypeScript.PullHelpers.getRootType(t1) === TypeScript.PullHelpers.getRootType(t2) && TypeScript.PullHelpers.getRootType(t1).isNamedTypeSymbol()) {
var t1TypeArguments = t1.getTypeArguments();
var t2TypeArguments = t2.getTypeArguments();
if (t1TypeArguments && t2TypeArguments) {
for (var i = 0; i < t1TypeArguments.length; i++) {
if (!this.typesAreIdenticalWithNewEnclosingTypes(t1TypeArguments[i], t2TypeArguments[i], context)) {
return false;
}
}
}
return true;
}
}
if (t1.hasMembers() && t2.hasMembers()) {
var t1Members = t1.getAllMembers(68147712 /* SomeValue */, 0 /* all */);
var t2Members = t2.getAllMembers(68147712 /* SomeValue */, 0 /* all */);
if (t1Members.length !== t2Members.length) {
return false;
}
var t1MemberSymbol = null;
var t2MemberSymbol = null;
var t1MemberType = null;
var t2MemberType = null;
for (var iMember = 0; iMember < t1Members.length; iMember++) {
t1MemberSymbol = t1Members[iMember];
t2MemberSymbol = this.getNamedPropertySymbol(t1MemberSymbol.name, 68147712 /* SomeValue */, t2);
if (!this.propertiesAreIdentical(t1MemberSymbol, t2MemberSymbol, context)) {
return false;
}
}
} else if (t1.hasMembers() || t2.hasMembers()) {
return false;
}
var t1CallSigs = t1.getCallSignatures();
var t2CallSigs = t2.getCallSignatures();
var t1ConstructSigs = t1.getConstructSignatures();
var t2ConstructSigs = t2.getConstructSignatures();
var t1IndexSigs = t1.getIndexSignatures();
var t2IndexSigs = t2.getIndexSignatures();
if (!this.signatureGroupsAreIdentical(t1CallSigs, t2CallSigs, context)) {
return false;
}
if (!this.signatureGroupsAreIdentical(t1ConstructSigs, t2ConstructSigs, context)) {
return false;
}
if (!this.signatureGroupsAreIdentical(t1IndexSigs, t2IndexSigs, context)) {
return false;
}
return true;
};
PullTypeResolver.prototype.propertiesAreIdentical = function (propertySymbol1, propertySymbol2, context) {
if (!propertySymbol2 || (propertySymbol1.isOptional !== propertySymbol2.isOptional)) {
return false;
}
var t1MemberSymbolIsPrivate = propertySymbol1.anyDeclHasFlag(2 /* Private */);
var t2MemberSymbolIsPrivate = propertySymbol2.anyDeclHasFlag(2 /* Private */);
if (t1MemberSymbolIsPrivate !== t2MemberSymbolIsPrivate) {
return false;
} else if (t2MemberSymbolIsPrivate && t1MemberSymbolIsPrivate) {
var t1MemberSymbolDecl = propertySymbol1.getDeclarations()[0];
var sourceDecl = propertySymbol2.getDeclarations()[0];
if (t1MemberSymbolDecl !== sourceDecl) {
return false;
}
}
var t1MemberType = propertySymbol1.type;
var t2MemberType = propertySymbol2.type;
context.walkMemberTypes(propertySymbol1.name);
var areMemberTypesIdentical = this.typesAreIdenticalInEnclosingTypes(t1MemberType, t2MemberType, context);
context.postWalkMemberTypes();
return areMemberTypesIdentical;
};
PullTypeResolver.prototype.propertiesAreIdenticalWithNewEnclosingTypes = function (type1, type2, property1, property2, context) {
var enclosingWalkers = context.resetEnclosingTypeWalkers();
context.setEnclosingTypes(type1, type2);
var arePropertiesIdentical = this.propertiesAreIdentical(property1, property2, context);
context.setEnclosingTypeWalkers(enclosingWalkers);
return arePropertiesIdentical;
};
PullTypeResolver.prototype.signatureGroupsAreIdentical = function (sg1, sg2, context) {
if (sg1 === sg2) {
return true;
}
if (!sg1 || !sg2) {
return false;
}
if (sg1.length !== sg2.length) {
return false;
}
for (var i = 0; i < sg1.length; i++) {
context.walkSignatures(sg1[i].kind, i);
var areSignaturesIdentical = this.signaturesAreIdentical(sg1[i], sg2[i], context, true);
context.postWalkSignatures();
if (!areSignaturesIdentical) {
return false;
}
}
return true;
};
PullTypeResolver.prototype.typeParametersAreIdentical = function (tp1, tp2, context) {
var typeParamsAreIdentical = this.typeParametersAreIdenticalWorker(tp1, tp2, context);
this.setTypeParameterIdentity(tp1, tp2, undefined);
return typeParamsAreIdentical;
};
PullTypeResolver.prototype.typeParametersAreIdenticalWorker = function (tp1, tp2, context) {
if (!!(tp1 && tp1.length) !== !!(tp2 && tp2.length)) {
return false;
}
if (tp1 && tp2 && (tp1.length !== tp2.length)) {
return false;
}
if (tp1 && tp2) {
for (var i = 0; i < tp1.length; i++) {
context.walkTypeParameterConstraints(i);
var areConstraintsIdentical = this.typesAreIdentical(tp1[i].getConstraint(), tp2[i].getConstraint(), context);
context.postWalkTypeParameterConstraints();
if (!areConstraintsIdentical) {
return false;
}
}
}
return true;
};
PullTypeResolver.prototype.setTypeParameterIdentity = function (tp1, tp2, val) {
if (tp1 && tp2 && tp1.length === tp2.length) {
for (var i = 0; i < tp1.length; i++) {
this.identicalCache.setValueAt(tp1[i].pullSymbolID, tp2[i].pullSymbolID, val);
}
}
};
PullTypeResolver.prototype.signaturesAreIdenticalWithNewEnclosingTypes = function (s1, s2, context, includingReturnType) {
if (typeof includingReturnType === "undefined") { includingReturnType = true; }
var enclosingWalkers = context.resetEnclosingTypeWalkers();
context.setEnclosingTypes(s1, s2);
var areSignaturesIdentical = this.signaturesAreIdentical(s1, s2, context, includingReturnType);
context.setEnclosingTypeWalkers(enclosingWalkers);
return areSignaturesIdentical;
};
PullTypeResolver.prototype.signaturesAreIdentical = function (s1, s2, context, includingReturnType) {
if (typeof includingReturnType === "undefined") { includingReturnType = true; }
if (s1 === s2) {
return true;
}
var signaturesIdentical = this.identicalCache.valueAt(s1.pullSymbolID, s2.pullSymbolID);
if (signaturesIdentical || (signaturesIdentical != undefined && includingReturnType)) {
return signaturesIdentical;
}
var oldValue = signaturesIdentical;
this.identicalCache.setValueAt(s1.pullSymbolID, s2.pullSymbolID, true);
signaturesIdentical = this.signaturesAreIdenticalWorker(s1, s2, context, includingReturnType);
if (includingReturnType) {
this.identicalCache.setValueAt(s1.pullSymbolID, s2.pullSymbolID, signaturesIdentical);
} else {
this.identicalCache.setValueAt(s1.pullSymbolID, s2.pullSymbolID, oldValue);
}
return signaturesIdentical;
};
PullTypeResolver.prototype.signaturesAreIdenticalWorker = function (s1, s2, context, includingReturnType) {
if (typeof includingReturnType === "undefined") { includingReturnType = true; }
if (s1.hasVarArgs !== s2.hasVarArgs) {
return false;
}
if (s1.nonOptionalParamCount !== s2.nonOptionalParamCount) {
return false;
}
if (s1.parameters.length !== s2.parameters.length) {
return false;
}
var s1TypeParameters = s1.getTypeParameters();
var s2TypeParameters = s2.getTypeParameters();
this.setTypeParameterIdentity(s1TypeParameters, s2TypeParameters, true);
var typeParametersParametersAndReturnTypesAreIdentical = this.signatureTypeParametersParametersAndReturnTypesAreIdentical(s1, s2, context, includingReturnType);
this.setTypeParameterIdentity(s1TypeParameters, s2TypeParameters, undefined);
return typeParametersParametersAndReturnTypesAreIdentical;
};
PullTypeResolver.prototype.signatureTypeParametersParametersAndReturnTypesAreIdentical = function (s1, s2, context, includingReturnType) {
if (!this.typeParametersAreIdenticalWorker(s1.getTypeParameters(), s2.getTypeParameters(), context)) {
return false;
}
if (includingReturnType) {
TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(s1);
TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(s2);
context.walkReturnTypes();
var areReturnTypesIdentical = this.typesAreIdenticalInEnclosingTypes(s1.returnType, s2.returnType, context);
context.postWalkReturnTypes();
if (!areReturnTypesIdentical) {
return false;
}
}
var s1Params = s1.parameters;
var s2Params = s2.parameters;
for (var iParam = 0; iParam < s1Params.length; iParam++) {
TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(s1Params[iParam]);
TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(s2Params[iParam]);
context.walkParameterTypes(iParam);
var areParameterTypesIdentical = this.typesAreIdenticalInEnclosingTypes(s1Params[iParam].type, s2Params[iParam].type, context);
context.postWalkParameterTypes();
if (!areParameterTypesIdentical) {
return false;
}
}
return true;
};
PullTypeResolver.prototype.signatureReturnTypesAreIdentical = function (s1, s2, context) {
var s1TypeParameters = s1.getTypeParameters();
var s2TypeParameters = s2.getTypeParameters();
this.setTypeParameterIdentity(s1TypeParameters, s2TypeParameters, true);
var enclosingWalkers = context.resetEnclosingTypeWalkers();
context.setEnclosingTypes(s1, s2);
context.walkReturnTypes();
var returnTypeIsIdentical = this.typesAreIdenticalInEnclosingTypes(s1.returnType, s2.returnType, context);
context.setEnclosingTypeWalkers(enclosingWalkers);
this.setTypeParameterIdentity(s1TypeParameters, s2TypeParameters, undefined);
return returnTypeIsIdentical;
};
PullTypeResolver.prototype.symbolsShareDeclaration = function (symbol1, symbol2) {
var decls1 = symbol1.getDeclarations();
var decls2 = symbol2.getDeclarations();
if (decls1.length && decls2.length) {
return decls1[0] === decls2[0];
}
return false;
};
PullTypeResolver.prototype.sourceIsSubtypeOfTarget = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) {
return this.sourceIsRelatableToTarget(source, target, false, this.subtypeCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures);
};
PullTypeResolver.prototype.sourceMembersAreAssignableToTargetMembers = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) {
var enclosingWalkers = context.resetEnclosingTypeWalkers();
context.setEnclosingTypes(source, target);
var areSourceMembersAreAssignableToTargetMembers = this.sourceMembersAreRelatableToTargetMembers(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures);
context.setEnclosingTypeWalkers(enclosingWalkers);
return areSourceMembersAreAssignableToTargetMembers;
};
PullTypeResolver.prototype.sourcePropertyIsAssignableToTargetProperty = function (source, target, sourceProp, targetProp, ast, context, comparisonInfo, isComparingInstantiatedSignatures) {
var enclosingWalkers = context.resetEnclosingTypeWalkers();
context.setEnclosingTypes(source, target);
var isSourcePropertyIsAssignableToTargetProperty = this.sourcePropertyIsRelatableToTargetProperty(source, target, sourceProp, targetProp, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures);
context.setEnclosingTypeWalkers(enclosingWalkers);
return isSourcePropertyIsAssignableToTargetProperty;
};
PullTypeResolver.prototype.sourceCallSignaturesAreAssignableToTargetCallSignatures = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) {
var enclosingWalkers = context.resetEnclosingTypeWalkers();
context.setEnclosingTypes(source, target);
var areSourceCallSignaturesAssignableToTargetCallSignatures = this.sourceCallSignaturesAreRelatableToTargetCallSignatures(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures);
context.setEnclosingTypeWalkers(enclosingWalkers);
return areSourceCallSignaturesAssignableToTargetCallSignatures;
};
PullTypeResolver.prototype.sourceConstructSignaturesAreAssignableToTargetConstructSignatures = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) {
var enclosingWalkers = context.resetEnclosingTypeWalkers();
context.setEnclosingTypes(source, target);
var areSourceConstructSignaturesAssignableToTargetConstructSignatures = this.sourceConstructSignaturesAreRelatableToTargetConstructSignatures(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures);
context.setEnclosingTypeWalkers(enclosingWalkers);
return areSourceConstructSignaturesAssignableToTargetConstructSignatures;
};
PullTypeResolver.prototype.sourceIndexSignaturesAreAssignableToTargetIndexSignatures = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) {
var enclosingWalkers = context.resetEnclosingTypeWalkers();
context.setEnclosingTypes(source, target);
var areSourceIndexSignaturesAssignableToTargetIndexSignatures = this.sourceIndexSignaturesAreRelatableToTargetIndexSignatures(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures);
context.setEnclosingTypeWalkers(enclosingWalkers);
return areSourceIndexSignaturesAssignableToTargetIndexSignatures;
};
PullTypeResolver.prototype.typeIsAssignableToFunction = function (source, ast, context) {
if (source.isFunctionType()) {
return true;
}
return this.cachedFunctionInterfaceType() && this.sourceIsAssignableToTarget(source, this.cachedFunctionInterfaceType(), ast, context);
};
PullTypeResolver.prototype.signatureIsAssignableToTarget = function (s1, s2, ast, context, comparisonInfo, isComparingInstantiatedSignatures) {
var enclosingWalkers = context.resetEnclosingTypeWalkers();
context.setEnclosingTypes(s1, s2);
var isSignatureIsAssignableToTarget = this.signatureIsRelatableToTarget(s1, s2, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures);
context.setEnclosingTypeWalkers(enclosingWalkers);
return isSignatureIsAssignableToTarget;
};
PullTypeResolver.prototype.sourceIsAssignableToTarget = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) {
return this.sourceIsRelatableToTarget(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures);
};
PullTypeResolver.prototype.sourceIsAssignableToTargetWithNewEnclosingTypes = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) {
return this.sourceIsRelatableToTargetWithNewEnclosingTypes(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures);
};
PullTypeResolver.prototype.getSymbolForRelationshipCheck = function (symbol) {
if (symbol && symbol.isTypeReference()) {
return symbol.getReferencedTypeSymbol();
}
return symbol;
};
PullTypeResolver.prototype.sourceIsRelatableToTargetInEnclosingTypes = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) {
source = this.getSymbolForRelationshipCheck(source);
target = this.getSymbolForRelationshipCheck(target);
if (source === target) {
return true;
}
if (source && target) {
if (context.oneOfClassificationsIsInfinitelyExpanding()) {
return this.infinitelyExpandingSourceTypeIsRelatableToTargetType(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures);
}
}
return this.sourceIsRelatableToTarget(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures);
};
PullTypeResolver.prototype.sourceIsRelatableToTargetWithNewEnclosingTypes = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) {
var enclosingWalkers = context.resetEnclosingTypeWalkers();
var isSourceRelatable = this.sourceIsRelatableToTarget(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures);
context.setEnclosingTypeWalkers(enclosingWalkers);
return isSourceRelatable;
};
PullTypeResolver.prototype.sourceIsRelatableToTargetInCache = function (source, target, comparisonCache, comparisonInfo) {
var isRelatable = comparisonCache.valueAt(source.pullSymbolID, target.pullSymbolID);
if (isRelatable) {
return { isRelatable: isRelatable };
}
if (isRelatable != undefined && !comparisonInfo) {
return { isRelatable: isRelatable };
}
return null;
};
PullTypeResolver.prototype.sourceIsRelatableToTarget = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) {
source = this.getSymbolForRelationshipCheck(source);
target = this.getSymbolForRelationshipCheck(target);
if (source === target) {
return true;
}
if (!(source && target)) {
return true;
}
var sourceApparentType = this.getApparentType(source);
var isRelatableInfo = this.sourceIsRelatableToTargetInCache(source, target, comparisonCache, comparisonInfo);
if (isRelatableInfo) {
return isRelatableInfo.isRelatable;
}
if (source === this.semanticInfoChain.stringTypeSymbol && target.isPrimitive() && target.isStringConstant()) {
return comparisonInfo && comparisonInfo.stringConstantVal && (comparisonInfo.stringConstantVal.kind() === 14 /* StringLiteral */) && (TypeScript.stripStartAndEndQuotes(comparisonInfo.stringConstantVal.text()) === TypeScript.stripStartAndEndQuotes(target.name));
}
if (assignableTo) {
if (this.isAnyOrEquivalent(source) || this.isAnyOrEquivalent(target)) {
return true;
}
} else {
if (this.isAnyOrEquivalent(target)) {
return true;
}
}
if (target === this.semanticInfoChain.stringTypeSymbol && source.isPrimitive() && source.isStringConstant()) {
return true;
}
if (source.isPrimitive() && source.isStringConstant() && target.isPrimitive() && target.isStringConstant()) {
return TypeScript.stripStartAndEndQuotes(source.name) === TypeScript.stripStartAndEndQuotes(target.name);
}
if (source === this.semanticInfoChain.undefinedTypeSymbol) {
return true;
}
if ((source === this.semanticInfoChain.nullTypeSymbol) && (target !== this.semanticInfoChain.undefinedTypeSymbol && target != this.semanticInfoChain.voidTypeSymbol)) {
return true;
}
if (target === this.semanticInfoChain.voidTypeSymbol) {
if (source === this.semanticInfoChain.undefinedTypeSymbol || source == this.semanticInfoChain.nullTypeSymbol) {
return true;
}
return false;
} else if (source === this.semanticInfoChain.voidTypeSymbol) {
if (target === this.semanticInfoChain.anyTypeSymbol) {
return true;
}
return false;
}
if (target === this.semanticInfoChain.numberTypeSymbol && TypeScript.PullHelpers.symbolIsEnum(source)) {
return true;
}
if (source === this.semanticInfoChain.numberTypeSymbol && TypeScript.PullHelpers.symbolIsEnum(target)) {
return assignableTo;
}
if (TypeScript.PullHelpers.symbolIsEnum(target) && TypeScript.PullHelpers.symbolIsEnum(source)) {
return this.symbolsShareDeclaration(target, source);
}
if ((source.kind & 64 /* Enum */) || (target.kind & 64 /* Enum */)) {
return false;
}
if (source.getIsSpecialized() && target.getIsSpecialized()) {
if (TypeScript.PullHelpers.getRootType(source) === TypeScript.PullHelpers.getRootType(target) && TypeScript.PullHelpers.getRootType(source).isNamedTypeSymbol()) {
var sourceTypeArguments = source.getTypeArguments();
var targetTypeArguments = target.getTypeArguments();
if (sourceTypeArguments && targetTypeArguments) {
comparisonCache.setValueAt(source.pullSymbolID, target.pullSymbolID, true);
for (var i = 0; i < sourceTypeArguments.length; i++) {
if (!this.sourceIsRelatableToTargetWithNewEnclosingTypes(sourceTypeArguments[i], targetTypeArguments[i], assignableTo, comparisonCache, ast, context, null, isComparingInstantiatedSignatures)) {
break;
}
}
if (i === sourceTypeArguments.length) {
return true;
} else {
comparisonCache.setValueAt(source.pullSymbolID, target.pullSymbolID, undefined);
}
}
}
}
if (target.isTypeParameter()) {
if (source.isTypeParameter()) {
if (!source.getConstraint()) {
return this.typesAreIdentical(target, source, context);
} else {
return this.isSourceTypeParameterConstrainedToTargetTypeParameter(source, target);
}
} else {
if (isComparingInstantiatedSignatures) {
target = target.getBaseConstraint(this.semanticInfoChain);
} else {
return this.typesAreIdentical(target, sourceApparentType, context);
}
}
}
if (sourceApparentType.isPrimitive() || target.isPrimitive()) {
return false;
}
comparisonCache.setValueAt(source.pullSymbolID, target.pullSymbolID, true);
var symbolsWhenStartedWalkingTypes = context.startWalkingTypes(sourceApparentType, target);
var needsSourceSubstitutionUpdate = source != sourceApparentType && context.enclosingTypeWalker1._canWalkStructure() && context.enclosingTypeWalker1._getCurrentSymbol() != sourceApparentType;
if (needsSourceSubstitutionUpdate) {
context.enclosingTypeWalker1.setCurrentSymbol(sourceApparentType);
}
var isRelatable = this.sourceIsRelatableToTargetWorker(source, target, sourceApparentType, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures);
if (needsSourceSubstitutionUpdate) {
context.enclosingTypeWalker1.setCurrentSymbol(source);
}
context.endWalkingTypes(symbolsWhenStartedWalkingTypes);
comparisonCache.setValueAt(source.pullSymbolID, target.pullSymbolID, isRelatable);
return isRelatable;
};
PullTypeResolver.prototype.isSourceTypeParameterConstrainedToTargetTypeParameter = function (source, target) {
var current = source;
while (current && current.isTypeParameter()) {
if (current === target) {
return true;
}
current = current.getConstraint();
}
return false;
};
PullTypeResolver.prototype.sourceIsRelatableToTargetWorker = function (source, target, sourceSubstitution, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) {
if (target.hasMembers() && !this.sourceMembersAreRelatableToTargetMembers(sourceSubstitution, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures)) {
return false;
}
if (!this.sourceCallSignaturesAreRelatableToTargetCallSignatures(sourceSubstitution, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures)) {
return false;
}
if (!this.sourceConstructSignaturesAreRelatableToTargetConstructSignatures(sourceSubstitution, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures)) {
return false;
}
if (!this.sourceIndexSignaturesAreRelatableToTargetIndexSignatures(sourceSubstitution, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures)) {
return false;
}
return true;
};
PullTypeResolver.prototype.sourceMembersAreRelatableToTargetMembers = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) {
var targetProps = target.getAllMembers(68147712 /* SomeValue */, 0 /* all */);
for (var itargetProp = 0; itargetProp < targetProps.length; itargetProp++) {
var targetProp = targetProps[itargetProp];
var sourceProp = this._getNamedPropertySymbolOfAugmentedType(targetProp.name, source);
this.resolveDeclaredSymbol(targetProp, context);
var targetPropType = targetProp.type;
if (!sourceProp) {
if (!(targetProp.isOptional)) {
if (comparisonInfo) {
var enclosingSymbol = this.getEnclosingSymbolForAST(ast);
comparisonInfo.flags |= 2 /* RequiredPropertyIsMissing */;
comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_0_is_missing_property_1_from_type_2, [source.toString(enclosingSymbol), targetProp.getScopedNameEx().toString(), target.toString(enclosingSymbol)]));
}
return false;
}
continue;
}
if (!this.sourcePropertyIsRelatableToTargetProperty(source, target, sourceProp, targetProp, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures)) {
return false;
}
}
return true;
};
PullTypeResolver.prototype.infinitelyExpandingSourceTypeIsRelatableToTargetType = function (sourceType, targetType, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) {
var widenedTargetType = targetType.widenedType(this, null, context);
var widenedSourceType = sourceType.widenedType(this, null, context);
if ((widenedSourceType !== this.semanticInfoChain.anyTypeSymbol) && (widenedTargetType !== this.semanticInfoChain.anyTypeSymbol)) {
var sourceTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(sourceType);
var targetTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(targetType);
if (sourceTypeNamedTypeReference !== targetTypeNamedTypeReference) {
comparisonCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, false);
if (comparisonInfo) {
var enclosingSymbol = this.getEnclosingSymbolForAST(ast);
comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_0_and_1_originating_in_infinitely_expanding_type_reference_do_not_refer_to_same_named_type, [sourceType.getScopedNameEx(enclosingSymbol).toString(), targetType.toString(enclosingSymbol)]));
}
return false;
}
var sourceTypeArguments = sourceType.getTypeArguments();
var targetTypeArguments = targetType.getTypeArguments();
if (!sourceTypeArguments && !targetTypeArguments) {
comparisonCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, true);
return true;
}
if (!(sourceTypeArguments && targetTypeArguments) || sourceTypeArguments.length !== targetTypeArguments.length) {
comparisonCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, false);
if (comparisonInfo) {
var enclosingSymbol = this.getEnclosingSymbolForAST(ast);
comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments, [sourceType.toString(enclosingSymbol), targetType.toString(enclosingSymbol)]));
}
return false;
}
var comparisonInfoTypeArgumentsCheck = null;
if (comparisonInfo && !comparisonInfo.onlyCaptureFirstError) {
comparisonInfoTypeArgumentsCheck = new TypeComparisonInfo(comparisonInfo);
}
var isRelatable = true;
for (var i = 0; i < sourceTypeArguments.length && isRelatable; i++) {
context.walkTypeArgument(i);
if (!this.sourceIsRelatableToTargetInEnclosingTypes(sourceTypeArguments[i], targetTypeArguments[i], assignableTo, comparisonCache, ast, context, comparisonInfoTypeArgumentsCheck, isComparingInstantiatedSignatures)) {
isRelatable = false;
if (comparisonInfo) {
var message;
var enclosingSymbol = this.getEnclosingSymbolForAST(ast);
if (comparisonInfoTypeArgumentsCheck && comparisonInfoTypeArgumentsCheck.message) {
message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments_NL_2, [sourceType.toString(enclosingSymbol), targetType.toString(enclosingSymbol), comparisonInfoTypeArgumentsCheck.message]);
} else {
message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments, [sourceType.toString(enclosingSymbol), targetType.toString(enclosingSymbol)]);
}
comparisonInfo.addMessage(message);
}
}
context.postWalkTypeArgument();
}
}
comparisonCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, isRelatable);
return isRelatable;
};
PullTypeResolver.prototype.infinitelyExpandingTypesAreIdentical = function (sourceType, targetType, context) {
var widenedTargetType = targetType.widenedType(this, null, null);
var widenedSourceType = sourceType.widenedType(this, null, null);
if ((widenedSourceType !== this.semanticInfoChain.anyTypeSymbol) && (widenedTargetType !== this.semanticInfoChain.anyTypeSymbol)) {
var sourceTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(sourceType);
var targetTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(targetType);
if (sourceTypeNamedTypeReference !== targetTypeNamedTypeReference) {
this.identicalCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, false);
return false;
}
var sourceTypeArguments = sourceType.getTypeArguments();
var targetTypeArguments = targetType.getTypeArguments();
if (!sourceTypeArguments && !targetTypeArguments) {
this.identicalCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, true);
return true;
}
if (!(sourceTypeArguments && targetTypeArguments) || sourceTypeArguments.length !== targetTypeArguments.length) {
this.identicalCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, false);
return false;
}
for (var i = 0; i < sourceTypeArguments.length; i++) {
context.walkTypeArgument(i);
var areIdentical = this.typesAreIdenticalInEnclosingTypes(sourceTypeArguments[i], targetTypeArguments[i], context);
context.postWalkTypeArgument();
if (!areIdentical) {
this.identicalCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, false);
return false;
}
}
}
this.identicalCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, true);
return true;
};
PullTypeResolver.prototype.sourcePropertyIsRelatableToTargetProperty = function (source, target, sourceProp, targetProp, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) {
var _this = this;
var sourceAndTargetAreConstructors = source.isConstructor() && target.isConstructor();
var getNames = function (takeTypesFromPropertyContainers) {
var enclosingSymbol = _this.getEnclosingSymbolForAST(ast);
var sourceType = takeTypesFromPropertyContainers ? sourceProp.getContainer() : source;
var targetType = takeTypesFromPropertyContainers ? targetProp.getContainer() : target;
if (sourceAndTargetAreConstructors) {
sourceType = sourceType.getAssociatedContainerType();
targetType = targetType.getAssociatedContainerType();
}
return {
propertyName: targetProp.getScopedNameEx().toString(),
sourceTypeName: sourceType.toString(enclosingSymbol),
targetTypeName: targetType.toString(enclosingSymbol)
};
};
var targetPropIsPrivate = targetProp.anyDeclHasFlag(2 /* Private */);
var sourcePropIsPrivate = sourceProp.anyDeclHasFlag(2 /* Private */);
if (targetPropIsPrivate !== sourcePropIsPrivate) {
if (comparisonInfo) {
var names = getNames(true);
var code;
if (targetPropIsPrivate) {
code = sourceAndTargetAreConstructors ? TypeScript.DiagnosticCode.Static_property_0_defined_as_public_in_type_1_is_defined_as_private_in_type_2 : TypeScript.DiagnosticCode.Property_0_defined_as_public_in_type_1_is_defined_as_private_in_type_2;
} else {
code = sourceAndTargetAreConstructors ? TypeScript.DiagnosticCode.Static_property_0_defined_as_private_in_type_1_is_defined_as_public_in_type_2 : TypeScript.DiagnosticCode.Property_0_defined_as_private_in_type_1_is_defined_as_public_in_type_2;
}
comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(code, [names.propertyName, names.sourceTypeName, names.targetTypeName]));
comparisonInfo.flags |= 128 /* InconsistantPropertyAccesibility */;
}
return false;
} else if (sourcePropIsPrivate && targetPropIsPrivate) {
var targetDecl = targetProp.getDeclarations()[0];
var sourceDecl = sourceProp.getDeclarations()[0];
if (targetDecl !== sourceDecl) {
if (comparisonInfo) {
var names = getNames(true);
comparisonInfo.flags |= 128 /* InconsistantPropertyAccesibility */;
var code = sourceAndTargetAreConstructors ? TypeScript.DiagnosticCode.Types_0_and_1_define_static_property_2_as_private : TypeScript.DiagnosticCode.Types_0_and_1_define_property_2_as_private;
comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(code, [names.sourceTypeName, names.targetTypeName, names.propertyName]));
}
return false;
}
}
if (sourceProp.isOptional && !targetProp.isOptional) {
if (comparisonInfo) {
var names = getNames(true);
comparisonInfo.flags |= 2 /* RequiredPropertyIsMissing */;
comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Property_0_defined_as_optional_in_type_1_but_is_required_in_type_2, [names.propertyName, names.sourceTypeName, names.targetTypeName]));
}
return false;
}
this.resolveDeclaredSymbol(sourceProp, context);
var sourcePropType = sourceProp.type;
var targetPropType = targetProp.type;
var isRelatableInfo = this.sourceIsRelatableToTargetInCache(sourcePropType, targetPropType, comparisonCache, comparisonInfo);
if (isRelatableInfo) {
return isRelatableInfo.isRelatable;
}
var comparisonInfoPropertyTypeCheck = null;
if (comparisonInfo && !comparisonInfo.onlyCaptureFirstError) {
comparisonInfoPropertyTypeCheck = new TypeComparisonInfo(comparisonInfo);
}
context.walkMemberTypes(targetProp.name);
var isSourcePropertyRelatableToTargetProperty = this.sourceIsRelatableToTargetInEnclosingTypes(sourcePropType, targetPropType, assignableTo, comparisonCache, ast, context, comparisonInfoPropertyTypeCheck, isComparingInstantiatedSignatures);
context.postWalkMemberTypes();
if (!isSourcePropertyRelatableToTargetProperty && comparisonInfo) {
var enclosingSymbol = this.getEnclosingSymbolForAST(ast);
comparisonInfo.flags |= 32 /* IncompatiblePropertyTypes */;
var message;
var names = getNames(false);
if (comparisonInfoPropertyTypeCheck && comparisonInfoPropertyTypeCheck.message) {
var code = sourceAndTargetAreConstructors ? TypeScript.DiagnosticCode.Types_of_static_property_0_of_class_1_and_class_2_are_incompatible_NL_3 : TypeScript.DiagnosticCode.Types_of_property_0_of_types_1_and_2_are_incompatible_NL_3;
message = TypeScript.getDiagnosticMessage(code, [names.propertyName, names.sourceTypeName, names.targetTypeName, comparisonInfoPropertyTypeCheck.message]);
} else {
var code = sourceAndTargetAreConstructors ? TypeScript.DiagnosticCode.Types_of_static_property_0_of_class_1_and_class_2_are_incompatible : TypeScript.DiagnosticCode.Types_of_property_0_of_types_1_and_2_are_incompatible;
message = TypeScript.getDiagnosticMessage(code, [names.propertyName, names.sourceTypeName, names.targetTypeName]);
}
comparisonInfo.addMessage(message);
}
return isSourcePropertyRelatableToTargetProperty;
};
PullTypeResolver.prototype.sourceCallSignaturesAreRelatableToTargetCallSignatures = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) {
var targetCallSigs = target.getCallSignatures();
if (targetCallSigs.length) {
var comparisonInfoSignatuesTypeCheck = null;
if (comparisonInfo && !comparisonInfo.onlyCaptureFirstError) {
comparisonInfoSignatuesTypeCheck = new TypeComparisonInfo(comparisonInfo);
}
var sourceCallSigs = source.getCallSignatures();
if (!this.signatureGroupIsRelatableToTarget(source, target, sourceCallSigs, targetCallSigs, assignableTo, comparisonCache, ast, context, comparisonInfoSignatuesTypeCheck, isComparingInstantiatedSignatures)) {
if (comparisonInfo) {
var message;
var enclosingSymbol = this.getEnclosingSymbolForAST(ast);
if (sourceCallSigs.length && targetCallSigs.length) {
if (comparisonInfoSignatuesTypeCheck && comparisonInfoSignatuesTypeCheck.message) {
message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Call_signatures_of_types_0_and_1_are_incompatible_NL_2, [source.toString(enclosingSymbol), target.toString(enclosingSymbol), comparisonInfoSignatuesTypeCheck.message]);
} else {
message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Call_signatures_of_types_0_and_1_are_incompatible, [source.toString(enclosingSymbol), target.toString(enclosingSymbol)]);
}
} else {
var hasSig = targetCallSigs.length ? target.toString(enclosingSymbol) : source.toString(enclosingSymbol);
var lacksSig = !targetCallSigs.length ? target.toString(enclosingSymbol) : source.toString(enclosingSymbol);
message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_0_requires_a_call_signature_but_type_1_lacks_one, [hasSig, lacksSig]);
}
comparisonInfo.flags |= 4 /* IncompatibleSignatures */;
comparisonInfo.addMessage(message);
}
return false;
}
}
return true;
};
PullTypeResolver.prototype.sourceConstructSignaturesAreRelatableToTargetConstructSignatures = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) {
var targetConstructSigs = target.getConstructSignatures();
if (targetConstructSigs.length) {
var comparisonInfoSignatuesTypeCheck = null;
if (comparisonInfo && !comparisonInfo.onlyCaptureFirstError) {
comparisonInfoSignatuesTypeCheck = new TypeComparisonInfo(comparisonInfo);
}
var sourceConstructSigs = source.getConstructSignatures();
if (!this.signatureGroupIsRelatableToTarget(source, target, sourceConstructSigs, targetConstructSigs, assignableTo, comparisonCache, ast, context, comparisonInfoSignatuesTypeCheck, isComparingInstantiatedSignatures)) {
if (comparisonInfo) {
var enclosingSymbol = this.getEnclosingSymbolForAST(ast);
var message;
if (sourceConstructSigs.length && targetConstructSigs.length) {
if (comparisonInfoSignatuesTypeCheck && comparisonInfoSignatuesTypeCheck.message) {
message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Construct_signatures_of_types_0_and_1_are_incompatible_NL_2, [source.toString(enclosingSymbol), target.toString(enclosingSymbol), comparisonInfoSignatuesTypeCheck.message]);
} else {
message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Construct_signatures_of_types_0_and_1_are_incompatible, [source.toString(enclosingSymbol), target.toString(enclosingSymbol)]);
}
} else {
var hasSig = targetConstructSigs.length ? target.toString(enclosingSymbol) : source.toString(enclosingSymbol);
var lacksSig = !targetConstructSigs.length ? target.toString(enclosingSymbol) : source.toString(enclosingSymbol);
message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_0_requires_a_construct_signature_but_type_1_lacks_one, [hasSig, lacksSig]);
}
comparisonInfo.flags |= 4 /* IncompatibleSignatures */;
comparisonInfo.addMessage(message);
}
return false;
}
}
return true;
};
PullTypeResolver.prototype.sourceIndexSignaturesAreRelatableToTargetIndexSignatures = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) {
var targetIndexSigs = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(target, context);
var targetStringSig = targetIndexSigs.stringSignature;
var targetNumberSig = targetIndexSigs.numericSignature;
if (targetStringSig || targetNumberSig) {
var sourceIndexSigs = this.getBothKindsOfIndexSignaturesIncludingAugmentedType(source, context);
var enclosingTypeIndexSigs = context.getBothKindOfIndexSignatures(true, false);
var sourceStringSig = sourceIndexSigs.stringSignature;
var sourceNumberSig = sourceIndexSigs.numericSignature;
var comparable = true;
var comparisonInfoSignatuesTypeCheck = null;
if (comparisonInfo && !comparisonInfo.onlyCaptureFirstError) {
comparisonInfoSignatuesTypeCheck = new TypeComparisonInfo(comparisonInfo);
}
if (targetStringSig) {
if (sourceStringSig) {
context.walkIndexSignatureReturnTypes(enclosingTypeIndexSigs, true, true);
comparable = this.sourceIsRelatableToTargetInEnclosingTypes(sourceStringSig.returnType, targetStringSig.returnType, assignableTo, comparisonCache, ast, context, comparisonInfoSignatuesTypeCheck, isComparingInstantiatedSignatures);
context.postWalkIndexSignatureReturnTypes();
} else {
comparable = false;
}
}
if (comparable && targetNumberSig) {
if (sourceNumberSig) {
context.walkIndexSignatureReturnTypes(enclosingTypeIndexSigs, false, false);
comparable = this.sourceIsRelatableToTargetInEnclosingTypes(sourceNumberSig.returnType, targetNumberSig.returnType, assignableTo, comparisonCache, ast, context, comparisonInfoSignatuesTypeCheck, isComparingInstantiatedSignatures);
context.postWalkIndexSignatureReturnTypes();
} else if (sourceStringSig) {
context.walkIndexSignatureReturnTypes(enclosingTypeIndexSigs, true, false);
comparable = this.sourceIsRelatableToTargetInEnclosingTypes(sourceStringSig.returnType, targetNumberSig.returnType, assignableTo, comparisonCache, ast, context, comparisonInfoSignatuesTypeCheck, isComparingInstantiatedSignatures);
context.postWalkIndexSignatureReturnTypes();
} else {
comparable = false;
}
}
if (!comparable) {
if (comparisonInfo) {
var message;
var enclosingSymbol = this.getEnclosingSymbolForAST(ast);
if (comparisonInfoSignatuesTypeCheck && comparisonInfoSignatuesTypeCheck.message) {
message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Index_signatures_of_types_0_and_1_are_incompatible_NL_2, [source.toString(enclosingSymbol), target.toString(enclosingSymbol), comparisonInfoSignatuesTypeCheck.message]);
} else {
message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Index_signatures_of_types_0_and_1_are_incompatible, [source.toString(enclosingSymbol), target.toString(enclosingSymbol)]);
}
comparisonInfo.flags |= 4 /* IncompatibleSignatures */;
comparisonInfo.addMessage(message);
}
return false;
}
}
return true;
};
PullTypeResolver.prototype.signatureGroupIsRelatableToTarget = function (source, target, sourceSG, targetSG, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) {
if (sourceSG === targetSG) {
return true;
}
if (!(sourceSG.length && targetSG.length)) {
return false;
}
var foundMatch = false;
var targetExcludeDefinition = targetSG.length > 1;
var sourceExcludeDefinition = sourceSG.length > 1;
var sigsCompared = 0;
var comparisonInfoSignatuesTypeCheck = null;
if (comparisonInfo) {
comparisonInfoSignatuesTypeCheck = new TypeComparisonInfo(comparisonInfo, true);
comparisonInfoSignatuesTypeCheck.message = comparisonInfo.message;
}
for (var iMSig = 0; iMSig < targetSG.length; iMSig++) {
var mSig = targetSG[iMSig];
if (mSig.isStringConstantOverloadSignature() || (targetExcludeDefinition && mSig.isDefinition())) {
continue;
}
for (var iNSig = 0; iNSig < sourceSG.length; iNSig++) {
var nSig = sourceSG[iNSig];
if (nSig.isStringConstantOverloadSignature() || (sourceExcludeDefinition && nSig.isDefinition())) {
continue;
}
context.walkSignatures(nSig.kind, iNSig, iMSig);
var isSignatureRelatableToTarget = this.signatureIsRelatableToTarget(nSig, mSig, assignableTo, comparisonCache, ast, context, sigsCompared == 0 ? comparisonInfoSignatuesTypeCheck : null, isComparingInstantiatedSignatures);
context.postWalkSignatures();
sigsCompared++;
if (isSignatureRelatableToTarget) {
foundMatch = true;
break;
}
}
if (foundMatch) {
foundMatch = false;
continue;
}
if (comparisonInfo && sigsCompared == 1) {
comparisonInfo.message = comparisonInfoSignatuesTypeCheck.message;
}
return false;
}
return true;
};
PullTypeResolver.prototype.signatureIsRelatableToTarget = function (sourceSig, targetSig, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) {
var isRelatableInfo = this.sourceIsRelatableToTargetInCache(sourceSig, targetSig, comparisonCache, comparisonInfo);
if (isRelatableInfo) {
return isRelatableInfo.isRelatable;
}
comparisonCache.setValueAt(sourceSig.pullSymbolID, targetSig.pullSymbolID, true);
var isRelatable = this.signatureIsRelatableToTargetWorker(sourceSig, targetSig, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures);
comparisonCache.setValueAt(sourceSig.pullSymbolID, targetSig.pullSymbolID, isRelatable);
return isRelatable;
};
PullTypeResolver.prototype.signatureIsRelatableToTargetWorker = function (sourceSig, targetSig, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) {
var _this = this;
var sourceParameters = sourceSig.parameters;
var targetParameters = targetSig.parameters;
if (!sourceParameters || !targetParameters) {
return false;
}
var targetNonOptionalParamCount = targetSig.nonOptionalParamCount;
var sourceNonOptionalParamCount = sourceSig.nonOptionalParamCount;
if (!targetSig.hasVarArgs && sourceNonOptionalParamCount > targetParameters.length) {
if (comparisonInfo) {
comparisonInfo.flags |= 3 /* SourceSignatureHasTooManyParameters */;
comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Call_signature_expects_0_or_fewer_parameters, [targetParameters.length]));
}
return false;
}
if (this.signaturesAreIdentical(sourceSig, targetSig, context)) {
return true;
}
if (targetSig.isGeneric()) {
targetSig = this.instantiateSignatureToAny(targetSig);
}
if (sourceSig.isGeneric()) {
sourceSig = this.instantiateSignatureToAny(sourceSig);
}
var sourceReturnType = sourceSig.returnType;
var targetReturnType = targetSig.returnType;
if (targetReturnType !== this.semanticInfoChain.voidTypeSymbol) {
context.walkReturnTypes();
var returnTypesAreRelatable = this.sourceIsRelatableToTargetInEnclosingTypes(sourceReturnType, targetReturnType, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures);
context.postWalkReturnTypes();
if (!returnTypesAreRelatable) {
if (comparisonInfo) {
comparisonInfo.flags |= 16 /* IncompatibleReturnTypes */;
}
return false;
}
}
return targetSig.forAllCorrespondingParameterTypesInThisAndOtherSignature(sourceSig, function (targetParamType, sourceParamType, iParam) {
context.walkParameterTypes(iParam);
var areParametersRelatable = _this.sourceIsRelatableToTargetInEnclosingTypes(sourceParamType, targetParamType, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures);
if (!areParametersRelatable) {
context.swapEnclosingTypeWalkers();
areParametersRelatable = _this.sourceIsRelatableToTargetInEnclosingTypes(targetParamType, sourceParamType, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures);
context.swapEnclosingTypeWalkers();
}
context.postWalkParameterTypes();
if (!areParametersRelatable) {
if (comparisonInfo) {
comparisonInfo.flags |= 64 /* IncompatibleParameterTypes */;
}
}
return areParametersRelatable;
});
};
PullTypeResolver.prototype.resolveOverloads = function (application, group, haveTypeArgumentsAtCallSite, context, diagnostics) {
var _this = this;
var hasOverloads = group.length > 1;
var comparisonInfo = new TypeComparisonInfo();
var args = application.argumentList ? application.argumentList.arguments : null;
var initialCandidates = TypeScript.ArrayUtilities.where(group, function (signature) {
if (hasOverloads && signature.isDefinition()) {
return false;
}
var rootSignature = signature.getRootSymbol();
if (haveTypeArgumentsAtCallSite && !rootSignature.isGeneric()) {
return false;
}
return _this.overloadHasCorrectArity(signature, args);
});
var firstAssignableButNotSupertypeSignature = null;
var firstAssignableWithProvisionalErrorsSignature = null;
for (var i = 0; i < initialCandidates.length; i++) {
var applicability = this.overloadIsApplicable(initialCandidates[i], args, context, comparisonInfo);
if (applicability === 3 /* Subtype */) {
return initialCandidates[i];
} else if (applicability === 2 /* AssignableWithNoProvisionalErrors */ && !firstAssignableButNotSupertypeSignature) {
firstAssignableButNotSupertypeSignature = initialCandidates[i];
} else if (applicability === 1 /* AssignableButWithProvisionalErrors */ && !firstAssignableWithProvisionalErrorsSignature) {
firstAssignableWithProvisionalErrorsSignature = initialCandidates[i];
}
}
if (firstAssignableButNotSupertypeSignature || firstAssignableWithProvisionalErrorsSignature) {
return firstAssignableButNotSupertypeSignature || firstAssignableWithProvisionalErrorsSignature;
} else {
var target = this.getCallTargetErrorSpanAST(application);
if (comparisonInfo.message) {
diagnostics.push(this.semanticInfoChain.diagnosticFromAST(target, TypeScript.DiagnosticCode.Supplied_parameters_do_not_match_any_signature_of_call_target_NL_0, [comparisonInfo.message]));
} else {
diagnostics.push(this.semanticInfoChain.diagnosticFromAST(target, TypeScript.DiagnosticCode.Supplied_parameters_do_not_match_any_signature_of_call_target, null));
}
}
return null;
};
PullTypeResolver.prototype.getCallTargetErrorSpanAST = function (callEx) {
return (callEx.expression.kind() === 212 /* MemberAccessExpression */) ? callEx.expression.name : callEx.expression;
};
PullTypeResolver.prototype.overloadHasCorrectArity = function (signature, args) {
if (args == null) {
return signature.nonOptionalParamCount === 0;
}
var numberOfArgs = (args.nonSeparatorCount() && args.nonSeparatorCount() === args.separatorCount()) ? args.separatorCount() + 1 : args.nonSeparatorCount();
if (numberOfArgs < signature.nonOptionalParamCount) {
return false;
}
if (!signature.hasVarArgs && numberOfArgs > signature.parameters.length) {
return false;
}
return true;
};
PullTypeResolver.prototype.overloadIsApplicable = function (signature, args, context, comparisonInfo) {
if (args === null) {
return 3 /* Subtype */;
}
var isInVarArg = false;
var parameters = signature.parameters;
var paramType = null;
var overloadApplicability = 3 /* Subtype */;
for (var i = 0; i < args.nonSeparatorCount(); i++) {
if (!isInVarArg) {
this.resolveDeclaredSymbol(parameters[i], context);
if (parameters[i].isVarArg) {
paramType = parameters[i].type.getElementType() || this.getNewErrorTypeSymbol(parameters[i].type.getName());
isInVarArg = true;
} else {
paramType = parameters[i].type;
}
}
var statusOfCurrentArgument = this.overloadIsApplicableForArgument(paramType, args.nonSeparatorAt(i), i, context, comparisonInfo);
if (statusOfCurrentArgument === 0 /* NotAssignable */) {
return 0 /* NotAssignable */;
} else if (statusOfCurrentArgument === 1 /* AssignableButWithProvisionalErrors */) {
overloadApplicability = 1 /* AssignableButWithProvisionalErrors */;
} else if (overloadApplicability !== 1 /* AssignableButWithProvisionalErrors */ && statusOfCurrentArgument === 2 /* AssignableWithNoProvisionalErrors */) {
overloadApplicability = 2 /* AssignableWithNoProvisionalErrors */;
}
}
return overloadApplicability;
};
PullTypeResolver.prototype.overloadIsApplicableForArgument = function (paramType, arg, argIndex, context, comparisonInfo) {
if (paramType.isAny()) {
return 3 /* Subtype */;
} else if (paramType.isError()) {
return 1 /* AssignableButWithProvisionalErrors */;
} else if (arg.kind() === 219 /* SimpleArrowFunctionExpression */) {
var simpleArrowFunction = arg;
return this.overloadIsApplicableForAnyFunctionExpressionArgument(paramType, arg, null, TypeScript.ASTHelpers.parametersFromIdentifier(simpleArrowFunction.identifier), null, simpleArrowFunction.block, simpleArrowFunction.expression, argIndex, context, comparisonInfo);
} else if (arg.kind() === 218 /* ParenthesizedArrowFunctionExpression */) {
var arrowFunction = arg;
return this.overloadIsApplicableForAnyFunctionExpressionArgument(paramType, arg, arrowFunction.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(arrowFunction.callSignature.parameterList), TypeScript.ASTHelpers.getType(arrowFunction), arrowFunction.block, arrowFunction.expression, argIndex, context, comparisonInfo);
} else if (arg.kind() === 222 /* FunctionExpression */) {
var functionExpression = arg;
return this.overloadIsApplicableForAnyFunctionExpressionArgument(paramType, arg, functionExpression.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(functionExpression.callSignature.parameterList), TypeScript.ASTHelpers.getType(functionExpression), functionExpression.block, null, argIndex, context, comparisonInfo);
} else if (arg.kind() === 215 /* ObjectLiteralExpression */) {
return this.overloadIsApplicableForObjectLiteralArgument(paramType, arg, argIndex, context, comparisonInfo);
} else if (arg.kind() === 214 /* ArrayLiteralExpression */) {
return this.overloadIsApplicableForArrayLiteralArgument(paramType, arg, argIndex, context, comparisonInfo);
} else {
return this.overloadIsApplicableForOtherArgument(paramType, arg, argIndex, context, comparisonInfo);
}
};
PullTypeResolver.prototype.overloadIsApplicableForAnyFunctionExpressionArgument = function (paramType, arg, typeParameters, parameters, returnTypeAnnotation, block, bodyExpression, argIndex, context, comparisonInfo) {
if (this.cachedFunctionInterfaceType() && paramType === this.cachedFunctionInterfaceType()) {
return 2 /* AssignableWithNoProvisionalErrors */;
}
context.pushProvisionalType(paramType);
var argSym = this.resolveAnyFunctionExpression(arg, typeParameters, parameters, returnTypeAnnotation, block, bodyExpression, true, context);
var applicabilityStatus = this.overloadIsApplicableForArgumentHelper(paramType, argSym.type, argIndex, comparisonInfo, arg, context);
context.popAnyContextualType();
return applicabilityStatus;
};
PullTypeResolver.prototype.overloadIsApplicableForObjectLiteralArgument = function (paramType, arg, argIndex, context, comparisonInfo) {
if (this.cachedObjectInterfaceType() && paramType === this.cachedObjectInterfaceType()) {
return 2 /* AssignableWithNoProvisionalErrors */;
}
context.pushProvisionalType(paramType);
var argSym = this.resolveObjectLiteralExpression(arg, true, context);
var applicabilityStatus = this.overloadIsApplicableForArgumentHelper(paramType, argSym.type, argIndex, comparisonInfo, arg, context);
context.popAnyContextualType();
return applicabilityStatus;
};
PullTypeResolver.prototype.overloadIsApplicableForArrayLiteralArgument = function (paramType, arg, argIndex, context, comparisonInfo) {
if (paramType === this.cachedArrayInterfaceType()) {
return 2 /* AssignableWithNoProvisionalErrors */;
}
context.pushProvisionalType(paramType);
var argSym = this.resolveArrayLiteralExpression(arg, true, context);
var applicabilityStatus = this.overloadIsApplicableForArgumentHelper(paramType, argSym.type, argIndex, comparisonInfo, arg, context);
context.popAnyContextualType();
return applicabilityStatus;
};
PullTypeResolver.prototype.overloadIsApplicableForOtherArgument = function (paramType, arg, argIndex, context, comparisonInfo) {
var argSym = this.resolveAST(arg, false, context);
if (argSym.type.isAlias()) {
var aliasSym = argSym.type;
argSym = aliasSym.getExportAssignedTypeSymbol();
}
comparisonInfo.stringConstantVal = arg;
return this.overloadIsApplicableForArgumentHelper(paramType, argSym.type, argIndex, comparisonInfo, arg, context);
};
PullTypeResolver.prototype.overloadIsApplicableForArgumentHelper = function (paramType, argSym, argumentIndex, comparisonInfo, arg, context) {
var tempComparisonInfo = new TypeComparisonInfo();
tempComparisonInfo.stringConstantVal = comparisonInfo.stringConstantVal;
if (!context.hasProvisionalErrors() && this.sourceIsSubtypeOfTarget(argSym.type, paramType, arg, context, tempComparisonInfo)) {
return 3 /* Subtype */;
}
if (this.sourceIsAssignableToTarget(argSym.type, paramType, arg, context, comparisonInfo.message ? tempComparisonInfo : comparisonInfo)) {
return context.hasProvisionalErrors() ? 1 /* AssignableButWithProvisionalErrors */ : 2 /* AssignableWithNoProvisionalErrors */;
}
if (!comparisonInfo.message) {
var enclosingSymbol = this.getEnclosingSymbolForAST(arg);
comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Could_not_apply_type_0_to_argument_1_which_is_of_type_2, [paramType.toString(enclosingSymbol), (argumentIndex + 1), argSym.getTypeName(enclosingSymbol)]));
}
return 0 /* NotAssignable */;
};
PullTypeResolver.prototype.inferArgumentTypesForSignature = function (argContext, comparisonInfo, context) {
var inferenceResultTypes = argContext.inferTypeArguments();
var typeParameters = argContext.signatureBeingInferred.getTypeParameters();
TypeScript.Debug.assert(typeParameters.length == inferenceResultTypes.length);
var typeReplacementMapForConstraints = null;
for (var i = 0; i < inferenceResultTypes.length; i++) {
if (typeParameters[i].getConstraint()) {
typeReplacementMapForConstraints = typeReplacementMapForConstraints || TypeScript.PullInstantiationHelpers.createTypeParameterArgumentMap(typeParameters, inferenceResultTypes);
var associatedConstraint = this.instantiateType(typeParameters[i].getConstraint(), typeReplacementMapForConstraints);
if (!this.sourceIsAssignableToTargetWithNewEnclosingTypes(inferenceResultTypes[i], associatedConstraint, null, context, null, false)) {
inferenceResultTypes[i] = associatedConstraint;
}
}
}
if (argContext.isInvocationInferenceContext()) {
var invocationContext = argContext;
if (!this.typeParametersAreInScopeAtArgumentList(typeParameters, invocationContext.argumentASTs)) {
for (var i = 0; i < inferenceResultTypes.length; i++) {
if (inferenceResultTypes[i].wrapsSomeTypeParameter(argContext.candidateCache)) {
inferenceResultTypes[i] = this.semanticInfoChain.anyTypeSymbol;
}
}
}
}
return inferenceResultTypes;
};
PullTypeResolver.prototype.typeParametersAreInScopeAtArgumentList = function (typeParameters, args) {
var enclosingDecl = this.getEnclosingDeclForAST(args);
var typeParameterParentDecl = typeParameters[0].getDeclarations()[0].getParentDecl();
return enclosingDecl.getParentPath().indexOf(typeParameterParentDecl) > -1;
};
PullTypeResolver.prototype.relateTypeToTypeParametersInEnclosingType = function (expressionType, parameterType, argContext, context) {
if (expressionType && parameterType) {
if (context.oneOfClassificationsIsInfinitelyExpanding()) {
this.relateInifinitelyExpandingTypeToTypeParameters(expressionType, parameterType, argContext, context);
return;
}
}
this.relateTypeToTypeParameters(expressionType, parameterType, argContext, context);
};
PullTypeResolver.prototype.relateTypeToTypeParametersWithNewEnclosingTypes = function (expressionType, parameterType, argContext, context) {
var enclosingTypeWalkers = context.resetEnclosingTypeWalkers();
this.relateTypeToTypeParameters(expressionType, parameterType, argContext, context);
context.setEnclosingTypeWalkers(enclosingTypeWalkers);
};
PullTypeResolver.prototype.relateTypeToTypeParameters = function (expressionType, parameterType, argContext, context) {
if (!expressionType || !parameterType) {
return;
}
if (expressionType.isError()) {
expressionType = this.semanticInfoChain.anyTypeSymbol;
}
if (parameterType.isTypeParameter()) {
var typeParameter = parameterType;
argContext.addCandidateForInference(typeParameter, expressionType);
return;
}
if (parameterType.isNamedTypeSymbol() && !parameterType.isGeneric() && !parameterType.getTypeArguments()) {
return;
}
if (TypeScript.PullInstantiationHelpers.twoTypesAreInstantiationsOfSameNamedGenericType(expressionType, parameterType)) {
this.relateTypeArgumentsOfTypeToTypeParameters(expressionType, parameterType, argContext, context);
} else {
var symbolsWhenStartedWalkingTypes = context.startWalkingTypes(expressionType, parameterType);
this.relateObjectTypeToTypeParameters(expressionType, parameterType, argContext, context);
context.endWalkingTypes(symbolsWhenStartedWalkingTypes);
}
};
PullTypeResolver.prototype.relateTypeArgumentsOfTypeToTypeParameters = function (expressionType, parameterType, argContext, context) {
var parameterSideTypeArguments = parameterType.getTypeArguments();
var argumentSideTypeArguments = expressionType.getTypeArguments();
TypeScript.Debug.assert(parameterSideTypeArguments && argumentSideTypeArguments && parameterSideTypeArguments.length === argumentSideTypeArguments.length);
for (var i = 0; i < parameterSideTypeArguments.length; i++) {
this.relateTypeToTypeParametersWithNewEnclosingTypes(argumentSideTypeArguments[i], parameterSideTypeArguments[i], argContext, context);
}
};
PullTypeResolver.prototype.relateInifinitelyExpandingTypeToTypeParameters = function (expressionType, parameterType, argContext, context) {
if (!expressionType || !parameterType) {
return;
}
var expressionTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(expressionType);
var parameterTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(parameterType);
if (expressionTypeNamedTypeReference !== parameterTypeNamedTypeReference) {
return;
}
var expressionTypeTypeArguments = expressionType.getTypeArguments();
var parameterTypeArguments = parameterType.getTypeArguments();
if (expressionTypeTypeArguments && parameterTypeArguments && expressionTypeTypeArguments.length === parameterTypeArguments.length) {
for (var i = 0; i < expressionTypeTypeArguments.length; i++) {
this.relateTypeArgumentsOfTypeToTypeParameters(expressionType, parameterType, argContext, context);
}
}
};
PullTypeResolver.prototype.relateFunctionSignatureToTypeParameters = function (expressionSignature, parameterSignature, argContext, context) {
var _this = this;
var expressionReturnType = expressionSignature.returnType;
var parameterReturnType = parameterSignature.returnType;
parameterSignature.forAllCorrespondingParameterTypesInThisAndOtherSignature(expressionSignature, function (parameterSignatureParameterType, expressionSignatureParameterType, i) {
context.walkParameterTypes(i);
_this.relateTypeToTypeParametersInEnclosingType(expressionSignatureParameterType, parameterSignatureParameterType, argContext, context);
context.postWalkParameterTypes();
return true;
});
context.walkReturnTypes();
this.relateTypeToTypeParametersInEnclosingType(expressionReturnType, parameterReturnType, argContext, context);
context.postWalkReturnTypes();
};
PullTypeResolver.prototype.relateObjectTypeToTypeParameters = function (objectType, parameterType, argContext, context) {
var parameterTypeMembers = parameterType.getMembers();
var parameterSignatures;
var objectMember;
var objectSignatures;
if (argContext.alreadyRelatingTypes(objectType, parameterType)) {
return;
}
for (var i = 0; i < parameterTypeMembers.length; i++) {
objectMember = this.getNamedPropertySymbol(parameterTypeMembers[i].name, 68147712 /* SomeValue */, objectType);
if (objectMember) {
this.resolveDeclaredSymbol(objectMember);
this.resolveDeclaredSymbol(parameterTypeMembers[i]);
context.walkMemberTypes(parameterTypeMembers[i].name);
this.relateTypeToTypeParametersInEnclosingType(objectMember.type, parameterTypeMembers[i].type, argContext, context);
context.postWalkMemberTypes();
}
}
this.relateSignatureGroupToTypeParameters(objectType.getCallSignatures(), parameterType.getCallSignatures(), 1048576 /* CallSignature */, argContext, context);
this.relateSignatureGroupToTypeParameters(objectType.getConstructSignatures(), parameterType.getConstructSignatures(), 2097152 /* ConstructSignature */, argContext, context);
var parameterIndexSignatures = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(parameterType, context);
var objectIndexSignatures = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(objectType, context);
var indexSigInfo = context.getBothKindOfIndexSignatures(false, false);
if (parameterIndexSignatures.stringSignature && objectIndexSignatures.stringSignature) {
context.walkIndexSignatureReturnTypes(indexSigInfo, true, true, true);
this.relateFunctionSignatureToTypeParameters(objectIndexSignatures.stringSignature, parameterIndexSignatures.stringSignature, argContext, context);
context.postWalkIndexSignatureReturnTypes(true);
}
if (parameterIndexSignatures.numericSignature && objectIndexSignatures.numericSignature) {
context.walkIndexSignatureReturnTypes(indexSigInfo, false, false, true);
this.relateFunctionSignatureToTypeParameters(objectIndexSignatures.numericSignature, parameterIndexSignatures.numericSignature, argContext, context);
context.postWalkIndexSignatureReturnTypes(true);
}
};
PullTypeResolver.prototype.relateSignatureGroupToTypeParameters = function (argumentSignatures, parameterSignatures, signatureKind, argContext, context) {
for (var i = 0; i < parameterSignatures.length; i++) {
var paramSignature = parameterSignatures[i];
if (argumentSignatures.length > 0 && paramSignature.isGeneric()) {
paramSignature = this.instantiateSignatureToAny(paramSignature);
}
for (var j = 0; j < argumentSignatures.length; j++) {
var argumentSignature = argumentSignatures[j];
if (argumentSignature.nonOptionalParamCount > paramSignature.nonOptionalParamCount) {
continue;
}
if (argumentSignature.isGeneric()) {
argumentSignature = this.instantiateSignatureToAny(argumentSignature);
}
context.walkSignatures(signatureKind, j, i);
this.relateFunctionSignatureToTypeParameters(argumentSignature, paramSignature, argContext, context);
context.postWalkSignatures();
}
}
};
PullTypeResolver.prototype.alterPotentialGenericFunctionTypeToInstantiatedFunctionTypeForTypeArgumentInference = function (expressionSymbol, context) {
var inferentialType = context.getContextualType();
TypeScript.Debug.assert(inferentialType);
var expressionType = expressionSymbol.type;
if (this.isFunctionTypeWithExactlyOneCallSignatureAndNoOtherMembers(expressionType, true) && this.isFunctionTypeWithExactlyOneCallSignatureAndNoOtherMembers(inferentialType, false)) {
var genericExpressionSignature = expressionType.getCallSignatures()[0];
var contextualSignature = inferentialType.getCallSignatures()[0];
var instantiatedSignature = this.instantiateSignatureInContext(genericExpressionSignature, contextualSignature, context, true);
if (instantiatedSignature === null) {
return expressionSymbol;
}
var newType = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */);
newType.appendCallSignature(instantiatedSignature);
return newType;
}
return expressionSymbol;
};
PullTypeResolver.prototype.isFunctionTypeWithExactlyOneCallSignatureAndNoOtherMembers = function (type, callSignatureShouldBeGeneric) {
TypeScript.Debug.assert(type);
if (type.getCallSignatures().length !== 1) {
return false;
}
var callSignatureIsGeneric = type.getCallSignatures()[0].isGeneric();
if (callSignatureIsGeneric !== callSignatureShouldBeGeneric) {
return false;
}
var typeHasOtherMembers = type.getConstructSignatures().length || type.getIndexSignatures().length || type.getAllMembers(68147712 /* SomeValue */, 0 /* all */).length;
if (typeHasOtherMembers) {
return false;
}
return true;
};
PullTypeResolver.prototype.instantiateTypeToAny = function (typeToSpecialize, context) {
var typeParameters = typeToSpecialize.getTypeParameters();
if (!typeParameters.length) {
return typeToSpecialize;
}
var typeArguments = null;
if (!this._cachedAnyTypeArgs) {
this._cachedAnyTypeArgs = [
[this.semanticInfoChain.anyTypeSymbol],
[this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol],
[this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol],
[this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol],
[this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol]
];
}
if (typeParameters.length < this._cachedAnyTypeArgs.length) {
typeArguments = this._cachedAnyTypeArgs[typeParameters.length - 1];
} else {
typeArguments = [];
for (var i = 0; i < typeParameters.length; i++) {
typeArguments[typeArguments.length] = this.semanticInfoChain.anyTypeSymbol;
}
}
var type = this.createInstantiatedType(typeToSpecialize, typeArguments);
return type;
};
PullTypeResolver.prototype.instantiateSignatureToAny = function (signature) {
var typeParameters = signature.getTypeParameters();
if (!this._cachedAnyTypeArgs) {
this._cachedAnyTypeArgs = [
[this.semanticInfoChain.anyTypeSymbol],
[this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol],
[this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol],
[this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol],
[this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol]
];
}
if (typeParameters.length < this._cachedAnyTypeArgs.length) {
var typeArguments = this._cachedAnyTypeArgs[typeParameters.length - 1];
} else {
var typeArguments = [];
for (var i = 0; i < typeParameters.length; i++) {
typeArguments[typeArguments.length] = this.semanticInfoChain.anyTypeSymbol;
}
}
var typeParameterArgumentMap = TypeScript.PullInstantiationHelpers.createTypeParameterArgumentMap(typeParameters, typeArguments);
return this.instantiateSignature(signature, typeParameterArgumentMap);
};
PullTypeResolver.typeCheck = function (compilationSettings, semanticInfoChain, document) {
var sourceUnit = document.sourceUnit();
var resolver = semanticInfoChain.getResolver();
var context = new TypeScript.PullTypeResolutionContext(resolver, true, sourceUnit.fileName());
if (resolver.canTypeCheckAST(sourceUnit, context)) {
resolver.resolveAST(sourceUnit, false, context);
resolver.validateVariableDeclarationGroups(semanticInfoChain.getDeclForAST(sourceUnit), context);
while (resolver.typeCheckCallBacks.length) {
var callBack = resolver.typeCheckCallBacks.pop();
callBack(context);
}
resolver.processPostTypeCheckWorkItems(context);
}
};
PullTypeResolver.prototype.validateVariableDeclarationGroups = function (enclosingDecl, context) {
var _this = this;
this.scanVariableDeclarationGroups(enclosingDecl, function (_) {
}, function (subsequentDecl, firstSymbol) {
if (TypeScript.hasFlag(subsequentDecl.kind, 2048 /* Parameter */) || TypeScript.hasFlag(subsequentDecl.flags, 8388608 /* PropertyParameter */)) {
return;
}
var boundDeclAST = _this.semanticInfoChain.getASTForDecl(subsequentDecl);
var symbol = subsequentDecl.getSymbol();
var symbolType = symbol.type;
var firstSymbolType = firstSymbol.type;
if (symbolType && firstSymbolType && symbolType !== firstSymbolType && !_this.typesAreIdentical(symbolType, firstSymbolType, context)) {
context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(boundDeclAST, TypeScript.DiagnosticCode.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2, [symbol.getScopedName(), firstSymbolType.toString(firstSymbol), symbolType.toString(symbol)]));
}
});
};
PullTypeResolver.prototype.typeCheckFunctionOverloads = function (funcDecl, context, signature, allSignatures) {
if (!signature) {
var functionSignatureInfo = TypeScript.PullHelpers.getSignatureForFuncDecl(this.semanticInfoChain.getDeclForAST(funcDecl));
signature = functionSignatureInfo.signature;
allSignatures = functionSignatureInfo.allSignatures;
}
var functionDeclaration = this.semanticInfoChain.getDeclForAST(funcDecl);
var funcSymbol = functionDeclaration.getSymbol();
var definitionSignature = null;
for (var i = allSignatures.length - 1; i >= 0; i--) {
if (allSignatures[i].isDefinition()) {
definitionSignature = allSignatures[i];
break;
}
}
if (!signature.isDefinition()) {
var signatureParentDecl = signature.getDeclarations()[0].getParentDecl();
for (var i = 0; i < allSignatures.length; i++) {
if (allSignatures[i] === signature) {
break;
}
var allSignaturesParentDecl = allSignatures[i].getDeclarations()[0].getParentDecl();
if (allSignaturesParentDecl !== signatureParentDecl) {
continue;
}
if (this.signaturesAreIdenticalWithNewEnclosingTypes(allSignatures[i], signature, context, false)) {
if (!this.signatureReturnTypesAreIdentical(allSignatures[i], signature, context)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Overloads_cannot_differ_only_by_return_type));
} else if (funcDecl.kind() === 137 /* ConstructorDeclaration */) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Duplicate_constructor_overload_signature));
} else if (functionDeclaration.kind === 2097152 /* ConstructSignature */) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Duplicate_overload_construct_signature));
} else if (functionDeclaration.kind === 1048576 /* CallSignature */) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Duplicate_overload_call_signature));
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Duplicate_overload_signature_for_0, [funcSymbol.getScopedNameEx().toString()]));
}
break;
}
}
}
var isConstantOverloadSignature = signature.isStringConstantOverloadSignature();
if (isConstantOverloadSignature) {
if (signature.isDefinition()) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Overload_signature_implementation_cannot_use_specialized_type));
} else {
var foundSubtypeSignature = false;
for (var i = 0; i < allSignatures.length; i++) {
if (allSignatures[i].isDefinition() || allSignatures[i] === signature) {
continue;
}
if (!allSignatures[i].isResolved) {
this.resolveDeclaredSymbol(allSignatures[i], context);
}
if (allSignatures[i].isStringConstantOverloadSignature()) {
continue;
}
if (this.signatureIsAssignableToTarget(signature, allSignatures[i], null, context)) {
foundSubtypeSignature = true;
break;
}
}
if (!foundSubtypeSignature) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature));
}
}
} else if (definitionSignature && definitionSignature !== signature) {
var comparisonInfo = new TypeComparisonInfo();
if (!definitionSignature.isResolved) {
this.resolveDeclaredSymbol(definitionSignature, context);
}
if (!this.signatureIsAssignableToTarget(definitionSignature, signature, funcDecl, context, comparisonInfo)) {
if (comparisonInfo.message) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Overload_signature_is_not_compatible_with_function_definition_NL_0, [comparisonInfo.message]));
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Overload_signature_is_not_compatible_with_function_definition));
}
}
}
var signatureForVisibilityCheck = definitionSignature;
if (!definitionSignature) {
if (allSignatures[0] === signature) {
return;
}
signatureForVisibilityCheck = allSignatures[0];
}
if (funcDecl.kind() !== 137 /* ConstructorDeclaration */ && functionDeclaration.kind !== 2097152 /* ConstructSignature */ && signatureForVisibilityCheck && signature !== signatureForVisibilityCheck) {
var errorCode;
if (signatureForVisibilityCheck.anyDeclHasFlag(2 /* Private */) !== signature.anyDeclHasFlag(2 /* Private */)) {
errorCode = TypeScript.DiagnosticCode.Overload_signatures_must_all_be_public_or_private;
} else if (signatureForVisibilityCheck.anyDeclHasFlag(1 /* Exported */) !== signature.anyDeclHasFlag(1 /* Exported */)) {
errorCode = TypeScript.DiagnosticCode.Overload_signatures_must_all_be_exported_or_not_exported;
} else if (signatureForVisibilityCheck.anyDeclHasFlag(8 /* Ambient */) !== signature.anyDeclHasFlag(8 /* Ambient */)) {
errorCode = TypeScript.DiagnosticCode.Overload_signatures_must_all_be_ambient_or_non_ambient;
} else if (signatureForVisibilityCheck.anyDeclHasFlag(128 /* Optional */) !== signature.anyDeclHasFlag(128 /* Optional */)) {
errorCode = TypeScript.DiagnosticCode.Overload_signatures_must_all_be_optional_or_required;
}
if (errorCode) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, errorCode));
}
}
};
PullTypeResolver.prototype.checkSymbolPrivacy = function (declSymbol, symbol, privacyErrorReporter) {
if (!symbol || symbol.kind === 2 /* Primitive */) {
return;
}
if (symbol.isType()) {
var typeSymbol = symbol;
var isNamedType = typeSymbol.isNamedTypeSymbol();
if (typeSymbol.isArrayNamedTypeReference()) {
this.checkSymbolPrivacy(declSymbol, typeSymbol.getElementType(), privacyErrorReporter);
return;
}
if (!isNamedType) {
var typeOfSymbol = typeSymbol.getTypeOfSymbol();
if (typeOfSymbol) {
this.checkSymbolPrivacy(declSymbol, typeOfSymbol, privacyErrorReporter);
return;
}
}
if (typeSymbol.inSymbolPrivacyCheck) {
return;
}
typeSymbol.inSymbolPrivacyCheck = true;
var typars = typeSymbol.getTypeArgumentsOrTypeParameters();
if (typars) {
for (var i = 0; i < typars.length; i++) {
this.checkSymbolPrivacy(declSymbol, typars[i], privacyErrorReporter);
}
}
if (!isNamedType) {
var members = typeSymbol.getMembers();
for (var i = 0; i < members.length; i++) {
this.checkSymbolPrivacy(declSymbol, members[i].type, privacyErrorReporter);
}
this.checkTypePrivacyOfSignatures(declSymbol, typeSymbol.getCallSignatures(), privacyErrorReporter);
this.checkTypePrivacyOfSignatures(declSymbol, typeSymbol.getConstructSignatures(), privacyErrorReporter);
this.checkTypePrivacyOfSignatures(declSymbol, typeSymbol.getIndexSignatures(), privacyErrorReporter);
} else if (typeSymbol.kind === 8192 /* TypeParameter */) {
this.checkSymbolPrivacy(declSymbol, typeSymbol.getConstraint(), privacyErrorReporter);
}
typeSymbol.inSymbolPrivacyCheck = false;
if (!isNamedType) {
return;
}
}
if (declSymbol.isExternallyVisible()) {
var symbolIsVisible = symbol.isExternallyVisible();
if (symbolIsVisible && symbol.kind !== 8192 /* TypeParameter */) {
var symbolPath = symbol.pathToRoot();
var declSymbolPath = declSymbol.pathToRoot();
if (symbolPath[symbolPath.length - 1].kind === 32 /* DynamicModule */ && declSymbolPath[declSymbolPath.length - 1].kind === 32 /* DynamicModule */ && declSymbolPath[declSymbolPath.length - 1] !== symbolPath[symbolPath.length - 1]) {
symbolIsVisible = false;
var declSymbolScope = declSymbolPath[declSymbolPath.length - 1];
for (var i = symbolPath.length - 1; i >= 0; i--) {
var aliasSymbols = symbolPath[i].getExternalAliasedSymbols(declSymbolScope);
if (aliasSymbols) {
symbolIsVisible = true;
aliasSymbols[0].setTypeUsedExternally();
break;
}
}
symbol = symbolPath[symbolPath.length - 1];
}
} else if (symbol.kind === 128 /* TypeAlias */) {
var aliasSymbol = symbol;
symbolIsVisible = true;
aliasSymbol.setTypeUsedExternally();
}
if (!symbolIsVisible) {
privacyErrorReporter(symbol);
}
}
};
PullTypeResolver.prototype.checkTypePrivacyOfSignatures = function (declSymbol, signatures, privacyErrorReporter) {
for (var i = 0; i < signatures.length; i++) {
var signature = signatures[i];
if (signatures.length > 1 && signature.isDefinition()) {
continue;
}
var typeParams = signature.getTypeParameters();
for (var j = 0; j < typeParams.length; j++) {
this.checkSymbolPrivacy(declSymbol, typeParams[j], privacyErrorReporter);
}
var params = signature.parameters;
for (var j = 0; j < params.length; j++) {
var paramType = params[j].type;
this.checkSymbolPrivacy(declSymbol, paramType, privacyErrorReporter);
}
var returnType = signature.returnType;
this.checkSymbolPrivacy(declSymbol, returnType, privacyErrorReporter);
}
};
PullTypeResolver.prototype.typeParameterOfTypeDeclarationPrivacyErrorReporter = function (classOrInterface, typeParameterAST, typeParameter, symbol, context) {
var decl = this.semanticInfoChain.getDeclForAST(classOrInterface);
var enclosingDecl = this.getEnclosingDecl(decl);
var enclosingSymbol = enclosingDecl ? enclosingDecl.getSymbol() : null;
var messageCode;
var typeParameters = classOrInterface.kind() === 131 /* ClassDeclaration */ ? classOrInterface.typeParameterList : classOrInterface.typeParameterList;
var typeSymbol = symbol;
var typeSymbolName = typeSymbol.getScopedName(enclosingSymbol);
if (typeSymbol.isContainer() && !typeSymbol.isEnum()) {
if (!TypeScript.isQuoted(typeSymbolName)) {
typeSymbolName = "'" + typeSymbolName + "'";
}
if (classOrInterface.kind() === 131 /* ClassDeclaration */) {
messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_class_is_using_inaccessible_module_1;
} else {
messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_interface_is_using_inaccessible_module_1;
}
} else {
if (classOrInterface.kind() === 131 /* ClassDeclaration */) {
messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_class_has_or_is_using_private_type_1;
} else {
messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_interface_has_or_is_using_private_type_1;
}
}
var messageArguments = [typeParameter.getScopedName(enclosingSymbol, false, true), typeSymbolName];
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(typeParameterAST, messageCode, messageArguments));
};
PullTypeResolver.prototype.baseListPrivacyErrorReporter = function (classOrInterface, declSymbol, baseAst, isExtendedType, symbol, context) {
var decl = this.semanticInfoChain.getDeclForAST(classOrInterface);
var enclosingDecl = this.getEnclosingDecl(decl);
var enclosingSymbol = enclosingDecl ? enclosingDecl.getSymbol() : null;
var messageCode;
var typeSymbol = symbol;
var typeSymbolName = typeSymbol.getScopedName(enclosingSymbol);
if (typeSymbol.isContainer() && !typeSymbol.isEnum()) {
if (!TypeScript.isQuoted(typeSymbolName)) {
typeSymbolName = "'" + typeSymbolName + "'";
}
if (classOrInterface.kind() === 131 /* ClassDeclaration */) {
if (isExtendedType) {
messageCode = TypeScript.DiagnosticCode.Exported_class_0_extends_class_from_inaccessible_module_1;
} else {
messageCode = TypeScript.DiagnosticCode.Exported_class_0_implements_interface_from_inaccessible_module_1;
}
} else {
messageCode = TypeScript.DiagnosticCode.Exported_interface_0_extends_interface_from_inaccessible_module_1;
}
} else {
if (classOrInterface.kind() === 131 /* ClassDeclaration */) {
if (isExtendedType) {
messageCode = TypeScript.DiagnosticCode.Exported_class_0_extends_private_class_1;
} else {
messageCode = TypeScript.DiagnosticCode.Exported_class_0_implements_private_interface_1;
}
} else {
messageCode = TypeScript.DiagnosticCode.Exported_interface_0_extends_private_interface_1;
}
}
var messageArguments = [declSymbol.getScopedName(enclosingSymbol), typeSymbolName];
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(baseAst, messageCode, messageArguments));
};
PullTypeResolver.prototype.variablePrivacyErrorReporter = function (declAST, declSymbol, symbol, context) {
var typeSymbol = symbol;
var enclosingDecl = this.getEnclosingDecl(declSymbol.getDeclarations()[0]);
var enclosingSymbol = enclosingDecl ? enclosingDecl.getSymbol() : null;
var isProperty = declSymbol.kind === 4096 /* Property */;
var isPropertyOfClass = false;
var declParent = declSymbol.getContainer();
if (declParent && (declParent.kind === 8 /* Class */ || declParent.kind === 32768 /* ConstructorMethod */)) {
isPropertyOfClass = true;
}
var messageCode;
var typeSymbolName = typeSymbol.getScopedName(enclosingSymbol);
if (typeSymbol.isContainer() && !typeSymbol.isEnum()) {
if (!TypeScript.isQuoted(typeSymbolName)) {
typeSymbolName = "'" + typeSymbolName + "'";
}
if (declSymbol.anyDeclHasFlag(16 /* Static */)) {
messageCode = TypeScript.DiagnosticCode.Public_static_property_0_of_exported_class_is_using_inaccessible_module_1;
} else if (isProperty) {
if (isPropertyOfClass) {
messageCode = TypeScript.DiagnosticCode.Public_property_0_of_exported_class_is_using_inaccessible_module_1;
} else {
messageCode = TypeScript.DiagnosticCode.Property_0_of_exported_interface_is_using_inaccessible_module_1;
}
} else {
messageCode = TypeScript.DiagnosticCode.Exported_variable_0_is_using_inaccessible_module_1;
}
} else {
if (declSymbol.anyDeclHasFlag(16 /* Static */)) {
messageCode = TypeScript.DiagnosticCode.Public_static_property_0_of_exported_class_has_or_is_using_private_type_1;
} else if (isProperty) {
if (isPropertyOfClass) {
messageCode = TypeScript.DiagnosticCode.Public_property_0_of_exported_class_has_or_is_using_private_type_1;
} else {
messageCode = TypeScript.DiagnosticCode.Property_0_of_exported_interface_has_or_is_using_private_type_1;
}
} else {
messageCode = TypeScript.DiagnosticCode.Exported_variable_0_has_or_is_using_private_type_1;
}
}
var messageArguments = [declSymbol.getScopedName(enclosingSymbol), typeSymbolName];
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(declAST, messageCode, messageArguments));
};
PullTypeResolver.prototype.checkFunctionTypePrivacy = function (funcDeclAST, isStatic, typeParameters, parameters, returnTypeAnnotation, block, context) {
var _this = this;
if (funcDeclAST.kind() === 222 /* FunctionExpression */ || funcDeclAST.kind() === 241 /* FunctionPropertyAssignment */ || (funcDeclAST.kind() === 139 /* GetAccessor */ && funcDeclAST.parent.parent.kind() === 215 /* ObjectLiteralExpression */) || (funcDeclAST.kind() === 140 /* SetAccessor */ && funcDeclAST.parent.parent.kind() === 215 /* ObjectLiteralExpression */)) {
return;
}
var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST);
var functionSymbol = functionDecl.getSymbol();
;
var functionSignature;
var isGetter = funcDeclAST.kind() === 139 /* GetAccessor */;
var isSetter = funcDeclAST.kind() === 140 /* SetAccessor */;
var isIndexSignature = functionDecl.kind === 4194304 /* IndexSignature */;
if (isGetter || isSetter) {
var accessorSymbol = functionSymbol;
functionSignature = (isGetter ? accessorSymbol.getGetter() : accessorSymbol.getSetter()).type.getCallSignatures()[0];
} else {
if (!functionSymbol) {
var parentDecl = functionDecl.getParentDecl();
functionSymbol = parentDecl.getSymbol();
if (functionSymbol && functionSymbol.isType() && !functionSymbol.isNamedTypeSymbol()) {
return;
}
} else if (functionSymbol.kind === 65536 /* Method */ && !isStatic && !functionSymbol.getContainer().isNamedTypeSymbol()) {
return;
}
functionSignature = functionDecl.getSignatureSymbol();
}
if (typeParameters && !isGetter && !isSetter && !isIndexSignature && funcDeclAST.kind() !== 137 /* ConstructorDeclaration */) {
for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) {
var typeParameterAST = typeParameters.typeParameters.nonSeparatorAt(i);
var typeParameter = this.resolveTypeParameterDeclaration(typeParameterAST, context);
this.checkSymbolPrivacy(functionSymbol, typeParameter, function (symbol) {
return _this.functionTypeArgumentArgumentTypePrivacyErrorReporter(funcDeclAST, isStatic, typeParameterAST, typeParameter, symbol, context);
});
}
}
if (!isGetter && !isIndexSignature) {
var funcParams = functionSignature.parameters;
for (var i = 0; i < funcParams.length; i++) {
this.checkSymbolPrivacy(functionSymbol, funcParams[i].type, function (symbol) {
return _this.functionArgumentTypePrivacyErrorReporter(funcDeclAST, isStatic, parameters, i, funcParams[i], symbol, context);
});
}
}
if (!isSetter) {
this.checkSymbolPrivacy(functionSymbol, functionSignature.returnType, function (symbol) {
return _this.functionReturnTypePrivacyErrorReporter(funcDeclAST, isStatic, returnTypeAnnotation, block, functionSignature.returnType, symbol, context);
});
}
};
PullTypeResolver.prototype.functionTypeArgumentArgumentTypePrivacyErrorReporter = function (declAST, isStatic, typeParameterAST, typeParameter, symbol, context) {
var decl = this.semanticInfoChain.getDeclForAST(declAST);
var enclosingDecl = this.getEnclosingDecl(decl);
var enclosingSymbol = enclosingDecl ? enclosingDecl.getSymbol() : null;
var isMethod = decl.kind === 65536 /* Method */;
var isMethodOfClass = false;
var declParent = decl.getParentDecl();
if (declParent && (declParent.kind === 8 /* Class */ || isStatic)) {
isMethodOfClass = true;
}
var typeSymbol = symbol;
var typeSymbolName = typeSymbol.getScopedName(enclosingSymbol);
var messageCode;
if (typeSymbol.isContainer() && !typeSymbol.isEnum()) {
if (!TypeScript.isQuoted(typeSymbolName)) {
typeSymbolName = "'" + typeSymbolName + "'";
}
if (decl.kind === 2097152 /* ConstructSignature */) {
messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_1;
} else if (decl.kind === 1048576 /* CallSignature */) {
messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_call_signature_from_exported_interface_is_using_inaccessible_module_1;
} else if (isMethod) {
if (isStatic) {
messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_public_static_method_from_exported_class_is_using_inaccessible_module_1;
} else if (isMethodOfClass) {
messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_public_method_from_exported_class_is_using_inaccessible_module_1;
} else {
messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_method_from_exported_interface_is_using_inaccessible_module_1;
}
} else {
messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_function_is_using_inaccessible_module_1;
}
} else {
if (decl.kind === 2097152 /* ConstructSignature */) {
messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1;
} else if (decl.kind === 1048576 /* CallSignature */) {
messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_type_1;
} else if (isMethod) {
if (isStatic) {
messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1;
} else if (isMethodOfClass) {
messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1;
} else {
messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1;
}
} else {
messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_function_has_or_is_using_private_type_1;
}
}
if (messageCode) {
var messageArgs = [typeParameter.getScopedName(enclosingSymbol, false, true), typeSymbolName];
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(typeParameterAST, messageCode, messageArgs));
}
};
PullTypeResolver.prototype.functionArgumentTypePrivacyErrorReporter = function (declAST, isStatic, parameters, argIndex, paramSymbol, symbol, context) {
var decl = this.semanticInfoChain.getDeclForAST(declAST);
var enclosingDecl = this.getEnclosingDecl(decl);
var enclosingSymbol = enclosingDecl ? enclosingDecl.getSymbol() : null;
var isGetter = declAST.kind() === 139 /* GetAccessor */;
var isSetter = declAST.kind() === 140 /* SetAccessor */;
var isMethod = decl.kind === 65536 /* Method */;
var isMethodOfClass = false;
var declParent = decl.getParentDecl();
if (declParent && (declParent.kind === 8 /* Class */ || isStatic)) {
isMethodOfClass = true;
}
var typeSymbol = symbol;
var typeSymbolName = typeSymbol.getScopedName(enclosingSymbol);
var messageCode;
if (typeSymbol.isContainer() && !typeSymbol.isEnum()) {
if (!TypeScript.isQuoted(typeSymbolName)) {
typeSymbolName = "'" + typeSymbolName + "'";
}
if (declAST.kind() === 137 /* ConstructorDeclaration */) {
messageCode = TypeScript.DiagnosticCode.Parameter_0_of_constructor_from_exported_class_is_using_inaccessible_module_1;
} else if (isSetter) {
if (isStatic) {
messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_static_property_setter_from_exported_class_is_using_inaccessible_module_1;
} else {
messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_property_setter_from_exported_class_is_using_inaccessible_module_1;
}
} else if (decl.kind === 2097152 /* ConstructSignature */) {
messageCode = TypeScript.DiagnosticCode.Parameter_0_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_1;
} else if (decl.kind === 1048576 /* CallSignature */) {
messageCode = TypeScript.DiagnosticCode.Parameter_0_of_call_signature_from_exported_interface_is_using_inaccessible_module_1;
} else if (isMethod) {
if (isStatic) {
messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_static_method_from_exported_class_is_using_inaccessible_module_1;
} else if (isMethodOfClass) {
messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_method_from_exported_class_is_using_inaccessible_module_1;
} else {
messageCode = TypeScript.DiagnosticCode.Parameter_0_of_method_from_exported_interface_is_using_inaccessible_module_1;
}
} else if (!isGetter) {
messageCode = TypeScript.DiagnosticCode.Parameter_0_of_exported_function_is_using_inaccessible_module_1;
}
} else {
if (declAST.kind() === 137 /* ConstructorDeclaration */) {
messageCode = TypeScript.DiagnosticCode.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_type_1;
} else if (isSetter) {
if (isStatic) {
messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_type_1;
} else {
messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_type_1;
}
} else if (decl.kind === 2097152 /* ConstructSignature */) {
messageCode = TypeScript.DiagnosticCode.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1;
} else if (decl.kind === 1048576 /* CallSignature */) {
messageCode = TypeScript.DiagnosticCode.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_type_1;
} else if (isMethod) {
if (isStatic) {
messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1;
} else if (isMethodOfClass) {
messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1;
} else {
messageCode = TypeScript.DiagnosticCode.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1;
}
} else if (!isGetter && decl.kind !== 4194304 /* IndexSignature */) {
messageCode = TypeScript.DiagnosticCode.Parameter_0_of_exported_function_has_or_is_using_private_type_1;
}
}
if (messageCode) {
var parameter = parameters.astAt(argIndex);
var messageArgs = [paramSymbol.getScopedName(enclosingSymbol), typeSymbolName];
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(parameter, messageCode, messageArgs));
}
};
PullTypeResolver.prototype.functionReturnTypePrivacyErrorReporter = function (declAST, isStatic, returnTypeAnnotation, block, funcReturnType, symbol, context) {
var _this = this;
var decl = this.semanticInfoChain.getDeclForAST(declAST);
var enclosingDecl = this.getEnclosingDecl(decl);
var isGetter = declAST.kind() === 139 /* GetAccessor */;
var isSetter = declAST.kind() === 140 /* SetAccessor */;
var isMethod = decl.kind === 65536 /* Method */;
var isMethodOfClass = false;
var declParent = decl.getParentDecl();
if (declParent && (declParent.kind === 8 /* Class */ || isStatic)) {
isMethodOfClass = true;
}
var messageCode = null;
var typeSymbol = symbol;
var typeSymbolName = typeSymbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null);
if (typeSymbol.isContainer() && !typeSymbol.isEnum()) {
if (!TypeScript.isQuoted(typeSymbolName)) {
typeSymbolName = "'" + typeSymbolName + "'";
}
if (isGetter) {
if (isStatic) {
messageCode = TypeScript.DiagnosticCode.Return_type_of_public_static_property_getter_from_exported_class_is_using_inaccessible_module_0;
} else {
messageCode = TypeScript.DiagnosticCode.Return_type_of_public_property_getter_from_exported_class_is_using_inaccessible_module_0;
}
} else if (decl.kind === 2097152 /* ConstructSignature */) {
messageCode = TypeScript.DiagnosticCode.Return_type_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_0;
} else if (decl.kind === 1048576 /* CallSignature */) {
messageCode = TypeScript.DiagnosticCode.Return_type_of_call_signature_from_exported_interface_is_using_inaccessible_module_0;
} else if (decl.kind === 4194304 /* IndexSignature */) {
messageCode = TypeScript.DiagnosticCode.Return_type_of_index_signature_from_exported_interface_is_using_inaccessible_module_0;
} else if (isMethod) {
if (isStatic) {
messageCode = TypeScript.DiagnosticCode.Return_type_of_public_static_method_from_exported_class_is_using_inaccessible_module_0;
} else if (isMethodOfClass) {
messageCode = TypeScript.DiagnosticCode.Return_type_of_public_method_from_exported_class_is_using_inaccessible_module_0;
} else {
messageCode = TypeScript.DiagnosticCode.Return_type_of_method_from_exported_interface_is_using_inaccessible_module_0;
}
} else if (!isSetter && declAST.kind() !== 137 /* ConstructorDeclaration */) {
messageCode = TypeScript.DiagnosticCode.Return_type_of_exported_function_is_using_inaccessible_module_0;
}
} else {
if (isGetter) {
if (isStatic) {
messageCode = TypeScript.DiagnosticCode.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_type_0;
} else {
messageCode = TypeScript.DiagnosticCode.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_type_0;
}
} else if (decl.kind === 2097152 /* ConstructSignature */) {
messageCode = TypeScript.DiagnosticCode.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_0;
} else if (decl.kind === 1048576 /* CallSignature */) {
messageCode = TypeScript.DiagnosticCode.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_type_0;
} else if (decl.kind === 4194304 /* IndexSignature */) {
messageCode = TypeScript.DiagnosticCode.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_type_0;
} else if (isMethod) {
if (isStatic) {
messageCode = TypeScript.DiagnosticCode.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_type_0;
} else if (isMethodOfClass) {
messageCode = TypeScript.DiagnosticCode.Return_type_of_public_method_from_exported_class_has_or_is_using_private_type_0;
} else {
messageCode = TypeScript.DiagnosticCode.Return_type_of_method_from_exported_interface_has_or_is_using_private_type_0;
}
} else if (!isSetter && declAST.kind() !== 137 /* ConstructorDeclaration */) {
messageCode = TypeScript.DiagnosticCode.Return_type_of_exported_function_has_or_is_using_private_type_0;
}
}
if (messageCode) {
var messageArguments = [typeSymbolName];
var reportOnFuncDecl = false;
if (returnTypeAnnotation) {
var returnExpressionSymbol = this.resolveTypeReference(returnTypeAnnotation, context);
if (TypeScript.PullHelpers.typeSymbolsAreIdentical(returnExpressionSymbol, funcReturnType)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(returnTypeAnnotation, messageCode, messageArguments));
}
}
if (block) {
var reportErrorOnReturnExpressions = function (ast, walker) {
var go = true;
switch (ast.kind()) {
case 129 /* FunctionDeclaration */:
case 219 /* SimpleArrowFunctionExpression */:
case 218 /* ParenthesizedArrowFunctionExpression */:
case 222 /* FunctionExpression */:
go = false;
break;
case 150 /* ReturnStatement */:
var returnStatement = ast;
var returnExpressionSymbol = _this.resolveAST(returnStatement.expression, false, context).type;
if (TypeScript.PullHelpers.typeSymbolsAreIdentical(returnExpressionSymbol, funcReturnType)) {
context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(returnStatement, messageCode, messageArguments));
} else {
reportOnFuncDecl = true;
}
go = false;
break;
default:
break;
}
walker.options.goChildren = go;
return ast;
};
TypeScript.getAstWalkerFactory().walk(block, reportErrorOnReturnExpressions);
}
if (reportOnFuncDecl) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(declAST, messageCode, messageArguments));
}
}
};
PullTypeResolver.prototype.enclosingClassIsDerived = function (classDecl) {
TypeScript.Debug.assert(classDecl.kind === 8 /* Class */);
var classSymbol = classDecl.getSymbol();
return classSymbol.getExtendedTypes().length > 0;
};
PullTypeResolver.prototype.isSuperInvocationExpression = function (ast) {
if (ast.kind() === 213 /* InvocationExpression */) {
var invocationExpression = ast;
if (invocationExpression.expression.kind() === 50 /* SuperKeyword */) {
return true;
}
}
return false;
};
PullTypeResolver.prototype.isSuperInvocationExpressionStatement = function (node) {
if (node && node.kind() === 149 /* ExpressionStatement */) {
var expressionStatement = node;
if (this.isSuperInvocationExpression(expressionStatement.expression)) {
return true;
}
}
return false;
};
PullTypeResolver.prototype.getFirstStatementOfBlockOrNull = function (block) {
if (block && block.statements && block.statements.childCount() > 0) {
return block.statements.childAt(0);
}
return null;
};
PullTypeResolver.prototype.superCallMustBeFirstStatementInConstructor = function (constructorDecl) {
TypeScript.Debug.assert(constructorDecl.kind === 32768 /* ConstructorMethod */);
if (constructorDecl) {
var enclosingClass = constructorDecl.getParentDecl();
var classSymbol = enclosingClass.getSymbol();
if (classSymbol.getExtendedTypes().length === 0) {
return false;
}
var classMembers = classSymbol.getMembers();
for (var i = 0, n1 = classMembers.length; i < n1; i++) {
var member = classMembers[i];
if (member.kind === 4096 /* Property */) {
var declarations = member.getDeclarations();
for (var j = 0, n2 = declarations.length; j < n2; j++) {
var declaration = declarations[j];
var ast = this.semanticInfoChain.getASTForDecl(declaration);
if (ast.kind() === 242 /* Parameter */) {
return true;
}
if (ast.kind() === 136 /* MemberVariableDeclaration */) {
var variableDeclarator = ast;
if (variableDeclarator.variableDeclarator.equalsValueClause) {
return true;
}
}
}
}
}
}
return false;
};
PullTypeResolver.prototype.checkForThisCaptureInArrowFunction = function (expression) {
var enclosingDecl = this.getEnclosingDeclForAST(expression);
var declPath = enclosingDecl.getParentPath();
if (declPath.length) {
var inArrowFunction = false;
for (var i = declPath.length - 1; i >= 0; i--) {
var decl = declPath[i];
var declKind = decl.kind;
var declFlags = decl.flags;
if (declKind === 131072 /* FunctionExpression */ && TypeScript.hasFlag(declFlags, 8192 /* ArrowFunction */)) {
inArrowFunction = true;
continue;
}
if (inArrowFunction) {
if (declKind === 16384 /* Function */ || declKind === 65536 /* Method */ || declKind === 32768 /* ConstructorMethod */ || declKind === 262144 /* GetAccessor */ || declKind === 524288 /* SetAccessor */ || declKind === 131072 /* FunctionExpression */ || declKind === 8 /* Class */ || declKind === 4 /* Container */ || declKind === 32 /* DynamicModule */ || declKind === 1 /* Script */) {
decl.setFlags(decl.flags | 262144 /* MustCaptureThis */);
if (declKind === 8 /* Class */) {
var constructorSymbol = decl.getSymbol().getConstructorMethod();
var constructorDecls = constructorSymbol.getDeclarations();
for (var i = 0; i < constructorDecls.length; i++) {
constructorDecls[i].flags = constructorDecls[i].flags | 262144 /* MustCaptureThis */;
}
}
break;
}
} else if (declKind === 16384 /* Function */ || declKind === 131072 /* FunctionExpression */) {
break;
}
}
}
};
PullTypeResolver.prototype.typeCheckMembersAgainstIndexer = function (containerType, containerTypeDecl, context) {
var indexSignatures = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(containerType, context);
var stringSignature = indexSignatures.stringSignature;
var numberSignature = indexSignatures.numericSignature;
if (stringSignature || numberSignature) {
var members = containerTypeDecl.getChildDecls();
for (var i = 0; i < members.length; i++) {
var member = members[i];
if ((member.name || (member.kind === 4096 /* Property */ && member.name === "")) && member.kind !== 32768 /* ConstructorMethod */ && !TypeScript.hasFlag(member.flags, 16 /* Static */)) {
var memberSymbol = member.getSymbol();
var relevantSignature = this.determineRelevantIndexerForMember(memberSymbol, numberSignature, stringSignature);
if (relevantSignature) {
var comparisonInfo = new TypeComparisonInfo();
if (!this.sourceIsAssignableToTarget(memberSymbol.type, relevantSignature.returnType, member.ast(), context, comparisonInfo)) {
this.reportErrorThatMemberIsNotSubtypeOfIndexer(memberSymbol, relevantSignature, member.ast(), context, comparisonInfo);
}
}
}
}
}
};
PullTypeResolver.prototype.determineRelevantIndexerForMember = function (member, numberIndexSignature, stringIndexSignature) {
if (numberIndexSignature && TypeScript.PullHelpers.isNameNumeric(member.name)) {
return numberIndexSignature;
} else if (stringIndexSignature) {
return stringIndexSignature;
}
return null;
};
PullTypeResolver.prototype.reportErrorThatMemberIsNotSubtypeOfIndexer = function (member, indexSignature, astForError, context, comparisonInfo) {
var enclosingSymbol = this.getEnclosingSymbolForAST(astForError);
if (indexSignature.parameters[0].type === this.semanticInfoChain.numberTypeSymbol) {
if (comparisonInfo.message) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(astForError, TypeScript.DiagnosticCode.All_numerically_named_properties_must_be_assignable_to_numeric_indexer_type_0_NL_1, [indexSignature.returnType.toString(enclosingSymbol), comparisonInfo.message]));
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(astForError, TypeScript.DiagnosticCode.All_numerically_named_properties_must_be_assignable_to_numeric_indexer_type_0, [indexSignature.returnType.toString(enclosingSymbol)]));
}
} else {
if (comparisonInfo.message) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(astForError, TypeScript.DiagnosticCode.All_named_properties_must_be_assignable_to_string_indexer_type_0_NL_1, [indexSignature.returnType.toString(enclosingSymbol), comparisonInfo.message]));
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(astForError, TypeScript.DiagnosticCode.All_named_properties_must_be_assignable_to_string_indexer_type_0, [indexSignature.returnType.toString(enclosingSymbol)]));
}
}
};
PullTypeResolver.prototype.typeCheckIfTypeMemberPropertyOkToOverride = function (typeSymbol, extendedType, typeMember, extendedTypeMember, enclosingDecl, comparisonInfo) {
if (!typeSymbol.isClass()) {
return true;
}
var typeMemberKind = typeMember.kind;
var extendedMemberKind = extendedTypeMember.kind;
if (typeMemberKind === extendedMemberKind) {
return true;
}
var errorCode;
if (typeMemberKind === 4096 /* Property */) {
if (typeMember.isAccessor()) {
errorCode = TypeScript.DiagnosticCode.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function;
} else {
errorCode = TypeScript.DiagnosticCode.Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function;
}
} else if (typeMemberKind === 65536 /* Method */) {
if (extendedTypeMember.isAccessor()) {
errorCode = TypeScript.DiagnosticCode.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor;
} else {
errorCode = TypeScript.DiagnosticCode.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property;
}
}
var message = TypeScript.getDiagnosticMessage(errorCode, [typeSymbol.toString(), typeMember.getScopedNameEx().toString(), extendedType.toString()]);
comparisonInfo.addMessage(message);
return false;
};
PullTypeResolver.prototype.typeCheckIfTypeExtendsType = function (classOrInterface, name, typeSymbol, extendedType, enclosingDecl, context) {
var typeMembers = typeSymbol.getMembers();
var comparisonInfo = new TypeComparisonInfo();
var foundError = false;
var foundError1 = false;
var foundError2 = false;
for (var i = 0; i < typeMembers.length; i++) {
var propName = typeMembers[i].name;
var extendedTypeProp = extendedType.findMember(propName, true);
if (extendedTypeProp) {
this.resolveDeclaredSymbol(extendedTypeProp, context);
foundError1 = !this.typeCheckIfTypeMemberPropertyOkToOverride(typeSymbol, extendedType, typeMembers[i], extendedTypeProp, enclosingDecl, comparisonInfo);
if (!foundError1) {
foundError2 = !this.sourcePropertyIsAssignableToTargetProperty(typeSymbol, extendedType, typeMembers[i], extendedTypeProp, classOrInterface, context, comparisonInfo);
}
if (foundError1 || foundError2) {
foundError = true;
break;
}
}
}
if (!foundError && typeSymbol.hasOwnCallSignatures()) {
foundError = !this.sourceCallSignaturesAreAssignableToTargetCallSignatures(typeSymbol, extendedType, classOrInterface, context, comparisonInfo);
}
if (!foundError && typeSymbol.hasOwnConstructSignatures()) {
foundError = !this.sourceConstructSignaturesAreAssignableToTargetConstructSignatures(typeSymbol, extendedType, classOrInterface, context, comparisonInfo);
}
if (!foundError && typeSymbol.hasOwnIndexSignatures()) {
foundError = !this.sourceIndexSignaturesAreAssignableToTargetIndexSignatures(typeSymbol, extendedType, classOrInterface, context, comparisonInfo);
}
if (!foundError && typeSymbol.isClass()) {
var typeConstructorType = typeSymbol.getConstructorMethod().type;
var typeConstructorTypeMembers = typeConstructorType.getMembers();
if (typeConstructorTypeMembers.length) {
var extendedConstructorType = extendedType.getConstructorMethod().type;
var comparisonInfoForPropTypeCheck = new TypeComparisonInfo(comparisonInfo);
for (var i = 0; i < typeConstructorTypeMembers.length; i++) {
var propName = typeConstructorTypeMembers[i].name;
var extendedConstructorTypeProp = extendedConstructorType.findMember(propName, true);
if (extendedConstructorTypeProp) {
if (!extendedConstructorTypeProp.isResolved) {
this.resolveDeclaredSymbol(extendedConstructorTypeProp, context);
}
if (!this.sourcePropertyIsAssignableToTargetProperty(typeConstructorType, extendedConstructorType, typeConstructorTypeMembers[i], extendedConstructorTypeProp, classOrInterface, context, comparisonInfo)) {
foundError = true;
break;
}
}
}
}
}
if (foundError) {
var errorCode;
if (typeSymbol.isClass()) {
errorCode = TypeScript.DiagnosticCode.Class_0_cannot_extend_class_1_NL_2;
} else {
if (extendedType.isClass()) {
errorCode = TypeScript.DiagnosticCode.Interface_0_cannot_extend_class_1_NL_2;
} else {
errorCode = TypeScript.DiagnosticCode.Interface_0_cannot_extend_interface_1_NL_2;
}
}
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, errorCode, [typeSymbol.getScopedName(), extendedType.getScopedName(), comparisonInfo.message]));
}
};
PullTypeResolver.prototype.typeCheckIfClassImplementsType = function (classDecl, classSymbol, implementedType, enclosingDecl, context) {
var comparisonInfo = new TypeComparisonInfo();
var foundError = !this.sourceMembersAreAssignableToTargetMembers(classSymbol, implementedType, classDecl, context, comparisonInfo);
if (!foundError) {
foundError = !this.sourceCallSignaturesAreAssignableToTargetCallSignatures(classSymbol, implementedType, classDecl, context, comparisonInfo);
if (!foundError) {
foundError = !this.sourceConstructSignaturesAreAssignableToTargetConstructSignatures(classSymbol, implementedType, classDecl, context, comparisonInfo);
if (!foundError) {
foundError = !this.sourceIndexSignaturesAreAssignableToTargetIndexSignatures(classSymbol, implementedType, classDecl, context, comparisonInfo);
}
}
}
if (foundError) {
var enclosingSymbol = this.getEnclosingSymbolForAST(classDecl);
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(classDecl.identifier, TypeScript.DiagnosticCode.Class_0_declares_interface_1_but_does_not_implement_it_NL_2, [classSymbol.getScopedName(enclosingSymbol), implementedType.getScopedName(enclosingSymbol), comparisonInfo.message]));
}
};
PullTypeResolver.prototype.computeValueSymbolFromAST = function (valueDeclAST, context) {
var prevInTypeCheck = context.inTypeCheck;
context.inTypeCheck = false;
var typeSymbolAlias = this.semanticInfoChain.getAliasSymbolForAST(valueDeclAST);
if (valueDeclAST.kind() == 11 /* IdentifierName */) {
var valueSymbol = this.computeNameExpression(valueDeclAST, context);
} else {
TypeScript.Debug.assert(valueDeclAST.kind() == 121 /* QualifiedName */);
var qualifiedName = valueDeclAST;
var lhs = this.computeValueSymbolFromAST(qualifiedName.left, context);
var valueSymbol = this.computeDottedNameExpressionFromLHS(lhs.symbol, qualifiedName.left, qualifiedName.right, context, false);
}
var valueSymbolAlias = this.semanticInfoChain.getAliasSymbolForAST(valueDeclAST);
this.semanticInfoChain.setAliasSymbolForAST(valueDeclAST, typeSymbolAlias);
context.inTypeCheck = prevInTypeCheck;
return { symbol: valueSymbol, alias: valueSymbolAlias };
};
PullTypeResolver.prototype.hasClassTypeSymbolConflictAsValue = function (baseDeclAST, typeSymbol, enclosingDecl, context) {
var typeSymbolAlias = this.semanticInfoChain.getAliasSymbolForAST(baseDeclAST);
var valueDeclAST = baseDeclAST.kind() == 126 /* GenericType */ ? baseDeclAST.name : baseDeclAST;
var valueSymbolInfo = this.computeValueSymbolFromAST(valueDeclAST, context);
var valueSymbol = valueSymbolInfo.symbol;
var valueSymbolAlias = valueSymbolInfo.alias;
if (typeSymbolAlias && valueSymbolAlias) {
return typeSymbolAlias !== valueSymbolAlias;
}
if (!valueSymbol.anyDeclHasFlag(16384 /* ClassConstructorVariable */)) {
return true;
}
var associatedContainerType = valueSymbol.type ? valueSymbol.type.getAssociatedContainerType() : null;
if (associatedContainerType) {
return associatedContainerType !== typeSymbol.getRootSymbol();
}
return true;
};
PullTypeResolver.prototype.typeCheckBase = function (classOrInterface, name, typeSymbol, baseDeclAST, isExtendedType, enclosingDecl, context) {
var _this = this;
var typeDecl = this.semanticInfoChain.getDeclForAST(classOrInterface);
var baseType = this.resolveTypeReference(baseDeclAST, context).type;
if (!baseType) {
return;
}
var typeDeclIsClass = typeSymbol.isClass();
if (!typeSymbol.isValidBaseKind(baseType, isExtendedType)) {
if (!baseType.isError()) {
if (isExtendedType) {
if (typeDeclIsClass) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(baseDeclAST, TypeScript.DiagnosticCode.A_class_may_only_extend_another_class));
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(baseDeclAST, TypeScript.DiagnosticCode.An_interface_may_only_extend_another_class_or_interface));
}
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(baseDeclAST, TypeScript.DiagnosticCode.A_class_may_only_implement_another_class_or_interface));
}
}
return;
} else if (typeDeclIsClass && isExtendedType) {
if (this.hasClassTypeSymbolConflictAsValue(baseDeclAST, baseType, enclosingDecl, context)) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(baseDeclAST, TypeScript.DiagnosticCode.Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_1, [TypeScript.ASTHelpers.getNameOfIdenfierOrQualifiedName(baseDeclAST.kind() == 126 /* GenericType */ ? baseDeclAST.name : baseDeclAST), baseType.toString(enclosingDecl ? enclosingDecl.getSymbol() : null)]));
}
}
if (baseType.hasBase(typeSymbol)) {
typeSymbol.setHasBaseTypeConflict();
baseType.setHasBaseTypeConflict();
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, typeDeclIsClass ? TypeScript.DiagnosticCode.Class_0_is_recursively_referenced_as_a_base_type_of_itself : TypeScript.DiagnosticCode.Interface_0_is_recursively_referenced_as_a_base_type_of_itself, [typeSymbol.getScopedName()]));
return;
}
if (isExtendedType) {
this.typeCheckCallBacks.push(function (context) {
return _this.typeCheckIfTypeExtendsType(classOrInterface, name, typeSymbol, baseType, enclosingDecl, context);
});
} else {
TypeScript.Debug.assert(classOrInterface.kind() === 131 /* ClassDeclaration */);
this.typeCheckCallBacks.push(function (context) {
return _this.typeCheckIfClassImplementsType(classOrInterface, typeSymbol, baseType, enclosingDecl, context);
});
}
this.checkSymbolPrivacy(typeSymbol, baseType, function (errorSymbol) {
return _this.baseListPrivacyErrorReporter(classOrInterface, typeSymbol, baseDeclAST, isExtendedType, errorSymbol, context);
});
};
PullTypeResolver.prototype.typeCheckBases = function (classOrInterface, name, heritageClauses, typeSymbol, enclosingDecl, context) {
var _this = this;
var extendsClause = TypeScript.ASTHelpers.getExtendsHeritageClause(heritageClauses);
var implementsClause = TypeScript.ASTHelpers.getImplementsHeritageClause(heritageClauses);
if (!extendsClause && !implementsClause) {
return;
}
if (extendsClause) {
for (var i = 0; i < extendsClause.typeNames.nonSeparatorCount(); i++) {
this.typeCheckBase(classOrInterface, name, typeSymbol, extendsClause.typeNames.nonSeparatorAt(i), true, enclosingDecl, context);
}
}
if (typeSymbol.isClass()) {
if (implementsClause) {
for (var i = 0; i < implementsClause.typeNames.nonSeparatorCount(); i++) {
this.typeCheckBase(classOrInterface, name, typeSymbol, implementsClause.typeNames.nonSeparatorAt(i), false, enclosingDecl, context);
}
}
} else if (extendsClause && !typeSymbol.hasBaseTypeConflict() && typeSymbol.getExtendedTypes().length > 1) {
var firstInterfaceASTWithExtendsClause = TypeScript.ArrayUtilities.firstOrDefault(typeSymbol.getDeclarations(), function (decl) {
return decl.ast().heritageClauses !== null;
}).ast();
if (classOrInterface === firstInterfaceASTWithExtendsClause) {
this.typeCheckCallBacks.push(function (context) {
_this.checkTypeCompatibilityBetweenBases(classOrInterface.identifier, typeSymbol, context);
});
}
}
};
PullTypeResolver.prototype.checkTypeCompatibilityBetweenBases = function (name, typeSymbol, context) {
var derivedIndexSignatures = typeSymbol.getOwnIndexSignatures();
var inheritedMembersMap = TypeScript.createIntrinsicsObject();
var inheritedIndexSignatures = new InheritedIndexSignatureInfo();
var typeHasOwnNumberIndexer = false;
var typeHasOwnStringIndexer = false;
if (typeSymbol.hasOwnIndexSignatures()) {
var ownIndexSignatures = typeSymbol.getOwnIndexSignatures();
for (var i = 0; i < ownIndexSignatures.length; i++) {
if (ownIndexSignatures[i].parameters[0].type === this.semanticInfoChain.numberTypeSymbol) {
typeHasOwnNumberIndexer = true;
} else {
typeHasOwnStringIndexer = true;
}
}
}
var baseTypes = typeSymbol.getExtendedTypes();
for (var i = 0; i < baseTypes.length; i++) {
if (this.checkNamedPropertyIdentityBetweenBases(name, typeSymbol, baseTypes[i], inheritedMembersMap, context) || this.checkIndexSignatureIdentityBetweenBases(name, typeSymbol, baseTypes[i], inheritedIndexSignatures, typeHasOwnNumberIndexer, typeHasOwnStringIndexer, context)) {
return;
}
}
if (this.checkThatInheritedNumberSignatureIsSubtypeOfInheritedStringSignature(name, typeSymbol, inheritedIndexSignatures, context)) {
return;
}
this.checkInheritedMembersAgainstInheritedIndexSignatures(name, typeSymbol, inheritedIndexSignatures, inheritedMembersMap, context);
};
PullTypeResolver.prototype.checkNamedPropertyIdentityBetweenBases = function (interfaceName, interfaceSymbol, baseTypeSymbol, inheritedMembersMap, context) {
var baseMembers = baseTypeSymbol.getAllMembers(4096 /* Property */ | 65536 /* Method */, 0 /* all */);
for (var i = 0; i < baseMembers.length; i++) {
var member = baseMembers[i];
var memberName = member.name;
if (interfaceSymbol.findMember(memberName, false)) {
continue;
}
this.resolveDeclaredSymbol(member, context);
if (inheritedMembersMap[memberName]) {
var prevMember = inheritedMembersMap[memberName];
if (prevMember.baseOrigin !== baseTypeSymbol && !this.propertiesAreIdenticalWithNewEnclosingTypes(baseTypeSymbol, prevMember.baseOrigin, member, prevMember.memberSymbol, context)) {
var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Named_properties_0_of_types_1_and_2_are_not_identical, [memberName, prevMember.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName()]);
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [interfaceSymbol.getDisplayName(), prevMember.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName(), innerDiagnostic]));
return true;
}
} else {
inheritedMembersMap[memberName] = new MemberWithBaseOrigin(member, baseTypeSymbol);
}
}
return false;
};
PullTypeResolver.prototype.checkIndexSignatureIdentityBetweenBases = function (interfaceName, interfaceSymbol, baseTypeSymbol, allInheritedSignatures, derivedTypeHasOwnNumberSignature, derivedTypeHasOwnStringSignature, context) {
if (derivedTypeHasOwnNumberSignature && derivedTypeHasOwnStringSignature) {
return false;
}
var indexSignaturesFromThisBaseType = baseTypeSymbol.getIndexSignatures();
for (var i = 0; i < indexSignaturesFromThisBaseType.length; i++) {
var currentInheritedSignature = indexSignaturesFromThisBaseType[i];
var parameterTypeIsString = currentInheritedSignature.parameters[0].type === this.semanticInfoChain.stringTypeSymbol;
var parameterTypeIsNumber = currentInheritedSignature.parameters[0].type === this.semanticInfoChain.numberTypeSymbol;
if (parameterTypeIsString && derivedTypeHasOwnStringSignature || parameterTypeIsNumber && derivedTypeHasOwnNumberSignature) {
continue;
}
if (parameterTypeIsString) {
if (allInheritedSignatures.stringSignatureWithBaseOrigin) {
if (allInheritedSignatures.stringSignatureWithBaseOrigin.baseOrigin !== baseTypeSymbol && !this.typesAreIdentical(allInheritedSignatures.stringSignatureWithBaseOrigin.signature.returnType, currentInheritedSignature.returnType, context)) {
var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_of_string_indexer_of_types_0_and_1_are_not_identical, [allInheritedSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName()]);
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [interfaceSymbol.getDisplayName(), allInheritedSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName(), innerDiagnostic]));
return true;
}
} else {
allInheritedSignatures.stringSignatureWithBaseOrigin = new SignatureWithBaseOrigin(currentInheritedSignature, baseTypeSymbol);
}
} else if (parameterTypeIsNumber) {
if (allInheritedSignatures.numberSignatureWithBaseOrigin) {
if (allInheritedSignatures.numberSignatureWithBaseOrigin.baseOrigin !== baseTypeSymbol && !this.typesAreIdentical(allInheritedSignatures.numberSignatureWithBaseOrigin.signature.returnType, currentInheritedSignature.returnType, context)) {
var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_of_number_indexer_of_types_0_and_1_are_not_identical, [allInheritedSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName()]);
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [interfaceSymbol.getDisplayName(), allInheritedSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName(), innerDiagnostic]));
return true;
}
} else {
allInheritedSignatures.numberSignatureWithBaseOrigin = new SignatureWithBaseOrigin(currentInheritedSignature, baseTypeSymbol);
}
}
}
return false;
};
PullTypeResolver.prototype.checkInheritedMembersAgainstInheritedIndexSignatures = function (interfaceName, interfaceSymbol, inheritedIndexSignatures, inheritedMembers, context) {
if (!inheritedIndexSignatures.stringSignatureWithBaseOrigin && !inheritedIndexSignatures.numberSignatureWithBaseOrigin) {
return false;
}
var comparisonInfo = new TypeComparisonInfo();
var stringSignature = inheritedIndexSignatures.stringSignatureWithBaseOrigin && inheritedIndexSignatures.stringSignatureWithBaseOrigin.signature;
var numberSignature = inheritedIndexSignatures.numberSignatureWithBaseOrigin && inheritedIndexSignatures.numberSignatureWithBaseOrigin.signature;
for (var memberName in inheritedMembers) {
var memberWithBaseOrigin = inheritedMembers[memberName];
if (!memberWithBaseOrigin) {
continue;
}
var relevantSignature = this.determineRelevantIndexerForMember(memberWithBaseOrigin.memberSymbol, numberSignature, stringSignature);
if (!relevantSignature) {
continue;
}
var relevantSignatureIsNumberSignature = relevantSignature.parameters[0].type === this.semanticInfoChain.numberTypeSymbol;
var signatureBaseOrigin = relevantSignatureIsNumberSignature ? inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin : inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin;
if (signatureBaseOrigin === memberWithBaseOrigin.baseOrigin) {
continue;
}
var memberIsSubtype = this.sourceIsAssignableToTarget(memberWithBaseOrigin.memberSymbol.type, relevantSignature.returnType, interfaceName, context, comparisonInfo);
if (!memberIsSubtype) {
var enclosingSymbol = this.getEnclosingSymbolForAST(interfaceName);
if (relevantSignatureIsNumberSignature) {
var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_of_property_0_in_type_1_is_not_assignable_to_number_indexer_type_in_type_2_NL_3, [memberName, memberWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), comparisonInfo.message]);
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [interfaceSymbol.getDisplayName(enclosingSymbol), memberWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), innerDiagnostic]));
} else {
var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_of_property_0_in_type_1_is_not_assignable_to_string_indexer_type_in_type_2_NL_3, [memberName, memberWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), comparisonInfo.message]);
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [interfaceSymbol.getDisplayName(enclosingSymbol), memberWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), innerDiagnostic]));
}
return true;
}
}
return false;
};
PullTypeResolver.prototype.checkThatInheritedNumberSignatureIsSubtypeOfInheritedStringSignature = function (interfaceName, interfaceSymbol, inheritedIndexSignatures, context) {
if (inheritedIndexSignatures.numberSignatureWithBaseOrigin && inheritedIndexSignatures.stringSignatureWithBaseOrigin) {
if (inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin === inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin) {
return false;
}
var comparisonInfo = new TypeComparisonInfo();
var signatureIsSubtype = this.sourceIsAssignableToTarget(inheritedIndexSignatures.numberSignatureWithBaseOrigin.signature.returnType, inheritedIndexSignatures.stringSignatureWithBaseOrigin.signature.returnType, interfaceName, context, comparisonInfo);
if (!signatureIsSubtype) {
var enclosingSymbol = this.getEnclosingSymbolForAST(interfaceName);
var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_of_number_indexer_in_type_0_is_not_assignable_to_string_indexer_type_in_type_1_NL_2, [
inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol),
inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), comparisonInfo.message]);
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [
interfaceSymbol.getDisplayName(enclosingSymbol), inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(),
inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), innerDiagnostic]));
return true;
}
}
return false;
};
PullTypeResolver.prototype.checkAssignability = function (ast, source, target, context) {
var comparisonInfo = new TypeComparisonInfo();
var isAssignable = this.sourceIsAssignableToTarget(source, target, ast, context, comparisonInfo);
if (!isAssignable) {
var enclosingSymbol = this.getEnclosingSymbolForAST(ast);
if (comparisonInfo.message) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [source.toString(enclosingSymbol), target.toString(enclosingSymbol), comparisonInfo.message]));
} else {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [source.toString(enclosingSymbol), target.toString(enclosingSymbol)]));
}
}
};
PullTypeResolver.prototype.isReference = function (ast, astSymbol) {
if (ast.kind() === 217 /* ParenthesizedExpression */) {
return this.isReference(ast.expression, astSymbol);
}
if (ast.kind() !== 11 /* IdentifierName */ && ast.kind() !== 212 /* MemberAccessExpression */ && ast.kind() !== 221 /* ElementAccessExpression */) {
return false;
}
if (ast.kind() === 11 /* IdentifierName */) {
if (astSymbol.kind === 512 /* Variable */ && astSymbol.anyDeclHasFlag(4096 /* Enum */)) {
return false;
}
if (astSymbol.kind === 512 /* Variable */ && astSymbol.anyDeclHasFlag(102400 /* SomeInitializedModule */)) {
return false;
}
if (astSymbol.kind === 32768 /* ConstructorMethod */ || astSymbol.kind === 16384 /* Function */) {
return false;
}
}
if (ast.kind() === 212 /* MemberAccessExpression */ && astSymbol.kind === 67108864 /* EnumMember */) {
return false;
}
return true;
};
PullTypeResolver.prototype.checkForSuperMemberAccess = function (expression, name, resolvedName, context) {
if (resolvedName) {
if (expression.kind() === 50 /* SuperKeyword */ && !resolvedName.isError() && resolvedName.kind !== 65536 /* Method */) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, TypeScript.DiagnosticCode.Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword));
return true;
}
}
return false;
};
PullTypeResolver.prototype.getEnclosingDeclForAST = function (ast) {
return this.semanticInfoChain.getEnclosingDecl(ast);
};
PullTypeResolver.prototype.getEnclosingSymbolForAST = function (ast) {
var enclosingDecl = this.getEnclosingDeclForAST(ast);
return enclosingDecl ? enclosingDecl.getSymbol() : null;
};
PullTypeResolver.prototype.checkForPrivateMemberAccess = function (name, expressionType, resolvedName, context) {
if (resolvedName) {
if (resolvedName.anyDeclHasFlag(2 /* Private */)) {
var memberContainer = resolvedName.getContainer();
if (memberContainer && memberContainer.kind === 33554432 /* ConstructorType */) {
memberContainer = memberContainer.getAssociatedContainerType();
}
if (memberContainer && memberContainer.isClass()) {
var memberClass = memberContainer.getDeclarations()[0].ast();
TypeScript.Debug.assert(memberClass);
var containingClass = this.getEnclosingClassDeclaration(name);
if (!containingClass || containingClass !== memberClass) {
context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, TypeScript.DiagnosticCode._0_1_is_inaccessible, [memberContainer.toString(null, false), name.text()]));
return true;
}
}
}
}
return false;
};
PullTypeResolver.prototype.instantiateType = function (type, typeParameterArgumentMap) {
if (type.isPrimitive()) {
return type;
}
if (type.isError()) {
return type;
}
if (typeParameterArgumentMap[type.pullSymbolID]) {
return typeParameterArgumentMap[type.pullSymbolID];
}
type._resolveDeclaredSymbol();
if (type.isTypeParameter()) {
return this.instantiateTypeParameter(type, typeParameterArgumentMap);
}
if (type.wrapsSomeTypeParameter(typeParameterArgumentMap)) {
return TypeScript.PullInstantiatedTypeReferenceSymbol.create(this, type, typeParameterArgumentMap);
}
return type;
};
PullTypeResolver.prototype.instantiateTypeParameter = function (typeParameter, typeParameterArgumentMap) {
var constraint = typeParameter.getConstraint();
if (!constraint) {
return typeParameter;
}
var instantiatedConstraint = this.instantiateType(constraint, typeParameterArgumentMap);
if (instantiatedConstraint == constraint) {
return typeParameter;
}
var rootTypeParameter = typeParameter.getRootSymbol();
var instantiation = rootTypeParameter.getSpecialization([instantiatedConstraint]);
if (instantiation) {
return instantiation;
}
instantiation = new TypeScript.PullInstantiatedTypeParameterSymbol(rootTypeParameter, instantiatedConstraint);
return instantiation;
};
PullTypeResolver.prototype.instantiateSignature = function (signature, typeParameterArgumentMap) {
if (!signature.wrapsSomeTypeParameter(typeParameterArgumentMap)) {
return signature;
}
var rootSignature = signature.getRootSymbol();
var mutableTypeParameterMap = new TypeScript.PullInstantiationHelpers.MutableTypeArgumentMap(typeParameterArgumentMap);
TypeScript.PullInstantiationHelpers.instantiateTypeArgument(this, signature, mutableTypeParameterMap);
var instantiatedSignature = rootSignature.getSpecialization(mutableTypeParameterMap.typeParameterArgumentMap);
if (instantiatedSignature) {
return instantiatedSignature;
}
TypeScript.PullInstantiationHelpers.cleanUpTypeArgumentMap(signature, mutableTypeParameterMap);
typeParameterArgumentMap = mutableTypeParameterMap.typeParameterArgumentMap;
instantiatedSignature = new TypeScript.PullInstantiatedSignatureSymbol(rootSignature, typeParameterArgumentMap);
instantiatedSignature.returnType = this.instantiateType((rootSignature.returnType || this.semanticInfoChain.anyTypeSymbol), typeParameterArgumentMap);
instantiatedSignature.functionType = this.instantiateType(rootSignature.functionType, typeParameterArgumentMap);
var parameters = rootSignature.parameters;
var parameter = null;
if (parameters) {
for (var j = 0; j < parameters.length; j++) {
parameter = new TypeScript.PullSymbol(parameters[j].name, 2048 /* Parameter */);
parameter.setRootSymbol(parameters[j]);
if (parameters[j].isOptional) {
parameter.isOptional = true;
}
if (parameters[j].isVarArg) {
parameter.isVarArg = true;
instantiatedSignature.hasVarArgs = true;
}
instantiatedSignature.addParameter(parameter, parameter.isOptional);
parameter.type = this.instantiateType(parameters[j].type, typeParameterArgumentMap);
}
}
return instantiatedSignature;
};
PullTypeResolver.globalTypeCheckPhase = 0;
return PullTypeResolver;
})();
TypeScript.PullTypeResolver = PullTypeResolver;
var TypeComparisonInfo = (function () {
function TypeComparisonInfo(sourceComparisonInfo, useSameIndent) {
this.onlyCaptureFirstError = false;
this.flags = 0 /* SuccessfulComparison */;
this.message = "";
this.stringConstantVal = null;
this.indent = 1;
if (sourceComparisonInfo) {
this.flags = sourceComparisonInfo.flags;
this.onlyCaptureFirstError = sourceComparisonInfo.onlyCaptureFirstError;
this.stringConstantVal = sourceComparisonInfo.stringConstantVal;
this.indent = sourceComparisonInfo.indent;
if (!useSameIndent) {
this.indent++;
}
}
}
TypeComparisonInfo.prototype.indentString = function () {
var result = "";
for (var i = 0; i < this.indent; i++) {
result += "\t";
}
return result;
};
TypeComparisonInfo.prototype.addMessage = function (message) {
if (!this.onlyCaptureFirstError && this.message) {
this.message = this.message + TypeScript.newLine() + this.indentString() + message;
} else {
this.message = this.indentString() + message;
}
};
return TypeComparisonInfo;
})();
TypeScript.TypeComparisonInfo = TypeComparisonInfo;
function getPropertyAssignmentNameTextFromIdentifier(identifier) {
if (identifier.kind() === 11 /* IdentifierName */) {
return { actualText: identifier.text(), memberName: identifier.valueText() };
} else if (identifier.kind() === 14 /* StringLiteral */) {
return { actualText: identifier.text(), memberName: identifier.valueText() };
} else if (identifier.kind() === 13 /* NumericLiteral */) {
return { actualText: identifier.text(), memberName: identifier.valueText() };
} else {
throw TypeScript.Errors.invalidOperation();
}
}
TypeScript.getPropertyAssignmentNameTextFromIdentifier = getPropertyAssignmentNameTextFromIdentifier;
function isTypesOnlyLocation(ast) {
while (ast && ast.parent) {
switch (ast.parent.kind()) {
case 244 /* TypeAnnotation */:
return true;
case 127 /* TypeQuery */:
return false;
case 125 /* ConstructorType */:
var constructorType = ast.parent;
if (constructorType.type === ast) {
return true;
}
break;
case 123 /* FunctionType */:
var functionType = ast.parent;
if (functionType.type === ast) {
return true;
}
break;
case 239 /* Constraint */:
var constraint = ast.parent;
if (constraint.type === ast) {
return true;
}
break;
case 220 /* CastExpression */:
var castExpression = ast.parent;
return castExpression.type === ast;
case 230 /* ExtendsHeritageClause */:
case 231 /* ImplementsHeritageClause */:
return true;
case 228 /* TypeArgumentList */:
return true;
case 131 /* ClassDeclaration */:
case 128 /* InterfaceDeclaration */:
case 130 /* ModuleDeclaration */:
case 129 /* FunctionDeclaration */:
case 145 /* MethodSignature */:
case 212 /* MemberAccessExpression */:
case 242 /* Parameter */:
return false;
}
ast = ast.parent;
}
return false;
}
TypeScript.isTypesOnlyLocation = isTypesOnlyLocation;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
TypeScript.declCacheHit = 0;
TypeScript.declCacheMiss = 0;
TypeScript.symbolCacheHit = 0;
TypeScript.symbolCacheMiss = 0;
var sentinalEmptyArray = [];
var SemanticInfoChain = (function () {
function SemanticInfoChain(compiler, logger) {
this.compiler = compiler;
this.logger = logger;
this.documents = [];
this.fileNameToDocument = TypeScript.createIntrinsicsObject();
this.anyTypeDecl = null;
this.booleanTypeDecl = null;
this.numberTypeDecl = null;
this.stringTypeDecl = null;
this.nullTypeDecl = null;
this.undefinedTypeDecl = null;
this.voidTypeDecl = null;
this.undefinedValueDecl = null;
this.anyTypeSymbol = null;
this.booleanTypeSymbol = null;
this.numberTypeSymbol = null;
this.stringTypeSymbol = null;
this.nullTypeSymbol = null;
this.undefinedTypeSymbol = null;
this.voidTypeSymbol = null;
this.undefinedValueSymbol = null;
this.emptyTypeSymbol = null;
this.astSymbolMap = [];
this.astAliasSymbolMap = [];
this.astCallResolutionDataMap = [];
this.declSymbolMap = [];
this.declSignatureSymbolMap = [];
this.declCache = null;
this.symbolCache = null;
this.fileNameToDiagnostics = null;
this._binder = null;
this._resolver = null;
this._topLevelDecls = null;
this._fileNames = null;
var globalDecl = new TypeScript.RootPullDecl("", "", 0 /* Global */, 0 /* None */, this, false);
this.documents[0] = new TypeScript.Document(this.compiler, this, "", [], null, 0 /* None */, 0, false, null, globalDecl);
this.anyTypeDecl = new TypeScript.NormalPullDecl("any", "any", 2 /* Primitive */, 0 /* None */, globalDecl);
this.booleanTypeDecl = new TypeScript.NormalPullDecl("boolean", "boolean", 2 /* Primitive */, 0 /* None */, globalDecl);
this.numberTypeDecl = new TypeScript.NormalPullDecl("number", "number", 2 /* Primitive */, 0 /* None */, globalDecl);
this.stringTypeDecl = new TypeScript.NormalPullDecl("string", "string", 2 /* Primitive */, 0 /* None */, globalDecl);
this.voidTypeDecl = new TypeScript.NormalPullDecl("void", "void", 2 /* Primitive */, 0 /* None */, globalDecl);
this.nullTypeDecl = new TypeScript.RootPullDecl("null", "", 2 /* Primitive */, 0 /* None */, this, false);
this.undefinedTypeDecl = new TypeScript.RootPullDecl("undefined", "", 2 /* Primitive */, 0 /* None */, this, false);
this.undefinedValueDecl = new TypeScript.NormalPullDecl("undefined", "undefined", 512 /* Variable */, 8 /* Ambient */, globalDecl);
this.invalidate();
}
SemanticInfoChain.prototype.getDocument = function (fileName) {
var document = this.fileNameToDocument[fileName];
return document || null;
};
SemanticInfoChain.prototype.lineMap = function (fileName) {
return this.getDocument(fileName).lineMap();
};
SemanticInfoChain.prototype.fileNames = function () {
if (this._fileNames === null) {
this._fileNames = this.documents.slice(1).map(function (s) {
return s.fileName;
});
}
return this._fileNames;
};
SemanticInfoChain.prototype.bindPrimitiveSymbol = function (decl, newSymbol) {
newSymbol.addDeclaration(decl);
decl.setSymbol(newSymbol);
newSymbol.setResolved();
return newSymbol;
};
SemanticInfoChain.prototype.addPrimitiveTypeSymbol = function (decl) {
var newSymbol = new TypeScript.PullPrimitiveTypeSymbol(decl.name);
return this.bindPrimitiveSymbol(decl, newSymbol);
};
SemanticInfoChain.prototype.addPrimitiveValueSymbol = function (decl, type) {
var newSymbol = new TypeScript.PullSymbol(decl.name, 512 /* Variable */);
newSymbol.type = type;
return this.bindPrimitiveSymbol(decl, newSymbol);
};
SemanticInfoChain.prototype.resetGlobalSymbols = function () {
this.anyTypeSymbol = this.addPrimitiveTypeSymbol(this.anyTypeDecl);
this.booleanTypeSymbol = this.addPrimitiveTypeSymbol(this.booleanTypeDecl);
this.numberTypeSymbol = this.addPrimitiveTypeSymbol(this.numberTypeDecl);
this.stringTypeSymbol = this.addPrimitiveTypeSymbol(this.stringTypeDecl);
this.voidTypeSymbol = this.addPrimitiveTypeSymbol(this.voidTypeDecl);
this.nullTypeSymbol = this.addPrimitiveTypeSymbol(this.nullTypeDecl);
this.undefinedTypeSymbol = this.addPrimitiveTypeSymbol(this.undefinedTypeDecl);
this.undefinedValueSymbol = this.addPrimitiveValueSymbol(this.undefinedValueDecl, this.undefinedTypeSymbol);
var emptyTypeDecl = new TypeScript.PullSynthesizedDecl("{}", "{}", 8388608 /* ObjectType */, 0 /* None */, null, this);
var emptyTypeSymbol = new TypeScript.PullTypeSymbol("{}", 8388608 /* ObjectType */);
emptyTypeDecl.setSymbol(emptyTypeSymbol);
emptyTypeSymbol.addDeclaration(emptyTypeDecl);
emptyTypeSymbol.setResolved();
this.emptyTypeSymbol = emptyTypeSymbol;
};
SemanticInfoChain.prototype.addDocument = function (document) {
var fileName = document.fileName;
var existingIndex = TypeScript.ArrayUtilities.indexOf(this.documents, function (u) {
return u.fileName === fileName;
});
if (existingIndex < 0) {
this.documents.push(document);
} else {
this.documents[existingIndex] = document;
}
this.fileNameToDocument[fileName] = document;
this.invalidate();
};
SemanticInfoChain.prototype.removeDocument = function (fileName) {
TypeScript.Debug.assert(fileName !== "", "Can't remove the semantic info for the global decl.");
var index = TypeScript.ArrayUtilities.indexOf(this.documents, function (u) {
return u.fileName === fileName;
});
if (index > 0) {
this.fileNameToDocument[fileName] = undefined;
this.documents.splice(index, 1);
this.invalidate();
}
};
SemanticInfoChain.prototype.getDeclPathCacheID = function (declPath, declKind) {
var cacheID = "";
for (var i = 0; i < declPath.length; i++) {
cacheID += "#" + declPath[i];
}
return cacheID + "#" + declKind.toString();
};
SemanticInfoChain.prototype.findTopLevelSymbol = function (name, kind, doNotGoPastThisDecl) {
var cacheID = this.getDeclPathCacheID([name], kind);
var symbol = this.symbolCache[cacheID];
if (!symbol) {
for (var i = 0, n = this.documents.length; i < n; i++) {
var topLevelDecl = this.documents[i].topLevelDecl();
var symbol = this.findTopLevelSymbolInDecl(topLevelDecl, name, kind, doNotGoPastThisDecl);
if (symbol) {
break;
}
if (doNotGoPastThisDecl && topLevelDecl.name === doNotGoPastThisDecl.fileName()) {
return null;
}
}
if (symbol) {
this.symbolCache[cacheID] = symbol;
}
}
return symbol;
};
SemanticInfoChain.prototype.findTopLevelSymbolInDecl = function (topLevelDecl, name, kind, doNotGoPastThisDecl) {
var doNotGoPastThisPosition = doNotGoPastThisDecl && doNotGoPastThisDecl.fileName() === topLevelDecl.fileName() ? doNotGoPastThisDecl.ast().start() : -1;
var foundDecls = topLevelDecl.searchChildDecls(name, kind);
for (var j = 0; j < foundDecls.length; j++) {
var foundDecl = foundDecls[j];
if (doNotGoPastThisPosition !== -1 && foundDecl.ast() && foundDecl.ast().start() > doNotGoPastThisPosition) {
break;
}
var symbol = foundDecls[j].getSymbol();
if (symbol) {
return symbol;
}
}
return null;
};
SemanticInfoChain.prototype.findExternalModule = function (id) {
id = TypeScript.normalizePath(id);
var tsFile = id + ".ts";
var tsCacheID = this.getDeclPathCacheID([tsFile], 32 /* DynamicModule */);
symbol = this.symbolCache[tsCacheID];
if (symbol != undefined) {
return symbol;
}
var dtsFile = id + ".d.ts";
var dtsCacheID = this.getDeclPathCacheID([dtsFile], 32 /* DynamicModule */);
var symbol = this.symbolCache[dtsCacheID];
if (symbol) {
return symbol;
}
var dtsSymbol;
for (var i = 0; i < this.documents.length; i++) {
var document = this.documents[i];
var topLevelDecl = document.topLevelDecl();
if (topLevelDecl.isExternalModule()) {
var isTsFile = document.fileName === tsFile;
if (isTsFile || document.fileName === dtsFile) {
var dynamicModuleDecl = topLevelDecl.getChildDecls()[0];
symbol = dynamicModuleDecl.getSymbol();
if (isTsFile) {
this.symbolCache[tsCacheID] = symbol;
return symbol;
} else {
dtsSymbol = symbol;
}
}
}
}
if (dtsSymbol) {
this.symbolCache[dtsCacheID] = symbol;
return dtsSymbol;
}
this.symbolCache[dtsCacheID] = null;
this.symbolCache[tsCacheID] = null;
return null;
};
SemanticInfoChain.prototype.findAmbientExternalModuleInGlobalContext = function (id) {
var cacheID = this.getDeclPathCacheID([id], 32 /* DynamicModule */);
var symbol = this.symbolCache[cacheID];
if (symbol == undefined) {
symbol = null;
for (var i = 0; i < this.documents.length; i++) {
var document = this.documents[i];
var topLevelDecl = document.topLevelDecl();
if (!topLevelDecl.isExternalModule()) {
var dynamicModules = topLevelDecl.searchChildDecls(id, 32 /* DynamicModule */);
if (dynamicModules.length) {
symbol = dynamicModules[0].getSymbol();
break;
}
}
}
this.symbolCache[cacheID] = symbol;
}
return symbol;
};
SemanticInfoChain.prototype.findDecls = function (declPath, declKind) {
var cacheID = this.getDeclPathCacheID(declPath, declKind);
if (declPath.length) {
var cachedDecls = this.declCache[cacheID];
if (cachedDecls && cachedDecls.length) {
TypeScript.declCacheHit++;
return cachedDecls;
}
}
TypeScript.declCacheMiss++;
var declsToSearch = this.topLevelDecls();
var decls = TypeScript.sentinelEmptyArray;
var path;
var foundDecls = TypeScript.sentinelEmptyArray;
for (var i = 0; i < declPath.length; i++) {
path = declPath[i];
decls = TypeScript.sentinelEmptyArray;
var kind = (i === declPath.length - 1) ? declKind : 164 /* SomeContainer */;
for (var j = 0; j < declsToSearch.length; j++) {
foundDecls = declsToSearch[j].searchChildDecls(path, kind);
for (var k = 0; k < foundDecls.length; k++) {
if (decls === TypeScript.sentinelEmptyArray) {
decls = [];
}
decls[decls.length] = foundDecls[k];
}
}
declsToSearch = decls;
if (!declsToSearch) {
break;
}
}
if (decls.length) {
this.declCache[cacheID] = decls;
}
return decls;
};
SemanticInfoChain.prototype.findDeclsFromPath = function (declPath, declKind) {
var declString = [];
for (var i = 0, n = declPath.length; i < n; i++) {
if (declPath[i].kind & 1 /* Script */) {
continue;
}
declString.push(declPath[i].name);
}
return this.findDecls(declString, declKind);
};
SemanticInfoChain.prototype.findSymbol = function (declPath, declType) {
var cacheID = this.getDeclPathCacheID(declPath, declType);
if (declPath.length) {
var cachedSymbol = this.symbolCache[cacheID];
if (cachedSymbol) {
TypeScript.symbolCacheHit++;
return cachedSymbol;
}
}
TypeScript.symbolCacheMiss++;
var decls = this.findDecls(declPath, declType);
var symbol = null;
if (decls.length) {
var decl = decls[0];
if (TypeScript.hasFlag(decl.kind, 164 /* SomeContainer */)) {
var valueDecl = decl.getValueDecl();
if (valueDecl) {
valueDecl.ensureSymbolIsBound();
}
}
symbol = decl.getSymbol();
if (symbol) {
for (var i = 1; i < decls.length; i++) {
decls[i].ensureSymbolIsBound();
}
this.symbolCache[cacheID] = symbol;
}
}
return symbol;
};
SemanticInfoChain.prototype.cacheGlobalSymbol = function (symbol, kind) {
var cacheID1 = this.getDeclPathCacheID([symbol.name], kind);
var cacheID2 = this.getDeclPathCacheID([symbol.name], symbol.kind);
if (!this.symbolCache[cacheID1]) {
this.symbolCache[cacheID1] = symbol;
}
if (!this.symbolCache[cacheID2]) {
this.symbolCache[cacheID2] = symbol;
}
};
SemanticInfoChain.prototype.invalidate = function (oldSettings, newSettings) {
if (typeof oldSettings === "undefined") { oldSettings = null; }
if (typeof newSettings === "undefined") { newSettings = null; }
TypeScript.PullTypeResolver.globalTypeCheckPhase++;
var cleanStart = new Date().getTime();
this.astSymbolMap.length = 0;
this.astAliasSymbolMap.length = 0;
this.astCallResolutionDataMap.length = 0;
this.declCache = TypeScript.createIntrinsicsObject();
this.symbolCache = TypeScript.createIntrinsicsObject();
this.fileNameToDiagnostics = TypeScript.createIntrinsicsObject();
this._binder = null;
this._resolver = null;
this._topLevelDecls = null;
this._fileNames = null;
this.declSymbolMap.length = 0;
this.declSignatureSymbolMap.length = 0;
if (oldSettings && newSettings) {
if (this.settingsChangeAffectsSyntax(oldSettings, newSettings)) {
for (var i = 1, n = this.documents.length; i < n; i++) {
this.documents[i].invalidate();
}
}
}
TypeScript.pullSymbolID = 0;
this.resetGlobalSymbols();
var cleanEnd = new Date().getTime();
};
SemanticInfoChain.prototype.settingsChangeAffectsSyntax = function (before, after) {
return before.allowAutomaticSemicolonInsertion() !== after.allowAutomaticSemicolonInsertion() || before.codeGenTarget() !== after.codeGenTarget() || before.propagateEnumConstants() !== after.propagateEnumConstants();
};
SemanticInfoChain.prototype.setSymbolForAST = function (ast, symbol) {
this.astSymbolMap[ast.syntaxID()] = symbol;
};
SemanticInfoChain.prototype.getSymbolForAST = function (ast) {
return this.astSymbolMap[ast.syntaxID()] || null;
};
SemanticInfoChain.prototype.setAliasSymbolForAST = function (ast, symbol) {
this.astAliasSymbolMap[ast.syntaxID()] = symbol;
};
SemanticInfoChain.prototype.getAliasSymbolForAST = function (ast) {
return this.astAliasSymbolMap[ast.syntaxID()];
};
SemanticInfoChain.prototype.getCallResolutionDataForAST = function (ast) {
return this.astCallResolutionDataMap[ast.syntaxID()];
};
SemanticInfoChain.prototype.setCallResolutionDataForAST = function (ast, callResolutionData) {
if (callResolutionData) {
this.astCallResolutionDataMap[ast.syntaxID()] = callResolutionData;
}
};
SemanticInfoChain.prototype.setSymbolForDecl = function (decl, symbol) {
this.declSymbolMap[decl.declID] = symbol;
};
SemanticInfoChain.prototype.getSymbolForDecl = function (decl) {
return this.declSymbolMap[decl.declID];
};
SemanticInfoChain.prototype.setSignatureSymbolForDecl = function (decl, signatureSymbol) {
this.declSignatureSymbolMap[decl.declID] = signatureSymbol;
};
SemanticInfoChain.prototype.getSignatureSymbolForDecl = function (decl) {
return this.declSignatureSymbolMap[decl.declID];
};
SemanticInfoChain.prototype.addDiagnostic = function (diagnostic) {
var fileName = diagnostic.fileName();
var diagnostics = this.fileNameToDiagnostics[fileName];
if (!diagnostics) {
diagnostics = [];
this.fileNameToDiagnostics[fileName] = diagnostics;
}
diagnostics.push(diagnostic);
};
SemanticInfoChain.prototype.getDiagnostics = function (fileName) {
var diagnostics = this.fileNameToDiagnostics[fileName];
return diagnostics || [];
};
SemanticInfoChain.prototype.getBinder = function () {
if (!this._binder) {
this._binder = new TypeScript.PullSymbolBinder(this);
}
return this._binder;
};
SemanticInfoChain.prototype.getResolver = function () {
if (!this._resolver) {
this._resolver = new TypeScript.PullTypeResolver(this.compiler.compilationSettings(), this);
}
return this._resolver;
};
SemanticInfoChain.prototype.addSyntheticIndexSignature = function (containingDecl, containingSymbol, ast, indexParamName, indexParamType, returnType) {
var indexSignature = new TypeScript.PullSignatureSymbol(4194304 /* IndexSignature */);
var indexParameterSymbol = new TypeScript.PullSymbol(indexParamName, 2048 /* Parameter */);
indexParameterSymbol.type = indexParamType;
indexSignature.addParameter(indexParameterSymbol);
indexSignature.returnType = returnType;
indexSignature.setResolved();
indexParameterSymbol.setResolved();
containingSymbol.addIndexSignature(indexSignature);
var indexSigDecl = new TypeScript.PullSynthesizedDecl("", "", 4194304 /* IndexSignature */, 2048 /* Signature */, containingDecl, containingDecl.semanticInfoChain);
var indexParamDecl = new TypeScript.PullSynthesizedDecl(indexParamName, indexParamName, 2048 /* Parameter */, 0 /* None */, indexSigDecl, containingDecl.semanticInfoChain);
indexSigDecl.setSignatureSymbol(indexSignature);
indexParamDecl.setSymbol(indexParameterSymbol);
indexSignature.addDeclaration(indexSigDecl);
indexParameterSymbol.addDeclaration(indexParamDecl);
};
SemanticInfoChain.prototype.getDeclForAST = function (ast) {
var document = this.getDocument(ast.fileName());
if (document) {
return document._getDeclForAST(ast);
}
return null;
};
SemanticInfoChain.prototype.getEnclosingDecl = function (ast) {
return this.getDocument(ast.fileName()).getEnclosingDecl(ast);
};
SemanticInfoChain.prototype.setDeclForAST = function (ast, decl) {
this.getDocument(decl.fileName())._setDeclForAST(ast, decl);
};
SemanticInfoChain.prototype.getASTForDecl = function (decl) {
var document = this.getDocument(decl.fileName());
if (document) {
return document._getASTForDecl(decl);
}
return null;
};
SemanticInfoChain.prototype.setASTForDecl = function (decl, ast) {
this.getDocument(decl.fileName())._setASTForDecl(decl, ast);
};
SemanticInfoChain.prototype.topLevelDecl = function (fileName) {
var document = this.getDocument(fileName);
if (document) {
return document.topLevelDecl();
}
return null;
};
SemanticInfoChain.prototype.topLevelDecls = function () {
if (!this._topLevelDecls) {
this._topLevelDecls = TypeScript.ArrayUtilities.select(this.documents, function (u) {
return u.topLevelDecl();
});
}
return this._topLevelDecls;
};
SemanticInfoChain.prototype.addDiagnosticFromAST = function (ast, diagnosticKey, _arguments, additionalLocations) {
if (typeof _arguments === "undefined") { _arguments = null; }
if (typeof additionalLocations === "undefined") { additionalLocations = null; }
this.addDiagnostic(this.diagnosticFromAST(ast, diagnosticKey, _arguments, additionalLocations));
};
SemanticInfoChain.prototype.diagnosticFromAST = function (ast, diagnosticKey, _arguments, additionalLocations) {
if (typeof _arguments === "undefined") { _arguments = null; }
if (typeof additionalLocations === "undefined") { additionalLocations = null; }
return new TypeScript.Diagnostic(ast.fileName(), this.lineMap(ast.fileName()), ast.start(), ast.width(), diagnosticKey, _arguments, additionalLocations);
};
SemanticInfoChain.prototype.locationFromAST = function (ast) {
return new TypeScript.Location(ast.fileName(), this.lineMap(ast.fileName()), ast.start(), ast.width());
};
SemanticInfoChain.prototype.duplicateIdentifierDiagnosticFromAST = function (ast, identifier, additionalLocationAST) {
return this.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Duplicate_identifier_0, [identifier], additionalLocationAST ? [this.locationFromAST(additionalLocationAST)] : null);
};
SemanticInfoChain.prototype.addDuplicateIdentifierDiagnosticFromAST = function (ast, identifier, additionalLocationAST) {
this.addDiagnostic(this.duplicateIdentifierDiagnosticFromAST(ast, identifier, additionalLocationAST));
};
return SemanticInfoChain;
})();
TypeScript.SemanticInfoChain = SemanticInfoChain;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var DeclCollectionContext = (function () {
function DeclCollectionContext(document, semanticInfoChain, propagateEnumConstants) {
this.document = document;
this.semanticInfoChain = semanticInfoChain;
this.propagateEnumConstants = propagateEnumConstants;
this.isDeclareFile = false;
this.parentChain = [];
}
DeclCollectionContext.prototype.getParent = function () {
return this.parentChain ? this.parentChain[this.parentChain.length - 1] : null;
};
DeclCollectionContext.prototype.pushParent = function (parentDecl) {
if (parentDecl) {
this.parentChain[this.parentChain.length] = parentDecl;
}
};
DeclCollectionContext.prototype.popParent = function () {
this.parentChain.length--;
};
return DeclCollectionContext;
})();
function containingModuleHasExportAssignment(ast) {
ast = ast.parent;
while (ast) {
if (ast.kind() === 130 /* ModuleDeclaration */) {
var moduleDecl = ast;
return moduleDecl.moduleElements.any(function (m) {
return m.kind() === 134 /* ExportAssignment */;
});
} else if (ast.kind() === 120 /* SourceUnit */) {
var sourceUnit = ast;
return sourceUnit.moduleElements.any(function (m) {
return m.kind() === 134 /* ExportAssignment */;
});
}
ast = ast.parent;
}
return false;
}
function isParsingAmbientModule(ast, context) {
ast = ast.parent;
while (ast) {
if (ast.kind() === 130 /* ModuleDeclaration */) {
if (TypeScript.hasModifier(ast.modifiers, 8 /* Ambient */)) {
return true;
}
}
ast = ast.parent;
}
return false;
}
function preCollectImportDecls(ast, context) {
var importDecl = ast;
var declFlags = 0 /* None */;
var parent = context.getParent();
if (TypeScript.hasModifier(importDecl.modifiers, 1 /* Exported */) && !containingModuleHasExportAssignment(ast)) {
declFlags |= 1 /* Exported */;
}
var decl = new TypeScript.NormalPullDecl(importDecl.identifier.valueText(), importDecl.identifier.text(), 128 /* TypeAlias */, declFlags, parent);
context.semanticInfoChain.setDeclForAST(ast, decl);
context.semanticInfoChain.setASTForDecl(decl, ast);
}
function preCollectScriptDecls(sourceUnit, context) {
var fileName = sourceUnit.fileName();
var isExternalModule = context.document.isExternalModule();
var decl = new TypeScript.RootPullDecl(fileName, fileName, 1 /* Script */, 0 /* None */, context.semanticInfoChain, isExternalModule);
context.semanticInfoChain.setDeclForAST(sourceUnit, decl);
context.semanticInfoChain.setASTForDecl(decl, sourceUnit);
context.isDeclareFile = context.document.isDeclareFile();
context.pushParent(decl);
if (isExternalModule) {
var declFlags = 1 /* Exported */;
if (TypeScript.isDTSFile(fileName)) {
declFlags |= 8 /* Ambient */;
}
var moduleContainsExecutableCode = containsExecutableCode(sourceUnit.moduleElements);
var kind = 32 /* DynamicModule */;
var valueText = TypeScript.quoteStr(fileName);
var decl = new TypeScript.NormalPullDecl(valueText, fileName, kind, declFlags, context.getParent());
context.semanticInfoChain.setASTForDecl(decl, sourceUnit);
context.semanticInfoChain.setDeclForAST(sourceUnit, decl);
if (moduleContainsExecutableCode) {
createModuleVariableDecl(decl, sourceUnit, context);
}
context.pushParent(decl);
}
}
function preCollectEnumDecls(enumDecl, context) {
var declFlags = 0 /* None */;
var enumName = enumDecl.identifier.valueText();
if ((TypeScript.hasModifier(enumDecl.modifiers, 1 /* Exported */) || isParsingAmbientModule(enumDecl, context)) && !containingModuleHasExportAssignment(enumDecl)) {
declFlags |= 1 /* Exported */;
}
if (TypeScript.hasModifier(enumDecl.modifiers, 8 /* Ambient */) || isParsingAmbientModule(enumDecl, context) || context.isDeclareFile) {
declFlags |= 8 /* Ambient */;
}
declFlags |= 4096 /* Enum */;
var kind = 64 /* Enum */;
var enumDeclaration = new TypeScript.NormalPullDecl(enumName, enumDecl.identifier.text(), kind, declFlags, context.getParent());
context.semanticInfoChain.setDeclForAST(enumDecl, enumDeclaration);
context.semanticInfoChain.setASTForDecl(enumDeclaration, enumDecl);
var valueDecl = new TypeScript.NormalPullDecl(enumDeclaration.name, enumDeclaration.getDisplayName(), 512 /* Variable */, enumDeclaration.flags, context.getParent());
enumDeclaration.setValueDecl(valueDecl);
context.semanticInfoChain.setASTForDecl(valueDecl, enumDecl);
context.pushParent(enumDeclaration);
}
function createEnumElementDecls(propertyDecl, context) {
var parent = context.getParent();
var decl = new TypeScript.PullEnumElementDecl(propertyDecl.propertyName.valueText(), propertyDecl.propertyName.text(), parent);
context.semanticInfoChain.setDeclForAST(propertyDecl, decl);
context.semanticInfoChain.setASTForDecl(decl, propertyDecl);
}
function preCollectModuleDecls(moduleDecl, context) {
var declFlags = 0 /* None */;
var moduleContainsExecutableCode = containsExecutableCode(moduleDecl.moduleElements);
var isDynamic = moduleDecl.stringLiteral !== null;
if ((TypeScript.hasModifier(moduleDecl.modifiers, 1 /* Exported */) || isParsingAmbientModule(moduleDecl, context)) && !containingModuleHasExportAssignment(moduleDecl)) {
declFlags |= 1 /* Exported */;
}
if (TypeScript.hasModifier(moduleDecl.modifiers, 8 /* Ambient */) || isParsingAmbientModule(moduleDecl, context) || context.isDeclareFile) {
declFlags |= 8 /* Ambient */;
}
var kind = isDynamic ? 32 /* DynamicModule */ : 4 /* Container */;
if (moduleDecl.stringLiteral) {
var valueText = TypeScript.quoteStr(moduleDecl.stringLiteral.valueText());
var text = moduleDecl.stringLiteral.text();
var decl = new TypeScript.NormalPullDecl(valueText, text, kind, declFlags, context.getParent());
context.semanticInfoChain.setDeclForAST(moduleDecl, decl);
context.semanticInfoChain.setDeclForAST(moduleDecl.stringLiteral, decl);
context.semanticInfoChain.setASTForDecl(decl, moduleDecl.stringLiteral);
if (moduleContainsExecutableCode) {
createModuleVariableDecl(decl, moduleDecl.stringLiteral, context);
}
context.pushParent(decl);
} else {
var moduleNames = getModuleNames(moduleDecl.name);
for (var i = 0, n = moduleNames.length; i < n; i++) {
var moduleName = moduleNames[i];
var specificFlags = declFlags;
if (i > 0) {
specificFlags |= 1 /* Exported */;
}
var decl = new TypeScript.NormalPullDecl(moduleName.valueText(), moduleName.text(), kind, specificFlags, context.getParent());
context.semanticInfoChain.setDeclForAST(moduleDecl, decl);
context.semanticInfoChain.setDeclForAST(moduleName, decl);
context.semanticInfoChain.setASTForDecl(decl, moduleName);
if (moduleContainsExecutableCode) {
createModuleVariableDecl(decl, moduleName, context);
}
context.pushParent(decl);
}
}
}
function getModuleNames(name, result) {
result = result || [];
if (name.kind() === 121 /* QualifiedName */) {
getModuleNames(name.left, result);
result.push(name.right);
} else {
result.push(name);
}
return result;
}
TypeScript.getModuleNames = getModuleNames;
function createModuleVariableDecl(decl, moduleNameAST, context) {
decl.setFlags(decl.flags | getInitializationFlag(decl));
var valueDecl = new TypeScript.NormalPullDecl(decl.name, decl.getDisplayName(), 512 /* Variable */, decl.flags, context.getParent());
decl.setValueDecl(valueDecl);
context.semanticInfoChain.setASTForDecl(valueDecl, moduleNameAST);
}
function containsExecutableCode(members) {
for (var i = 0, n = members.childCount(); i < n; i++) {
var member = members.childAt(i);
if (member.kind() === 130 /* ModuleDeclaration */) {
var moduleDecl = member;
if (containsExecutableCode(moduleDecl.moduleElements)) {
return true;
}
} else if (member.kind() === 133 /* ImportDeclaration */) {
if (TypeScript.hasModifier(member.modifiers, 1 /* Exported */)) {
return true;
}
} else if (member.kind() !== 128 /* InterfaceDeclaration */) {
return true;
}
}
return false;
}
function preCollectClassDecls(classDecl, context) {
var declFlags = 0 /* None */;
if ((TypeScript.hasModifier(classDecl.modifiers, 1 /* Exported */) || isParsingAmbientModule(classDecl, context)) && !containingModuleHasExportAssignment(classDecl)) {
declFlags |= 1 /* Exported */;
}
if (TypeScript.hasModifier(classDecl.modifiers, 8 /* Ambient */) || isParsingAmbientModule(classDecl, context) || context.isDeclareFile) {
declFlags |= 8 /* Ambient */;
}
var parent = context.getParent();
var decl = new TypeScript.NormalPullDecl(classDecl.identifier.valueText(), classDecl.identifier.text(), 8 /* Class */, declFlags, parent);
var constructorDecl = new TypeScript.NormalPullDecl(classDecl.identifier.valueText(), classDecl.identifier.text(), 512 /* Variable */, declFlags | 16384 /* ClassConstructorVariable */, parent);
decl.setValueDecl(constructorDecl);
context.semanticInfoChain.setDeclForAST(classDecl, decl);
context.semanticInfoChain.setASTForDecl(decl, classDecl);
context.semanticInfoChain.setASTForDecl(constructorDecl, classDecl);
context.pushParent(decl);
}
function preCollectObjectTypeDecls(objectType, context) {
if (objectType.parent.kind() === 128 /* InterfaceDeclaration */) {
return;
}
var declFlags = 0 /* None */;
var parent = context.getParent();
if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) {
declFlags |= 2097152 /* DeclaredInAWithBlock */;
}
var decl = new TypeScript.NormalPullDecl("", "", 8388608 /* ObjectType */, declFlags, parent);
context.semanticInfoChain.setDeclForAST(objectType, decl);
context.semanticInfoChain.setASTForDecl(decl, objectType);
context.pushParent(decl);
}
function preCollectInterfaceDecls(interfaceDecl, context) {
var declFlags = 0 /* None */;
if ((TypeScript.hasModifier(interfaceDecl.modifiers, 1 /* Exported */) || isParsingAmbientModule(interfaceDecl, context)) && !containingModuleHasExportAssignment(interfaceDecl)) {
declFlags |= 1 /* Exported */;
}
var parent = context.getParent();
var decl = new TypeScript.NormalPullDecl(interfaceDecl.identifier.valueText(), interfaceDecl.identifier.text(), 16 /* Interface */, declFlags, parent);
context.semanticInfoChain.setDeclForAST(interfaceDecl, decl);
context.semanticInfoChain.setASTForDecl(decl, interfaceDecl);
context.pushParent(decl);
}
function preCollectParameterDecl(argDecl, context) {
var declFlags = 0 /* None */;
if (TypeScript.hasModifier(argDecl.modifiers, 2 /* Private */)) {
declFlags |= 2 /* Private */;
} else {
declFlags |= 4 /* Public */;
}
if (argDecl.questionToken !== null || argDecl.equalsValueClause !== null || argDecl.dotDotDotToken !== null) {
declFlags |= 128 /* Optional */;
}
var parent = context.getParent();
if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) {
declFlags |= 2097152 /* DeclaredInAWithBlock */;
}
var decl = new TypeScript.NormalPullDecl(argDecl.identifier.valueText(), argDecl.identifier.text(), 2048 /* Parameter */, declFlags, parent);
if (argDecl.equalsValueClause) {
parent.flags |= 33554432 /* HasDefaultArgs */;
}
if (parent.kind === 32768 /* ConstructorMethod */) {
decl.setFlag(67108864 /* ConstructorParameter */);
}
var isPublicOrPrivate = TypeScript.hasModifier(argDecl.modifiers, 4 /* Public */ | 2 /* Private */);
var isInConstructor = parent.kind === 32768 /* ConstructorMethod */;
if (isPublicOrPrivate && isInConstructor) {
var parentsParent = context.parentChain[context.parentChain.length - 2];
var propDeclFlags = declFlags & ~128 /* Optional */;
var propDecl = new TypeScript.NormalPullDecl(argDecl.identifier.valueText(), argDecl.identifier.text(), 4096 /* Property */, propDeclFlags, parentsParent);
propDecl.setValueDecl(decl);
decl.setFlag(8388608 /* PropertyParameter */);
propDecl.setFlag(8388608 /* PropertyParameter */);
if (parent.kind === 32768 /* ConstructorMethod */) {
propDecl.setFlag(67108864 /* ConstructorParameter */);
}
context.semanticInfoChain.setASTForDecl(decl, argDecl);
context.semanticInfoChain.setASTForDecl(propDecl, argDecl);
context.semanticInfoChain.setDeclForAST(argDecl, propDecl);
} else {
context.semanticInfoChain.setASTForDecl(decl, argDecl);
context.semanticInfoChain.setDeclForAST(argDecl, decl);
}
parent.addVariableDeclToGroup(decl);
}
function preCollectTypeParameterDecl(typeParameterDecl, context) {
var declFlags = 0 /* None */;
var parent = context.getParent();
if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) {
declFlags |= 2097152 /* DeclaredInAWithBlock */;
}
var decl = new TypeScript.NormalPullDecl(typeParameterDecl.identifier.valueText(), typeParameterDecl.identifier.text(), 8192 /* TypeParameter */, declFlags, parent);
context.semanticInfoChain.setASTForDecl(decl, typeParameterDecl);
context.semanticInfoChain.setDeclForAST(typeParameterDecl, decl);
}
function createPropertySignature(propertyDecl, context) {
var declFlags = 4 /* Public */;
var parent = context.getParent();
var declType = 4096 /* Property */;
if (propertyDecl.questionToken !== null) {
declFlags |= 128 /* Optional */;
}
var decl = new TypeScript.NormalPullDecl(propertyDecl.propertyName.valueText(), propertyDecl.propertyName.text(), declType, declFlags, parent);
context.semanticInfoChain.setDeclForAST(propertyDecl, decl);
context.semanticInfoChain.setASTForDecl(decl, propertyDecl);
}
function createMemberVariableDeclaration(memberDecl, context) {
var declFlags = 0 /* None */;
var declType = 4096 /* Property */;
if (TypeScript.hasModifier(memberDecl.modifiers, 2 /* Private */)) {
declFlags |= 2 /* Private */;
} else {
declFlags |= 4 /* Public */;
}
if (TypeScript.hasModifier(memberDecl.modifiers, 16 /* Static */)) {
declFlags |= 16 /* Static */;
}
var parent = context.getParent();
var decl = new TypeScript.NormalPullDecl(memberDecl.variableDeclarator.propertyName.valueText(), memberDecl.variableDeclarator.propertyName.text(), declType, declFlags, parent);
context.semanticInfoChain.setDeclForAST(memberDecl, decl);
context.semanticInfoChain.setDeclForAST(memberDecl.variableDeclarator, decl);
context.semanticInfoChain.setASTForDecl(decl, memberDecl);
}
function createVariableDeclaration(varDecl, context) {
var declFlags = 0 /* None */;
var declType = 512 /* Variable */;
var modifiers = TypeScript.ASTHelpers.getVariableDeclaratorModifiers(varDecl);
if ((TypeScript.hasModifier(modifiers, 1 /* Exported */) || isParsingAmbientModule(varDecl, context)) && !containingModuleHasExportAssignment(varDecl)) {
declFlags |= 1 /* Exported */;
}
if (TypeScript.hasModifier(modifiers, 8 /* Ambient */) || isParsingAmbientModule(varDecl, context) || context.isDeclareFile) {
declFlags |= 8 /* Ambient */;
}
var parent = context.getParent();
if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) {
declFlags |= 2097152 /* DeclaredInAWithBlock */;
}
var decl = new TypeScript.NormalPullDecl(varDecl.propertyName.valueText(), varDecl.propertyName.text(), declType, declFlags, parent);
context.semanticInfoChain.setDeclForAST(varDecl, decl);
context.semanticInfoChain.setASTForDecl(decl, varDecl);
if (parent) {
parent.addVariableDeclToGroup(decl);
}
}
function preCollectVarDecls(ast, context) {
if (ast.parent.kind() === 136 /* MemberVariableDeclaration */) {
return;
}
var varDecl = ast;
createVariableDeclaration(varDecl, context);
}
function createFunctionTypeDeclaration(functionTypeDeclAST, context) {
var declFlags = 2048 /* Signature */;
var declType = 16777216 /* FunctionType */;
var parent = context.getParent();
if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) {
declFlags |= 2097152 /* DeclaredInAWithBlock */;
}
var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent);
context.semanticInfoChain.setDeclForAST(functionTypeDeclAST, decl);
context.semanticInfoChain.setASTForDecl(decl, functionTypeDeclAST);
context.pushParent(decl);
}
function createConstructorTypeDeclaration(constructorTypeDeclAST, context) {
var declFlags = 0 /* None */;
var declType = 33554432 /* ConstructorType */;
var parent = context.getParent();
if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) {
declFlags |= 2097152 /* DeclaredInAWithBlock */;
}
var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent);
context.semanticInfoChain.setDeclForAST(constructorTypeDeclAST, decl);
context.semanticInfoChain.setASTForDecl(decl, constructorTypeDeclAST);
context.pushParent(decl);
}
function createFunctionDeclaration(funcDeclAST, context) {
var declFlags = 0 /* None */;
var declType = 16384 /* Function */;
if ((TypeScript.hasModifier(funcDeclAST.modifiers, 1 /* Exported */) || isParsingAmbientModule(funcDeclAST, context)) && !containingModuleHasExportAssignment(funcDeclAST)) {
declFlags |= 1 /* Exported */;
}
if (TypeScript.hasModifier(funcDeclAST.modifiers, 8 /* Ambient */) || isParsingAmbientModule(funcDeclAST, context) || context.isDeclareFile) {
declFlags |= 8 /* Ambient */;
}
if (!funcDeclAST.block) {
declFlags |= 2048 /* Signature */;
}
var parent = context.getParent();
if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) {
declFlags |= 2097152 /* DeclaredInAWithBlock */;
}
var decl = new TypeScript.NormalPullDecl(funcDeclAST.identifier.valueText(), funcDeclAST.identifier.text(), declType, declFlags, parent);
context.semanticInfoChain.setDeclForAST(funcDeclAST, decl);
context.semanticInfoChain.setASTForDecl(decl, funcDeclAST);
context.pushParent(decl);
}
function createAnyFunctionExpressionDeclaration(functionExpressionDeclAST, id, context, displayName) {
if (typeof displayName === "undefined") { displayName = null; }
var declFlags = 0 /* None */;
if (functionExpressionDeclAST.kind() === 219 /* SimpleArrowFunctionExpression */ || functionExpressionDeclAST.kind() === 218 /* ParenthesizedArrowFunctionExpression */) {
declFlags |= 8192 /* ArrowFunction */;
}
var parent = context.getParent();
if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) {
declFlags |= 2097152 /* DeclaredInAWithBlock */;
}
var name = id ? id.text() : "";
var displayNameText = displayName ? displayName.text() : "";
var decl = new TypeScript.PullFunctionExpressionDecl(name, declFlags, parent, displayNameText);
context.semanticInfoChain.setDeclForAST(functionExpressionDeclAST, decl);
context.semanticInfoChain.setASTForDecl(decl, functionExpressionDeclAST);
context.pushParent(decl);
if (functionExpressionDeclAST.kind() === 219 /* SimpleArrowFunctionExpression */) {
var simpleArrow = functionExpressionDeclAST;
var declFlags = 4 /* Public */;
var parent = context.getParent();
if (TypeScript.hasFlag(parent.flags, 2097152 /* DeclaredInAWithBlock */)) {
declFlags |= 2097152 /* DeclaredInAWithBlock */;
}
var decl = new TypeScript.NormalPullDecl(simpleArrow.identifier.valueText(), simpleArrow.identifier.text(), 2048 /* Parameter */, declFlags, parent);
context.semanticInfoChain.setASTForDecl(decl, simpleArrow.identifier);
context.semanticInfoChain.setDeclForAST(simpleArrow.identifier, decl);
parent.addVariableDeclToGroup(decl);
}
}
function createMemberFunctionDeclaration(funcDecl, context) {
var declFlags = 0 /* None */;
var declType = 65536 /* Method */;
if (TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */)) {
declFlags |= 16 /* Static */;
}
if (TypeScript.hasModifier(funcDecl.modifiers, 2 /* Private */)) {
declFlags |= 2 /* Private */;
} else {
declFlags |= 4 /* Public */;
}
if (!funcDecl.block) {
declFlags |= 2048 /* Signature */;
}
var parent = context.getParent();
var decl = new TypeScript.NormalPullDecl(funcDecl.propertyName.valueText(), funcDecl.propertyName.text(), declType, declFlags, parent);
context.semanticInfoChain.setDeclForAST(funcDecl, decl);
context.semanticInfoChain.setASTForDecl(decl, funcDecl);
context.pushParent(decl);
}
function createIndexSignatureDeclaration(indexSignatureDeclAST, context) {
var declFlags = 2048 /* Signature */;
var declType = 4194304 /* IndexSignature */;
var parent = context.getParent();
var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent);
context.semanticInfoChain.setDeclForAST(indexSignatureDeclAST, decl);
context.semanticInfoChain.setASTForDecl(decl, indexSignatureDeclAST);
context.pushParent(decl);
}
function createCallSignatureDeclaration(callSignature, context) {
var isChildOfObjectType = callSignature.parent && callSignature.parent.parent && callSignature.parent.kind() === 2 /* SeparatedList */ && callSignature.parent.parent.kind() === 122 /* ObjectType */;
if (!isChildOfObjectType) {
return;
}
var declFlags = 2048 /* Signature */;
var declType = 1048576 /* CallSignature */;
var parent = context.getParent();
if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) {
declFlags |= 2097152 /* DeclaredInAWithBlock */;
}
var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent);
context.semanticInfoChain.setDeclForAST(callSignature, decl);
context.semanticInfoChain.setASTForDecl(decl, callSignature);
context.pushParent(decl);
}
function createMethodSignatureDeclaration(method, context) {
var declFlags = 0 /* None */;
var declType = 65536 /* Method */;
declFlags |= 4 /* Public */;
declFlags |= 2048 /* Signature */;
if (method.questionToken !== null) {
declFlags |= 128 /* Optional */;
}
var parent = context.getParent();
var decl = new TypeScript.NormalPullDecl(method.propertyName.valueText(), method.propertyName.text(), declType, declFlags, parent);
context.semanticInfoChain.setDeclForAST(method, decl);
context.semanticInfoChain.setASTForDecl(decl, method);
context.pushParent(decl);
}
function createConstructSignatureDeclaration(constructSignatureDeclAST, context) {
var declFlags = 2048 /* Signature */;
var declType = 2097152 /* ConstructSignature */;
var parent = context.getParent();
if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) {
declFlags |= 2097152 /* DeclaredInAWithBlock */;
}
var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent);
context.semanticInfoChain.setDeclForAST(constructSignatureDeclAST, decl);
context.semanticInfoChain.setASTForDecl(decl, constructSignatureDeclAST);
context.pushParent(decl);
}
function createClassConstructorDeclaration(constructorDeclAST, context) {
var declFlags = 0 /* None */;
var declType = 32768 /* ConstructorMethod */;
if (!constructorDeclAST.block) {
declFlags |= 2048 /* Signature */;
}
var parent = context.getParent();
if (parent) {
var parentFlags = parent.flags;
if (parentFlags & 1 /* Exported */) {
declFlags |= 1 /* Exported */;
}
}
var decl = new TypeScript.NormalPullDecl(parent.name, parent.getDisplayName(), declType, declFlags, parent);
context.semanticInfoChain.setDeclForAST(constructorDeclAST, decl);
context.semanticInfoChain.setASTForDecl(decl, constructorDeclAST);
context.pushParent(decl);
}
function createGetAccessorDeclaration(getAccessorDeclAST, context) {
var declFlags = 4 /* Public */;
var declType = 262144 /* GetAccessor */;
if (TypeScript.hasModifier(getAccessorDeclAST.modifiers, 16 /* Static */)) {
declFlags |= 16 /* Static */;
}
if (TypeScript.hasModifier(getAccessorDeclAST.modifiers, 2 /* Private */)) {
declFlags |= 2 /* Private */;
} else {
declFlags |= 4 /* Public */;
}
var parent = context.getParent();
if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) {
declFlags |= 2097152 /* DeclaredInAWithBlock */;
}
var decl = new TypeScript.NormalPullDecl(getAccessorDeclAST.propertyName.valueText(), getAccessorDeclAST.propertyName.text(), declType, declFlags, parent);
context.semanticInfoChain.setDeclForAST(getAccessorDeclAST, decl);
context.semanticInfoChain.setASTForDecl(decl, getAccessorDeclAST);
context.pushParent(decl);
}
function createFunctionExpressionDeclaration(expression, context) {
createAnyFunctionExpressionDeclaration(expression, expression.identifier, context);
}
function createSetAccessorDeclaration(setAccessorDeclAST, context) {
var declFlags = 4 /* Public */;
var declType = 524288 /* SetAccessor */;
if (TypeScript.hasModifier(setAccessorDeclAST.modifiers, 16 /* Static */)) {
declFlags |= 16 /* Static */;
}
if (TypeScript.hasModifier(setAccessorDeclAST.modifiers, 2 /* Private */)) {
declFlags |= 2 /* Private */;
} else {
declFlags |= 4 /* Public */;
}
var parent = context.getParent();
if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) {
declFlags |= 2097152 /* DeclaredInAWithBlock */;
}
var decl = new TypeScript.NormalPullDecl(setAccessorDeclAST.propertyName.valueText(), setAccessorDeclAST.propertyName.text(), declType, declFlags, parent);
context.semanticInfoChain.setDeclForAST(setAccessorDeclAST, decl);
context.semanticInfoChain.setASTForDecl(decl, setAccessorDeclAST);
context.pushParent(decl);
}
function preCollectCatchDecls(ast, context) {
var declFlags = 0 /* None */;
var declType = 268435456 /* CatchBlock */;
var parent = context.getParent();
if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) {
declFlags |= 2097152 /* DeclaredInAWithBlock */;
}
var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent);
context.semanticInfoChain.setDeclForAST(ast, decl);
context.semanticInfoChain.setASTForDecl(decl, ast);
context.pushParent(decl);
var declFlags = 0 /* None */;
var declType = 1024 /* CatchVariable */;
var parent = context.getParent();
if (TypeScript.hasFlag(parent.flags, 2097152 /* DeclaredInAWithBlock */)) {
declFlags |= 2097152 /* DeclaredInAWithBlock */;
}
var decl = new TypeScript.NormalPullDecl(ast.identifier.valueText(), ast.identifier.text(), declType, declFlags, parent);
context.semanticInfoChain.setDeclForAST(ast.identifier, decl);
context.semanticInfoChain.setASTForDecl(decl, ast.identifier);
if (parent) {
parent.addVariableDeclToGroup(decl);
}
}
function preCollectWithDecls(ast, context) {
var declFlags = 0 /* None */;
var declType = 134217728 /* WithBlock */;
var parent = context.getParent();
var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent);
context.semanticInfoChain.setDeclForAST(ast, decl);
context.semanticInfoChain.setASTForDecl(decl, ast);
context.pushParent(decl);
}
function preCollectObjectLiteralDecls(ast, context) {
var decl = new TypeScript.NormalPullDecl("", "", 256 /* ObjectLiteral */, 0 /* None */, context.getParent());
context.semanticInfoChain.setDeclForAST(ast, decl);
context.semanticInfoChain.setASTForDecl(decl, ast);
context.pushParent(decl);
}
function preCollectSimplePropertyAssignmentDecls(propertyAssignment, context) {
var assignmentText = TypeScript.getPropertyAssignmentNameTextFromIdentifier(propertyAssignment.propertyName);
var span = TypeScript.TextSpan.fromBounds(propertyAssignment.start(), propertyAssignment.end());
var decl = new TypeScript.NormalPullDecl(assignmentText.memberName, assignmentText.actualText, 4096 /* Property */, 4 /* Public */, context.getParent());
context.semanticInfoChain.setDeclForAST(propertyAssignment, decl);
context.semanticInfoChain.setASTForDecl(decl, propertyAssignment);
}
function preCollectFunctionPropertyAssignmentDecls(propertyAssignment, context) {
var assignmentText = TypeScript.getPropertyAssignmentNameTextFromIdentifier(propertyAssignment.propertyName);
var decl = new TypeScript.NormalPullDecl(assignmentText.memberName, assignmentText.actualText, 4096 /* Property */, 4 /* Public */, context.getParent());
context.semanticInfoChain.setDeclForAST(propertyAssignment, decl);
context.semanticInfoChain.setASTForDecl(decl, propertyAssignment);
createAnyFunctionExpressionDeclaration(propertyAssignment, propertyAssignment.propertyName, context, propertyAssignment.propertyName);
}
function preCollectDecls(ast, context) {
switch (ast.kind()) {
case 120 /* SourceUnit */:
preCollectScriptDecls(ast, context);
break;
case 132 /* EnumDeclaration */:
preCollectEnumDecls(ast, context);
break;
case 243 /* EnumElement */:
createEnumElementDecls(ast, context);
break;
case 130 /* ModuleDeclaration */:
preCollectModuleDecls(ast, context);
break;
case 131 /* ClassDeclaration */:
preCollectClassDecls(ast, context);
break;
case 128 /* InterfaceDeclaration */:
preCollectInterfaceDecls(ast, context);
break;
case 122 /* ObjectType */:
preCollectObjectTypeDecls(ast, context);
break;
case 242 /* Parameter */:
preCollectParameterDecl(ast, context);
break;
case 136 /* MemberVariableDeclaration */:
createMemberVariableDeclaration(ast, context);
break;
case 141 /* PropertySignature */:
createPropertySignature(ast, context);
break;
case 225 /* VariableDeclarator */:
preCollectVarDecls(ast, context);
break;
case 137 /* ConstructorDeclaration */:
createClassConstructorDeclaration(ast, context);
break;
case 139 /* GetAccessor */:
createGetAccessorDeclaration(ast, context);
break;
case 140 /* SetAccessor */:
createSetAccessorDeclaration(ast, context);
break;
case 222 /* FunctionExpression */:
createFunctionExpressionDeclaration(ast, context);
break;
case 135 /* MemberFunctionDeclaration */:
createMemberFunctionDeclaration(ast, context);
break;
case 144 /* IndexSignature */:
createIndexSignatureDeclaration(ast, context);
break;
case 123 /* FunctionType */:
createFunctionTypeDeclaration(ast, context);
break;
case 125 /* ConstructorType */:
createConstructorTypeDeclaration(ast, context);
break;
case 142 /* CallSignature */:
createCallSignatureDeclaration(ast, context);
break;
case 143 /* ConstructSignature */:
createConstructSignatureDeclaration(ast, context);
break;
case 145 /* MethodSignature */:
createMethodSignatureDeclaration(ast, context);
break;
case 129 /* FunctionDeclaration */:
createFunctionDeclaration(ast, context);
break;
case 219 /* SimpleArrowFunctionExpression */:
case 218 /* ParenthesizedArrowFunctionExpression */:
createAnyFunctionExpressionDeclaration(ast, null, context);
break;
case 133 /* ImportDeclaration */:
preCollectImportDecls(ast, context);
break;
case 238 /* TypeParameter */:
preCollectTypeParameterDecl(ast, context);
break;
case 236 /* CatchClause */:
preCollectCatchDecls(ast, context);
break;
case 163 /* WithStatement */:
preCollectWithDecls(ast, context);
break;
case 215 /* ObjectLiteralExpression */:
preCollectObjectLiteralDecls(ast, context);
break;
case 240 /* SimplePropertyAssignment */:
preCollectSimplePropertyAssignmentDecls(ast, context);
break;
case 241 /* FunctionPropertyAssignment */:
preCollectFunctionPropertyAssignmentDecls(ast, context);
break;
}
}
function isContainer(decl) {
return decl.kind === 4 /* Container */ || decl.kind === 32 /* DynamicModule */ || decl.kind === 64 /* Enum */;
}
function getInitializationFlag(decl) {
if (decl.kind & 4 /* Container */) {
return 32768 /* InitializedModule */;
} else if (decl.kind & 32 /* DynamicModule */) {
return 65536 /* InitializedDynamicModule */;
}
return 0 /* None */;
}
function hasInitializationFlag(decl) {
var kind = decl.kind;
if (kind & 4 /* Container */) {
return (decl.flags & 32768 /* InitializedModule */) !== 0;
} else if (kind & 32 /* DynamicModule */) {
return (decl.flags & 65536 /* InitializedDynamicModule */) !== 0;
}
return false;
}
function postCollectDecls(ast, context) {
var currentDecl = context.getParent();
if (ast.kind() === 11 /* IdentifierName */ || ast.kind() === 14 /* StringLiteral */) {
if (currentDecl.kind === 4 /* Container */ || currentDecl.kind === 32 /* DynamicModule */) {
return;
}
}
if (ast.kind() === 130 /* ModuleDeclaration */) {
var moduleDeclaration = ast;
if (moduleDeclaration.stringLiteral) {
TypeScript.Debug.assert(currentDecl.ast() === moduleDeclaration.stringLiteral);
context.popParent();
} else {
var moduleNames = getModuleNames(moduleDeclaration.name);
for (var i = moduleNames.length - 1; i >= 0; i--) {
var moduleName = moduleNames[i];
TypeScript.Debug.assert(currentDecl.ast() === moduleName);
context.popParent();
currentDecl = context.getParent();
}
}
}
if (ast.kind() === 132 /* EnumDeclaration */) {
computeEnumElementConstantValues(ast, currentDecl, context);
}
while (currentDecl.getParentDecl() && currentDecl.ast() === ast) {
context.popParent();
currentDecl = context.getParent();
}
}
function computeEnumElementConstantValues(ast, enumDecl, context) {
TypeScript.Debug.assert(enumDecl.kind === 64 /* Enum */);
var isAmbientEnum = TypeScript.hasFlag(enumDecl.flags, 8 /* Ambient */);
var inConstantSection = !isAmbientEnum;
var currentConstantValue = 0;
var enumMemberDecls = enumDecl.getChildDecls();
for (var i = 0, n = ast.enumElements.nonSeparatorCount(); i < n; i++) {
var enumElement = ast.enumElements.nonSeparatorAt(i);
var enumElementDecl = TypeScript.ArrayUtilities.first(enumMemberDecls, function (d) {
return context.semanticInfoChain.getASTForDecl(d) === enumElement;
});
TypeScript.Debug.assert(enumElementDecl.kind === 67108864 /* EnumMember */);
if (enumElement.equalsValueClause === null) {
if (inConstantSection) {
enumElementDecl.constantValue = currentConstantValue;
currentConstantValue++;
}
} else {
enumElementDecl.constantValue = computeEnumElementConstantValue(enumElement.equalsValueClause.value, enumMemberDecls, context);
if (enumElementDecl.constantValue !== null && !isAmbientEnum) {
inConstantSection = true;
currentConstantValue = enumElementDecl.constantValue + 1;
} else {
inConstantSection = false;
}
}
TypeScript.Debug.assert(enumElementDecl.constantValue !== undefined);
}
}
function computeEnumElementConstantValue(expression, enumMemberDecls, context) {
TypeScript.Debug.assert(expression);
if (TypeScript.ASTHelpers.isIntegerLiteralAST(expression)) {
var token;
switch (expression.kind()) {
case 164 /* PlusExpression */:
case 165 /* NegateExpression */:
token = expression.operand;
break;
default:
token = expression;
}
var value = token.value();
return value && expression.kind() === 165 /* NegateExpression */ ? -value : value;
} else if (context.propagateEnumConstants) {
switch (expression.kind()) {
case 11 /* IdentifierName */:
var name = expression;
var matchingEnumElement = TypeScript.ArrayUtilities.firstOrDefault(enumMemberDecls, function (d) {
return d.name === name.valueText();
});
return matchingEnumElement ? matchingEnumElement.constantValue : null;
case 202 /* LeftShiftExpression */:
var binaryExpression = expression;
var left = computeEnumElementConstantValue(binaryExpression.left, enumMemberDecls, context);
var right = computeEnumElementConstantValue(binaryExpression.right, enumMemberDecls, context);
if (left === null || right === null) {
return null;
}
return left << right;
case 189 /* BitwiseOrExpression */:
var binaryExpression = expression;
var left = computeEnumElementConstantValue(binaryExpression.left, enumMemberDecls, context);
var right = computeEnumElementConstantValue(binaryExpression.right, enumMemberDecls, context);
if (left === null || right === null) {
return null;
}
return left | right;
}
return null;
} else {
return null;
}
}
(function (DeclarationCreator) {
function create(document, semanticInfoChain, compilationSettings) {
var declCollectionContext = new DeclCollectionContext(document, semanticInfoChain, compilationSettings.propagateEnumConstants());
TypeScript.getAstWalkerFactory().simpleWalk(document.sourceUnit(), preCollectDecls, postCollectDecls, declCollectionContext);
return declCollectionContext.getParent();
}
DeclarationCreator.create = create;
})(TypeScript.DeclarationCreator || (TypeScript.DeclarationCreator = {}));
var DeclarationCreator = TypeScript.DeclarationCreator;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var PullSymbolBinder = (function () {
function PullSymbolBinder(semanticInfoChain) {
this.semanticInfoChain = semanticInfoChain;
this.declsBeingBound = [];
this.inBindingOtherDeclsWalker = new TypeScript.PullHelpers.OtherPullDeclsWalker();
}
PullSymbolBinder.prototype.getParent = function (decl, returnInstanceType) {
if (typeof returnInstanceType === "undefined") { returnInstanceType = false; }
var parentDecl = decl.getParentDecl();
if (parentDecl.kind === 1 /* Script */) {
return null;
}
var parent = parentDecl.getSymbol();
if (!parent && parentDecl && !parentDecl.hasBeenBound()) {
this.bindDeclToPullSymbol(parentDecl);
}
parent = parentDecl.getSymbol();
if (parent) {
var parentDeclKind = parentDecl.kind;
if (parentDeclKind === 262144 /* GetAccessor */) {
parent = parent.getGetter();
} else if (parentDeclKind === 524288 /* SetAccessor */) {
parent = parent.getSetter();
}
}
if (parent) {
if (returnInstanceType && parent.isType() && parent.isContainer()) {
var instanceSymbol = parent.getInstanceSymbol();
if (instanceSymbol) {
return instanceSymbol.type;
}
}
return parent.type;
}
return null;
};
PullSymbolBinder.prototype.findDeclsInContext = function (startingDecl, declKind, searchGlobally) {
if (!searchGlobally) {
var parentDecl = startingDecl.getParentDecl();
return parentDecl.searchChildDecls(startingDecl.name, declKind);
}
var contextSymbolPath = startingDecl.getParentPath();
if (contextSymbolPath.length) {
var copyOfContextSymbolPath = [];
for (var i = 0; i < contextSymbolPath.length; i++) {
if (contextSymbolPath[i].kind & 1 /* Script */) {
continue;
}
copyOfContextSymbolPath[copyOfContextSymbolPath.length] = contextSymbolPath[i].name;
}
return this.semanticInfoChain.findDecls(copyOfContextSymbolPath, declKind);
}
};
PullSymbolBinder.prototype.getExistingSymbol = function (decl, searchKind, parent) {
var lookingForValue = (searchKind & 68147712 /* SomeValue */) !== 0;
var lookingForType = (searchKind & 58728795 /* SomeType */) !== 0;
var lookingForContainer = (searchKind & 164 /* SomeContainer */) !== 0;
var name = decl.name;
if (parent) {
var isExported = (decl.flags & 1 /* Exported */) !== 0;
var prevSymbol = null;
if (lookingForValue) {
prevSymbol = parent.findContainedNonMember(name);
} else if (lookingForType) {
prevSymbol = parent.findContainedNonMemberType(name, searchKind);
} else if (lookingForContainer) {
prevSymbol = parent.findContainedNonMemberContainer(name, searchKind);
}
var prevIsExported = !prevSymbol;
if (!prevSymbol) {
if (lookingForValue) {
prevSymbol = parent.findMember(name, false);
} else if (lookingForType) {
prevSymbol = parent.findNestedType(name, searchKind);
} else if (lookingForContainer) {
prevSymbol = parent.findNestedContainer(name, searchKind);
}
}
if (isExported && prevIsExported) {
return prevSymbol;
}
if (prevSymbol) {
var prevDecls = prevSymbol.getDeclarations();
var lastPrevDecl = prevDecls[prevDecls.length - 1];
var parentDecl = decl.getParentDecl();
var prevParentDecl = lastPrevDecl && lastPrevDecl.getParentDecl();
if (parentDecl !== prevParentDecl) {
return null;
}
return prevSymbol;
}
} else {
var parentDecl = decl.getParentDecl();
if (parentDecl && parentDecl.kind === 1 /* Script */) {
return this.semanticInfoChain.findTopLevelSymbol(name, searchKind, decl);
} else {
var prevDecls = parentDecl && parentDecl.searchChildDecls(name, searchKind);
return prevDecls[0] && prevDecls[0].getSymbol();
}
}
return null;
};
PullSymbolBinder.prototype.checkThatExportsMatch = function (decl, prevSymbol, reportError) {
if (typeof reportError === "undefined") { reportError = true; }
var isExported = (decl.flags & 1 /* Exported */) !== 0;
var prevDecls = prevSymbol.getDeclarations();
var prevIsExported = (prevDecls[prevDecls.length - 1].flags & 1 /* Exported */) !== 0;
if ((isExported !== prevIsExported) && !prevSymbol.isSignature() && (decl.kind & 7340032 /* SomeSignature */) === 0) {
if (reportError) {
var ast = this.semanticInfoChain.getASTForDecl(decl);
this.semanticInfoChain.addDiagnosticFromAST(ast, TypeScript.DiagnosticCode.All_declarations_of_merged_declaration_0_must_be_exported_or_not_exported, [decl.getDisplayName()]);
}
return false;
}
return true;
};
PullSymbolBinder.prototype.getIndexForInsertingSignatureAtEndOfEnclosingDeclInSignatureList = function (signature, currentSignatures) {
var signatureDecl = signature.getDeclarations()[0];
TypeScript.Debug.assert(signatureDecl);
var enclosingDecl = signatureDecl.getParentDecl();
var indexToInsert = TypeScript.ArrayUtilities.indexOf(currentSignatures, function (someSignature) {
return someSignature.getDeclarations()[0].getParentDecl() !== enclosingDecl;
});
return indexToInsert < 0 ? currentSignatures.length : indexToInsert;
};
PullSymbolBinder.prototype.bindEnumDeclarationToPullSymbol = function (enumContainerDecl) {
var enumName = enumContainerDecl.name;
var enumContainerSymbol = null;
var enumInstanceSymbol = null;
var moduleInstanceTypeSymbol = null;
var enumInstanceDecl = enumContainerDecl.getValueDecl();
var enumDeclKind = enumContainerDecl.kind;
var parent = this.getParent(enumContainerDecl);
var parentInstanceSymbol = this.getParent(enumContainerDecl, true);
var parentDecl = enumContainerDecl.getParentDecl();
var enumAST = this.semanticInfoChain.getASTForDecl(enumContainerDecl);
var isExported = enumContainerDecl.flags & 1 /* Exported */;
var createdNewSymbol = false;
enumContainerSymbol = this.getExistingSymbol(enumContainerDecl, 64 /* Enum */, parent);
if (enumContainerSymbol) {
if (enumContainerSymbol.kind !== enumDeclKind) {
this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(enumAST.identifier, enumContainerDecl.getDisplayName(), enumContainerSymbol.getDeclarations()[0].ast());
enumContainerSymbol = null;
} else if (!this.checkThatExportsMatch(enumContainerDecl, enumContainerSymbol)) {
enumContainerSymbol = null;
}
}
if (enumContainerSymbol) {
enumInstanceSymbol = enumContainerSymbol.getInstanceSymbol();
} else {
enumContainerSymbol = new TypeScript.PullContainerSymbol(enumName, enumDeclKind);
createdNewSymbol = true;
if (!parent) {
this.semanticInfoChain.cacheGlobalSymbol(enumContainerSymbol, 64 /* Enum */);
}
}
enumContainerSymbol.addDeclaration(enumContainerDecl);
enumContainerDecl.setSymbol(enumContainerSymbol);
this.semanticInfoChain.setSymbolForAST(enumAST.identifier, enumContainerSymbol);
this.semanticInfoChain.setSymbolForAST(enumAST, enumContainerSymbol);
if (!enumInstanceSymbol) {
var variableSymbol = null;
if (parentInstanceSymbol) {
if (isExported) {
variableSymbol = parentInstanceSymbol.findMember(enumName, false);
if (!variableSymbol) {
variableSymbol = parentInstanceSymbol.findContainedNonMember(enumName);
}
} else {
variableSymbol = parentInstanceSymbol.findContainedNonMember(enumName);
if (!variableSymbol) {
variableSymbol = parentInstanceSymbol.findMember(enumName, false);
}
}
if (variableSymbol) {
var declarations = variableSymbol.getDeclarations();
if (declarations.length) {
var variableSymbolParentDecl = declarations[0].getParentDecl();
if (parentDecl !== variableSymbolParentDecl) {
variableSymbol = null;
}
}
}
} else if (!(enumContainerDecl.flags & 1 /* Exported */)) {
var siblingDecls = parentDecl.getChildDecls();
var augmentedDecl = null;
for (var i = 0; i < siblingDecls.length; i++) {
if (siblingDecls[i] === enumContainerDecl) {
break;
}
if ((siblingDecls[i].name === enumName) && (siblingDecls[i].kind & 68147712 /* SomeValue */)) {
augmentedDecl = siblingDecls[i];
break;
}
}
if (augmentedDecl) {
variableSymbol = augmentedDecl.getSymbol();
if (variableSymbol) {
if (variableSymbol.isContainer()) {
variableSymbol = variableSymbol.getInstanceSymbol();
} else if (variableSymbol && variableSymbol.isType()) {
variableSymbol = variableSymbol.getConstructorMethod();
}
}
}
}
if (variableSymbol) {
enumInstanceSymbol = variableSymbol;
moduleInstanceTypeSymbol = variableSymbol.type;
} else {
enumInstanceSymbol = new TypeScript.PullSymbol(enumName, 512 /* Variable */);
}
enumContainerSymbol.setInstanceSymbol(enumInstanceSymbol);
if (!moduleInstanceTypeSymbol) {
moduleInstanceTypeSymbol = new TypeScript.PullTypeSymbol("", 8388608 /* ObjectType */);
enumInstanceSymbol.type = moduleInstanceTypeSymbol;
}
moduleInstanceTypeSymbol.addDeclaration(enumContainerDecl);
if (!moduleInstanceTypeSymbol.getAssociatedContainerType()) {
moduleInstanceTypeSymbol.setAssociatedContainerType(enumContainerSymbol);
}
}
if (createdNewSymbol && parent) {
if (enumContainerDecl.flags & 1 /* Exported */) {
parent.addEnclosedMemberType(enumContainerSymbol);
} else {
parent.addEnclosedNonMemberType(enumContainerSymbol);
}
}
if (createdNewSymbol) {
this.bindEnumIndexerDeclsToPullSymbols(enumContainerSymbol);
}
var valueDecl = enumContainerDecl.getValueDecl();
if (valueDecl) {
valueDecl.ensureSymbolIsBound();
}
};
PullSymbolBinder.prototype.bindEnumIndexerDeclsToPullSymbols = function (enumContainerSymbol) {
var enumContainerInstanceTypeSymbol = enumContainerSymbol.getInstanceSymbol().type;
var syntheticIndexerParameterSymbol = new TypeScript.PullSymbol("x", 2048 /* Parameter */);
syntheticIndexerParameterSymbol.type = this.semanticInfoChain.numberTypeSymbol;
syntheticIndexerParameterSymbol.setResolved();
syntheticIndexerParameterSymbol.setIsSynthesized();
var syntheticIndexerSignatureSymbol = new TypeScript.PullSignatureSymbol(4194304 /* IndexSignature */);
syntheticIndexerSignatureSymbol.addParameter(syntheticIndexerParameterSymbol);
syntheticIndexerSignatureSymbol.returnType = this.semanticInfoChain.stringTypeSymbol;
syntheticIndexerSignatureSymbol.setResolved();
syntheticIndexerSignatureSymbol.setIsSynthesized();
enumContainerInstanceTypeSymbol.addIndexSignature(syntheticIndexerSignatureSymbol);
};
PullSymbolBinder.prototype.findExistingVariableSymbolForModuleValueDecl = function (decl) {
var isExported = TypeScript.hasFlag(decl.flags, 1 /* Exported */);
var modName = decl.name;
var parentInstanceSymbol = this.getParent(decl, true);
var parentDecl = decl.getParentDecl();
var variableSymbol = null;
if (parentInstanceSymbol) {
if (isExported) {
variableSymbol = parentInstanceSymbol.findMember(modName, false);
if (!variableSymbol) {
variableSymbol = parentInstanceSymbol.findContainedNonMember(modName);
}
} else {
variableSymbol = parentInstanceSymbol.findContainedNonMember(modName);
if (!variableSymbol) {
variableSymbol = parentInstanceSymbol.findMember(modName, false);
}
}
if (variableSymbol) {
var declarations = variableSymbol.getDeclarations();
if (declarations.length) {
var variableSymbolParentDecl = declarations[0].getParentDecl();
var isExportedOrHasTheSameParent = isExported || (parentDecl === variableSymbolParentDecl);
var canReuseVariableSymbol = isExportedOrHasTheSameParent && this.checkThatExportsMatch(decl, variableSymbol, false);
if (!canReuseVariableSymbol) {
variableSymbol = null;
}
}
}
} else if (!isExported) {
var siblingDecls = parentDecl.getChildDecls();
for (var i = 0; i < siblingDecls.length; i++) {
var sibling = siblingDecls[i];
var siblingIsSomeValue = TypeScript.hasFlag(sibling.kind, 68147712 /* SomeValue */);
var siblingIsFunctionOrHasImplictVarFlag = TypeScript.hasFlag(sibling.kind, 1032192 /* SomeFunction */) || TypeScript.hasFlag(sibling.flags, 118784 /* ImplicitVariable */);
var isSiblingAnAugmentableVariable = sibling !== decl && sibling !== decl.getValueDecl() && sibling.name === modName && siblingIsSomeValue && siblingIsFunctionOrHasImplictVarFlag;
if (isSiblingAnAugmentableVariable) {
if (sibling.hasSymbol()) {
variableSymbol = sibling.getSymbol();
if (variableSymbol.isContainer()) {
variableSymbol = variableSymbol.getInstanceSymbol();
} else if (variableSymbol && variableSymbol.isType()) {
variableSymbol = variableSymbol.getConstructorMethod();
}
break;
}
}
}
}
return variableSymbol;
};
PullSymbolBinder.prototype.bindModuleDeclarationToPullSymbol = function (moduleContainerDecl) {
var modName = moduleContainerDecl.name;
var moduleContainerTypeSymbol = null;
var moduleKind = moduleContainerDecl.kind;
var parent = this.getParent(moduleContainerDecl);
var parentInstanceSymbol = this.getParent(moduleContainerDecl, true);
var parentDecl = moduleContainerDecl.getParentDecl();
var moduleNameAST = this.semanticInfoChain.getASTForDecl(moduleContainerDecl);
var moduleDeclAST = TypeScript.ASTHelpers.getEnclosingModuleDeclaration(moduleNameAST);
if (!moduleDeclAST) {
TypeScript.Debug.assert(moduleKind === 32 /* DynamicModule */);
TypeScript.Debug.assert(moduleNameAST.kind() === 120 /* SourceUnit */);
moduleDeclAST = moduleNameAST;
}
var isExported = TypeScript.hasFlag(moduleContainerDecl.flags, 1 /* Exported */);
var searchKind = 164 /* SomeContainer */;
var isInitializedModule = (moduleContainerDecl.flags & 102400 /* SomeInitializedModule */) !== 0;
if (parent && moduleKind === 32 /* DynamicModule */) {
this.semanticInfoChain.addDiagnosticFromAST(moduleNameAST, TypeScript.DiagnosticCode.Ambient_external_module_declaration_must_be_defined_in_global_context, null);
}
var createdNewSymbol = false;
moduleContainerTypeSymbol = this.getExistingSymbol(moduleContainerDecl, searchKind, parent);
if (moduleContainerTypeSymbol) {
if (moduleContainerTypeSymbol.kind !== moduleKind) {
if (isInitializedModule) {
this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(moduleNameAST, moduleContainerDecl.getDisplayName(), moduleContainerTypeSymbol.getDeclarations()[0].ast());
}
moduleContainerTypeSymbol = null;
} else if (moduleKind === 32 /* DynamicModule */) {
this.semanticInfoChain.addDiagnosticFromAST(moduleNameAST, TypeScript.DiagnosticCode.Ambient_external_module_declaration_cannot_be_reopened);
} else if (!this.checkThatExportsMatch(moduleContainerDecl, moduleContainerTypeSymbol)) {
moduleContainerTypeSymbol = null;
}
}
if (!moduleContainerTypeSymbol) {
moduleContainerTypeSymbol = new TypeScript.PullContainerSymbol(modName, moduleKind);
createdNewSymbol = true;
if (!parent) {
this.semanticInfoChain.cacheGlobalSymbol(moduleContainerTypeSymbol, searchKind);
}
}
moduleContainerTypeSymbol.addDeclaration(moduleContainerDecl);
moduleContainerDecl.setSymbol(moduleContainerTypeSymbol);
this.semanticInfoChain.setSymbolForAST(moduleNameAST, moduleContainerTypeSymbol);
this.semanticInfoChain.setSymbolForAST(moduleDeclAST, moduleContainerTypeSymbol);
var currentModuleValueDecl = moduleContainerDecl.getValueDecl();
var moduleDeclarations = moduleContainerTypeSymbol.getDeclarations();
if (createdNewSymbol) {
if (parent) {
if (moduleContainerDecl.flags & 1 /* Exported */) {
parent.addEnclosedMemberContainer(moduleContainerTypeSymbol);
} else {
parent.addEnclosedNonMemberContainer(moduleContainerTypeSymbol);
}
}
}
if (currentModuleValueDecl) {
currentModuleValueDecl.ensureSymbolIsBound();
var instanceSymbol = null;
var instanceTypeSymbol = null;
if (currentModuleValueDecl.hasSymbol()) {
instanceSymbol = currentModuleValueDecl.getSymbol();
} else {
instanceSymbol = new TypeScript.PullSymbol(modName, 512 /* Variable */);
currentModuleValueDecl.setSymbol(instanceSymbol);
if (!instanceSymbol.hasDeclaration(currentModuleValueDecl)) {
instanceSymbol.addDeclaration(currentModuleValueDecl);
}
}
if (!instanceSymbol.type) {
instanceSymbol.type = new TypeScript.PullTypeSymbol("", 8388608 /* ObjectType */);
}
moduleContainerTypeSymbol.setInstanceSymbol(instanceSymbol);
if (!instanceSymbol.type.getAssociatedContainerType()) {
instanceSymbol.type.setAssociatedContainerType(moduleContainerTypeSymbol);
}
}
};
PullSymbolBinder.prototype.bindImportDeclaration = function (importDeclaration) {
var declFlags = importDeclaration.flags;
var declKind = importDeclaration.kind;
var importDeclAST = this.semanticInfoChain.getASTForDecl(importDeclaration);
var isExported = false;
var importSymbol = null;
var declName = importDeclaration.name;
var parentHadSymbol = false;
var parent = this.getParent(importDeclaration);
importSymbol = this.getExistingSymbol(importDeclaration, 164 /* SomeContainer */, parent);
if (importSymbol) {
parentHadSymbol = true;
}
if (importSymbol) {
this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(importDeclAST, importDeclaration.getDisplayName(), importSymbol.getDeclarations()[0].ast());
importSymbol = null;
}
if (!importSymbol) {
importSymbol = new TypeScript.PullTypeAliasSymbol(declName);
if (!parent) {
this.semanticInfoChain.cacheGlobalSymbol(importSymbol, 164 /* SomeContainer */);
}
}
importSymbol.addDeclaration(importDeclaration);
importDeclaration.setSymbol(importSymbol);
this.semanticInfoChain.setSymbolForAST(importDeclAST, importSymbol);
if (parent && !parentHadSymbol) {
if (declFlags & 1 /* Exported */) {
parent.addEnclosedMemberContainer(importSymbol);
} else {
parent.addEnclosedNonMemberContainer(importSymbol);
}
}
};
PullSymbolBinder.prototype.ensurePriorDeclarationsAreBound = function (container, currentDecl) {
if (!container) {
return;
}
var parentDecls = container.getDeclarations();
for (var i = 0; i < parentDecls.length; ++i) {
var parentDecl = parentDecls[i];
var childDecls = parentDecl.getChildDecls();
for (var j = 0; j < childDecls.length; ++j) {
var childDecl = childDecls[j];
if (childDecl === currentDecl) {
return;
}
if (childDecl.name === currentDecl.name) {
childDecl.ensureSymbolIsBound();
}
}
}
};
PullSymbolBinder.prototype.bindClassDeclarationToPullSymbol = function (classDecl) {
var className = classDecl.name;
var classSymbol = null;
var constructorSymbol = null;
var constructorTypeSymbol = null;
var classAST = this.semanticInfoChain.getASTForDecl(classDecl);
var parent = this.getParent(classDecl);
this.ensurePriorDeclarationsAreBound(parent, classDecl);
var parentDecl = classDecl.getParentDecl();
var isExported = classDecl.flags & 1 /* Exported */;
var isGeneric = false;
classSymbol = this.getExistingSymbol(classDecl, 58728795 /* SomeType */, parent);
if (classSymbol && classSymbol.kind === 16 /* Interface */) {
this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(classAST.identifier, classDecl.getDisplayName(), classSymbol.getDeclarations()[0].ast());
classSymbol = null;
}
classSymbol = new TypeScript.PullTypeSymbol(className, 8 /* Class */);
if (!parent) {
this.semanticInfoChain.cacheGlobalSymbol(classSymbol, 8 /* Class */);
}
classSymbol.addDeclaration(classDecl);
classDecl.setSymbol(classSymbol);
this.semanticInfoChain.setSymbolForAST(classAST.identifier, classSymbol);
this.semanticInfoChain.setSymbolForAST(classAST, classSymbol);
if (parent) {
if (classDecl.flags & 1 /* Exported */) {
parent.addEnclosedMemberType(classSymbol);
} else {
parent.addEnclosedNonMemberType(classSymbol);
}
}
var typeParameterDecls = classDecl.getTypeParameters();
for (var i = 0; i < typeParameterDecls.length; i++) {
var typeParameterSymbol = classSymbol.findTypeParameter(typeParameterDecls[i].name);
if (typeParameterSymbol) {
var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameterSymbol.getDeclarations()[0]);
this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameterSymbol.getName()]);
}
typeParameterSymbol = new TypeScript.PullTypeParameterSymbol(typeParameterDecls[i].name);
classSymbol.addTypeParameter(typeParameterSymbol);
typeParameterSymbol.addDeclaration(typeParameterDecls[i]);
typeParameterDecls[i].setSymbol(typeParameterSymbol);
}
constructorSymbol = classSymbol.getConstructorMethod();
constructorTypeSymbol = constructorSymbol ? constructorSymbol.type : null;
if (!constructorSymbol) {
var siblingValueDecls = null;
if (parentDecl) {
siblingValueDecls = parentDecl.searchChildDecls(className, 68147712 /* SomeValue */);
if (siblingValueDecls && siblingValueDecls[0] && siblingValueDecls[0].hasSymbol()) {
constructorSymbol = siblingValueDecls[0].getSymbol();
}
}
if (constructorSymbol) {
constructorTypeSymbol = constructorSymbol.type;
} else {
constructorSymbol = new TypeScript.PullSymbol(className, 32768 /* ConstructorMethod */);
constructorTypeSymbol = new TypeScript.PullTypeSymbol("", 33554432 /* ConstructorType */);
constructorSymbol.setIsSynthesized();
constructorSymbol.type = constructorTypeSymbol;
}
classSymbol.setConstructorMethod(constructorSymbol);
classSymbol.setHasDefaultConstructor();
}
if (constructorSymbol.getIsSynthesized()) {
constructorSymbol.addDeclaration(classDecl.getValueDecl());
constructorTypeSymbol.addDeclaration(classDecl);
} else {
classSymbol.setHasDefaultConstructor(false);
}
constructorTypeSymbol.setAssociatedContainerType(classSymbol);
var valueDecl = classDecl.getValueDecl();
if (valueDecl) {
valueDecl.ensureSymbolIsBound();
}
this.bindStaticPrototypePropertyOfClass(classAST, classSymbol, constructorTypeSymbol);
};
PullSymbolBinder.prototype.bindInterfaceDeclarationToPullSymbol = function (interfaceDecl) {
var interfaceName = interfaceDecl.name;
var interfaceSymbol = null;
var interfaceAST = this.semanticInfoChain.getASTForDecl(interfaceDecl);
var createdNewSymbol = false;
var parent = this.getParent(interfaceDecl);
var acceptableSharedKind = 16 /* Interface */;
interfaceSymbol = this.getExistingSymbol(interfaceDecl, 58728795 /* SomeType */, parent);
if (interfaceSymbol) {
if (!(interfaceSymbol.kind & acceptableSharedKind)) {
this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(interfaceAST.identifier, interfaceDecl.getDisplayName(), interfaceSymbol.getDeclarations()[0].ast());
interfaceSymbol = null;
} else if (!this.checkThatExportsMatch(interfaceDecl, interfaceSymbol)) {
interfaceSymbol = null;
}
}
if (!interfaceSymbol) {
interfaceSymbol = new TypeScript.PullTypeSymbol(interfaceName, 16 /* Interface */);
createdNewSymbol = true;
if (!parent) {
this.semanticInfoChain.cacheGlobalSymbol(interfaceSymbol, acceptableSharedKind);
}
}
interfaceSymbol.addDeclaration(interfaceDecl);
interfaceDecl.setSymbol(interfaceSymbol);
if (createdNewSymbol) {
if (parent) {
if (interfaceDecl.flags & 1 /* Exported */) {
parent.addEnclosedMemberType(interfaceSymbol);
} else {
parent.addEnclosedNonMemberType(interfaceSymbol);
}
}
}
var typeParameters = interfaceDecl.getTypeParameters();
var typeParameter;
var typeParameterDecls = null;
for (var i = 0; i < typeParameters.length; i++) {
typeParameter = interfaceSymbol.findTypeParameter(typeParameters[i].name);
if (!typeParameter) {
typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name);
interfaceSymbol.addTypeParameter(typeParameter);
} else {
typeParameterDecls = typeParameter.getDeclarations();
for (var j = 0; j < typeParameterDecls.length; j++) {
var typeParameterDeclParent = typeParameterDecls[j].getParentDecl();
if (typeParameterDeclParent && typeParameterDeclParent === interfaceDecl) {
var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameterDecls[0]);
this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.getName()]);
break;
}
}
}
typeParameter.addDeclaration(typeParameters[i]);
typeParameters[i].setSymbol(typeParameter);
}
};
PullSymbolBinder.prototype.bindObjectTypeDeclarationToPullSymbol = function (objectDecl) {
var objectSymbolAST = this.semanticInfoChain.getASTForDecl(objectDecl);
var objectSymbol = new TypeScript.PullTypeSymbol("", 8388608 /* ObjectType */);
objectSymbol.addDeclaration(objectDecl);
objectDecl.setSymbol(objectSymbol);
this.semanticInfoChain.setSymbolForAST(objectSymbolAST, objectSymbol);
var childDecls = objectDecl.getChildDecls();
for (var i = 0; i < childDecls.length; i++) {
this.bindDeclToPullSymbol(childDecls[i]);
}
};
PullSymbolBinder.prototype.bindConstructorTypeDeclarationToPullSymbol = function (constructorTypeDeclaration) {
var declKind = constructorTypeDeclaration.kind;
var declFlags = constructorTypeDeclaration.flags;
var constructorTypeAST = this.semanticInfoChain.getASTForDecl(constructorTypeDeclaration);
var constructorTypeSymbol = new TypeScript.PullTypeSymbol("", 33554432 /* ConstructorType */);
constructorTypeDeclaration.setSymbol(constructorTypeSymbol);
constructorTypeSymbol.addDeclaration(constructorTypeDeclaration);
this.semanticInfoChain.setSymbolForAST(constructorTypeAST, constructorTypeSymbol);
var signature = new TypeScript.PullSignatureSymbol(2097152 /* ConstructSignature */);
var funcDecl = this.semanticInfoChain.getASTForDecl(constructorTypeDeclaration);
if (TypeScript.lastParameterIsRest(funcDecl.parameterList)) {
signature.hasVarArgs = true;
}
signature.addDeclaration(constructorTypeDeclaration);
constructorTypeDeclaration.setSignatureSymbol(signature);
this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.parameterList), constructorTypeSymbol, signature);
var typeParameters = constructorTypeDeclaration.getTypeParameters();
var typeParameter;
for (var i = 0; i < typeParameters.length; i++) {
typeParameter = constructorTypeSymbol.findTypeParameter(typeParameters[i].name);
if (!typeParameter) {
typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name);
signature.addTypeParameter(typeParameter);
} else {
var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]);
this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.name]);
}
typeParameter.addDeclaration(typeParameters[i]);
typeParameters[i].setSymbol(typeParameter);
}
constructorTypeSymbol.appendConstructSignature(signature);
};
PullSymbolBinder.prototype.bindVariableDeclarationToPullSymbol = function (variableDeclaration) {
var declFlags = variableDeclaration.flags;
var declKind = variableDeclaration.kind;
var varDeclAST = this.semanticInfoChain.getASTForDecl(variableDeclaration);
var nameAST = varDeclAST.kind() === 131 /* ClassDeclaration */ ? varDeclAST.identifier : varDeclAST.kind() === 225 /* VariableDeclarator */ ? varDeclAST.propertyName : varDeclAST.kind() === 132 /* EnumDeclaration */ ? varDeclAST.identifier : varDeclAST;
var isExported = (declFlags & 1 /* Exported */) !== 0;
var variableSymbol = null;
var declName = variableDeclaration.name;
var parentHadSymbol = false;
var parent = this.getParent(variableDeclaration, true);
var parentDecl = variableDeclaration.getParentDecl();
var isImplicit = (declFlags & 118784 /* ImplicitVariable */) !== 0;
var isModuleValue = (declFlags & (32768 /* InitializedModule */)) !== 0;
var isEnumValue = (declFlags & 4096 /* Enum */) !== 0;
var isClassConstructorVariable = (declFlags & 16384 /* ClassConstructorVariable */) !== 0;
variableSymbol = this.getExistingSymbol(variableDeclaration, 68147712 /* SomeValue */, parent);
if (!variableSymbol && isModuleValue) {
variableSymbol = this.findExistingVariableSymbolForModuleValueDecl(variableDeclaration.getContainerDecl());
}
if (variableSymbol && !variableSymbol.isType()) {
parentHadSymbol = true;
}
var decl;
var decls;
var ast;
var members;
if (variableSymbol) {
var prevKind = variableSymbol.kind;
var prevIsEnum = variableSymbol.anyDeclHasFlag(4096 /* Enum */);
var prevIsClassConstructorVariable = variableSymbol.anyDeclHasFlag(16384 /* ClassConstructorVariable */);
var prevIsModuleValue = variableSymbol.allDeclsHaveFlag(32768 /* InitializedModule */);
var prevIsImplicit = variableSymbol.anyDeclHasFlag(118784 /* ImplicitVariable */);
var prevIsFunction = TypeScript.ArrayUtilities.any(variableSymbol.getDeclarations(), function (decl) {
return decl.kind === 16384 /* Function */;
});
var prevIsAmbient = variableSymbol.allDeclsHaveFlag(8 /* Ambient */);
var isAmbientOrPrevIsAmbient = prevIsAmbient || (variableDeclaration.flags & 8 /* Ambient */) !== 0;
var prevDecl = variableSymbol.getDeclarations()[0];
var prevParentDecl = prevDecl.getParentDecl();
var bothAreGlobal = parentDecl && (parentDecl.kind === 1 /* Script */) && (prevParentDecl.kind === 1 /* Script */);
var shareParent = bothAreGlobal || prevDecl.getParentDecl() === variableDeclaration.getParentDecl();
var prevIsParam = shareParent && prevKind === 2048 /* Parameter */ && declKind == 512 /* Variable */;
var acceptableRedeclaration = prevIsParam || (isImplicit && ((!isEnumValue && !isClassConstructorVariable && prevIsFunction) || ((isModuleValue || isEnumValue) && (prevIsModuleValue || prevIsEnum)) || (isClassConstructorVariable && prevIsModuleValue && isAmbientOrPrevIsAmbient) || (isModuleValue && prevIsClassConstructorVariable)));
if (acceptableRedeclaration && (prevIsClassConstructorVariable || prevIsFunction) && !isAmbientOrPrevIsAmbient) {
if (prevDecl.fileName() !== variableDeclaration.fileName()) {
this.semanticInfoChain.addDiagnostic(TypeScript.PullHelpers.diagnosticFromDecl(variableDeclaration, TypeScript.DiagnosticCode.Module_0_cannot_merge_with_previous_declaration_of_1_in_a_different_file_2, [declName, declName, prevDecl.fileName()]));
variableSymbol.type = this.semanticInfoChain.getResolver().getNewErrorTypeSymbol(declName);
}
}
if (!acceptableRedeclaration || prevIsParam) {
if (!prevIsParam && (isImplicit || prevIsImplicit || TypeScript.hasFlag(prevKind, 1032192 /* SomeFunction */)) || !shareParent) {
this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(nameAST, variableDeclaration.getDisplayName(), variableSymbol.getDeclarations()[0].ast());
variableSymbol.type = this.semanticInfoChain.getResolver().getNewErrorTypeSymbol(declName);
} else {
this.checkThatExportsMatch(variableDeclaration, variableSymbol);
variableSymbol = null;
parentHadSymbol = false;
}
}
if (variableSymbol && !(variableSymbol.type && variableSymbol.type.isError()) && !this.checkThatExportsMatch(variableDeclaration, variableSymbol, !(isModuleValue && prevIsModuleValue))) {
variableSymbol.type = this.semanticInfoChain.getResolver().getNewErrorTypeSymbol(declName);
}
}
if ((declFlags & 118784 /* ImplicitVariable */) === 0) {
if (!variableSymbol) {
variableSymbol = new TypeScript.PullSymbol(declName, declKind);
if (!parent && parentDecl.kind === 1 /* Script */) {
this.semanticInfoChain.cacheGlobalSymbol(variableSymbol, declKind);
}
}
variableSymbol.addDeclaration(variableDeclaration);
variableDeclaration.setSymbol(variableSymbol);
this.semanticInfoChain.setSymbolForAST(nameAST, variableSymbol);
this.semanticInfoChain.setSymbolForAST(varDeclAST, variableSymbol);
} else if (!parentHadSymbol) {
if (isClassConstructorVariable) {
var classTypeSymbol = variableSymbol;
if (parent) {
members = parent.getMembers();
for (var i = 0; i < members.length; i++) {
if ((members[i].name === declName) && (members[i].kind === 8 /* Class */)) {
classTypeSymbol = members[i];
break;
}
}
}
if (!classTypeSymbol) {
var containerDecl = variableDeclaration.getContainerDecl();
classTypeSymbol = containerDecl.getSymbol();
if (!classTypeSymbol) {
classTypeSymbol = this.semanticInfoChain.findTopLevelSymbol(declName, 58728795 /* SomeType */, variableDeclaration);
}
}
if (classTypeSymbol && (classTypeSymbol.kind !== 8 /* Class */)) {
classTypeSymbol = null;
}
if (classTypeSymbol && classTypeSymbol.isClass()) {
variableSymbol = classTypeSymbol.getConstructorMethod();
variableDeclaration.setSymbol(variableSymbol);
decls = classTypeSymbol.getDeclarations();
if (decls.length) {
decl = decls[decls.length - 1];
ast = this.semanticInfoChain.getASTForDecl(decl);
}
} else {
if (!variableSymbol) {
variableSymbol = new TypeScript.PullSymbol(declName, declKind);
}
variableSymbol.addDeclaration(variableDeclaration);
variableDeclaration.setSymbol(variableSymbol);
variableSymbol.type = this.semanticInfoChain.anyTypeSymbol;
}
} else if (declFlags & 102400 /* SomeInitializedModule */) {
var moduleContainerTypeSymbol = null;
var moduleParent = this.getParent(variableDeclaration);
if (moduleParent) {
members = moduleParent.getMembers();
for (var i = 0; i < members.length; i++) {
if ((members[i].name === declName) && (members[i].isContainer())) {
moduleContainerTypeSymbol = members[i];
break;
}
}
}
if (!moduleContainerTypeSymbol) {
var containerDecl = variableDeclaration.getContainerDecl();
moduleContainerTypeSymbol = containerDecl.getSymbol();
if (!moduleContainerTypeSymbol) {
moduleContainerTypeSymbol = this.semanticInfoChain.findTopLevelSymbol(declName, 164 /* SomeContainer */, variableDeclaration);
if (!moduleContainerTypeSymbol) {
moduleContainerTypeSymbol = this.semanticInfoChain.findTopLevelSymbol(declName, 64 /* Enum */, variableDeclaration);
}
}
}
if (moduleContainerTypeSymbol && (!moduleContainerTypeSymbol.isContainer())) {
moduleContainerTypeSymbol = null;
}
if (moduleContainerTypeSymbol) {
variableSymbol = moduleContainerTypeSymbol.getInstanceSymbol();
if (!variableSymbol) {
variableSymbol = new TypeScript.PullSymbol(declName, declKind);
variableSymbol.type = new TypeScript.PullTypeSymbol("", 8388608 /* ObjectType */);
}
if (!variableSymbol.hasDeclaration(variableDeclaration)) {
variableSymbol.addDeclaration(variableDeclaration);
}
variableDeclaration.setSymbol(variableSymbol);
} else {
TypeScript.Debug.assert(false, "Attempted to bind invalid implicit variable symbol");
}
}
} else {
if (!variableSymbol.hasDeclaration(variableDeclaration)) {
variableSymbol.addDeclaration(variableDeclaration);
}
variableDeclaration.setSymbol(variableSymbol);
}
var containerDecl = variableDeclaration.getContainerDecl();
if (variableSymbol && variableSymbol.type && containerDecl && !variableSymbol.type.hasDeclaration(containerDecl)) {
variableSymbol.type.addDeclaration(containerDecl);
}
if (parent && !parentHadSymbol) {
if (declFlags & 1 /* Exported */) {
parent.addMember(variableSymbol);
} else {
parent.addEnclosedNonMember(variableSymbol);
}
}
};
PullSymbolBinder.prototype.bindCatchVariableToPullSymbol = function (variableDeclaration) {
var declFlags = variableDeclaration.flags;
var declKind = variableDeclaration.kind;
var identifier = this.semanticInfoChain.getASTForDecl(variableDeclaration);
var declName = variableDeclaration.name;
var variableSymbol = new TypeScript.PullSymbol(declName, declKind);
variableSymbol.addDeclaration(variableDeclaration);
variableDeclaration.setSymbol(variableSymbol);
variableSymbol.type = this.semanticInfoChain.anyTypeSymbol;
this.semanticInfoChain.setSymbolForAST(identifier, variableSymbol);
};
PullSymbolBinder.prototype.bindEnumMemberDeclarationToPullSymbol = function (propertyDeclaration) {
var declFlags = propertyDeclaration.flags;
var declKind = propertyDeclaration.kind;
var propDeclAST = this.semanticInfoChain.getASTForDecl(propertyDeclaration);
var declName = propertyDeclaration.name;
var parentHadSymbol = false;
var parent = this.getParent(propertyDeclaration, true);
var propertySymbol = parent.findMember(declName, false);
if (propertySymbol) {
this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(propDeclAST.propertyName, propertyDeclaration.getDisplayName(), propertySymbol.getDeclarations()[0].ast());
}
if (propertySymbol) {
parentHadSymbol = true;
}
if (!parentHadSymbol) {
propertySymbol = new TypeScript.PullSymbol(declName, declKind);
}
propertySymbol.addDeclaration(propertyDeclaration);
propertyDeclaration.setSymbol(propertySymbol);
this.semanticInfoChain.setSymbolForAST(propDeclAST.propertyName, propertySymbol);
this.semanticInfoChain.setSymbolForAST(propDeclAST, propertySymbol);
if (parent && !parentHadSymbol) {
parent.addMember(propertySymbol);
}
};
PullSymbolBinder.prototype.bindPropertyDeclarationToPullSymbol = function (propertyDeclaration) {
var declFlags = propertyDeclaration.flags;
var declKind = propertyDeclaration.kind;
var ast = this.semanticInfoChain.getASTForDecl(propertyDeclaration);
var astName = ast.kind() === 136 /* MemberVariableDeclaration */ ? ast.variableDeclarator.propertyName : ast.kind() === 141 /* PropertySignature */ ? ast.propertyName : ast.kind() === 242 /* Parameter */ ? ast.identifier : ast.propertyName;
var isStatic = false;
var isOptional = false;
var propertySymbol = null;
if (TypeScript.hasFlag(declFlags, 16 /* Static */)) {
isStatic = true;
}
if (TypeScript.hasFlag(declFlags, 128 /* Optional */)) {
isOptional = true;
}
var declName = propertyDeclaration.name;
var parentHadSymbol = false;
var parent = this.getParent(propertyDeclaration, true);
if (parent.isClass() && isStatic) {
parent = parent.getConstructorMethod().type;
}
propertySymbol = parent.findMember(declName, false);
if (propertySymbol) {
this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(astName, propertyDeclaration.getDisplayName(), propertySymbol.getDeclarations()[0].ast());
}
if (propertySymbol) {
parentHadSymbol = true;
}
var classTypeSymbol;
if (!parentHadSymbol) {
propertySymbol = new TypeScript.PullSymbol(declName, declKind);
}
propertySymbol.addDeclaration(propertyDeclaration);
propertyDeclaration.setSymbol(propertySymbol);
this.semanticInfoChain.setSymbolForAST(astName, propertySymbol);
this.semanticInfoChain.setSymbolForAST(ast, propertySymbol);
if (isOptional) {
propertySymbol.isOptional = true;
}
if (parent && !parentHadSymbol) {
parent.addMember(propertySymbol);
}
};
PullSymbolBinder.prototype.bindParameterSymbols = function (functionDeclaration, parameterList, funcType, signatureSymbol) {
var parameters = [];
var params = TypeScript.createIntrinsicsObject();
var funcDecl = this.semanticInfoChain.getDeclForAST(functionDeclaration);
if (parameterList) {
for (var i = 0, n = parameterList.length; i < n; i++) {
var argDecl = parameterList.astAt(i);
var id = parameterList.identifierAt(i);
var decl = this.semanticInfoChain.getDeclForAST(argDecl);
var isProperty = TypeScript.hasFlag(decl.flags, 8388608 /* PropertyParameter */);
var parameterSymbol = new TypeScript.PullSymbol(id.valueText(), 2048 /* Parameter */);
if ((i === (n - 1)) && parameterList.lastParameterIsRest()) {
parameterSymbol.isVarArg = true;
}
if (params[id.valueText()]) {
this.semanticInfoChain.addDiagnosticFromAST(argDecl, TypeScript.DiagnosticCode.Duplicate_identifier_0, [id.text()]);
} else {
params[id.valueText()] = true;
}
if (decl) {
var isParameterOptional = false;
if (isProperty) {
decl.ensureSymbolIsBound();
var valDecl = decl.getValueDecl();
if (valDecl) {
isParameterOptional = TypeScript.hasFlag(valDecl.flags, 128 /* Optional */);
valDecl.setSymbol(parameterSymbol);
parameterSymbol.addDeclaration(valDecl);
}
} else {
isParameterOptional = TypeScript.hasFlag(decl.flags, 128 /* Optional */);
parameterSymbol.addDeclaration(decl);
decl.setSymbol(parameterSymbol);
}
parameterSymbol.isOptional = isParameterOptional;
}
signatureSymbol.addParameter(parameterSymbol, parameterSymbol.isOptional);
if (signatureSymbol.isDefinition()) {
funcType.addEnclosedNonMember(parameterSymbol);
}
}
}
};
PullSymbolBinder.prototype.bindFunctionDeclarationToPullSymbol = function (functionDeclaration) {
var declKind = functionDeclaration.kind;
var declFlags = functionDeclaration.flags;
var funcDeclAST = this.semanticInfoChain.getASTForDecl(functionDeclaration);
var isExported = (declFlags & 1 /* Exported */) !== 0;
var funcName = functionDeclaration.name;
var isSignature = (declFlags & 2048 /* Signature */) !== 0;
var parent = this.getParent(functionDeclaration, true);
var parentDecl = functionDeclaration.getParentDecl();
var parentHadSymbol = false;
var functionSymbol = null;
var functionTypeSymbol = null;
functionSymbol = this.getExistingSymbol(functionDeclaration, 68147712 /* SomeValue */, parent);
if (functionSymbol) {
var acceptableRedeclaration;
if (functionSymbol.kind === 16384 /* Function */) {
acceptableRedeclaration = isSignature || functionSymbol.allDeclsHaveFlag(2048 /* Signature */);
} else {
var isCurrentDeclAmbient = TypeScript.hasFlag(functionDeclaration.flags, 8 /* Ambient */);
acceptableRedeclaration = TypeScript.ArrayUtilities.all(functionSymbol.getDeclarations(), function (decl) {
var isInitializedModuleOrAmbientDecl = TypeScript.hasFlag(decl.flags, 32768 /* InitializedModule */) && (isCurrentDeclAmbient || TypeScript.hasFlag(decl.flags, 8 /* Ambient */));
var isSignature = TypeScript.hasFlag(decl.flags, 2048 /* Signature */);
return isInitializedModuleOrAmbientDecl || isSignature;
});
}
if (!acceptableRedeclaration) {
this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(funcDeclAST.identifier, functionDeclaration.getDisplayName(), functionSymbol.getDeclarations()[0].ast());
functionSymbol.type = this.semanticInfoChain.getResolver().getNewErrorTypeSymbol(funcName);
}
}
if (functionSymbol) {
functionTypeSymbol = functionSymbol.type;
parentHadSymbol = true;
}
if (!functionSymbol) {
functionSymbol = new TypeScript.PullSymbol(funcName, 16384 /* Function */);
}
if (!functionTypeSymbol) {
functionTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */);
functionSymbol.type = functionTypeSymbol;
functionTypeSymbol.setFunctionSymbol(functionSymbol);
}
functionDeclaration.setSymbol(functionSymbol);
functionSymbol.addDeclaration(functionDeclaration);
functionTypeSymbol.addDeclaration(functionDeclaration);
this.semanticInfoChain.setSymbolForAST(funcDeclAST.identifier, functionSymbol);
this.semanticInfoChain.setSymbolForAST(funcDeclAST, functionSymbol);
if (parent && !parentHadSymbol) {
if (isExported) {
parent.addMember(functionSymbol);
} else {
parent.addEnclosedNonMember(functionSymbol);
}
}
var signature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */, !isSignature);
signature.addDeclaration(functionDeclaration);
functionDeclaration.setSignatureSymbol(signature);
if (TypeScript.lastParameterIsRest(funcDeclAST.callSignature.parameterList)) {
signature.hasVarArgs = true;
}
var funcDecl = this.semanticInfoChain.getASTForDecl(functionDeclaration);
this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList), functionTypeSymbol, signature);
var typeParameters = functionDeclaration.getTypeParameters();
var typeParameter;
for (var i = 0; i < typeParameters.length; i++) {
typeParameter = signature.findTypeParameter(typeParameters[i].name);
if (!typeParameter) {
typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name);
signature.addTypeParameter(typeParameter);
} else {
var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]);
this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.name]);
}
typeParameter.addDeclaration(typeParameters[i]);
typeParameters[i].setSymbol(typeParameter);
}
functionTypeSymbol.appendCallSignature(signature);
};
PullSymbolBinder.prototype.bindFunctionExpressionToPullSymbol = function (functionExpressionDeclaration) {
var declKind = functionExpressionDeclaration.kind;
var declFlags = functionExpressionDeclaration.flags;
var ast = this.semanticInfoChain.getASTForDecl(functionExpressionDeclaration);
var parameters = ast.kind() === 219 /* SimpleArrowFunctionExpression */ ? TypeScript.ASTHelpers.parametersFromIdentifier(ast.identifier) : TypeScript.ASTHelpers.parametersFromParameterList(TypeScript.ASTHelpers.getParameterList(ast));
var funcExpAST = ast;
var functionName = declKind === 131072 /* FunctionExpression */ ? functionExpressionDeclaration.getFunctionExpressionName() : functionExpressionDeclaration.name;
var functionSymbol = new TypeScript.PullSymbol(functionName, declKind);
var functionTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */);
functionTypeSymbol.setFunctionSymbol(functionSymbol);
functionSymbol.type = functionTypeSymbol;
functionExpressionDeclaration.setSymbol(functionSymbol);
functionSymbol.addDeclaration(functionExpressionDeclaration);
functionTypeSymbol.addDeclaration(functionExpressionDeclaration);
var name = funcExpAST.kind() === 222 /* FunctionExpression */ ? funcExpAST.identifier : funcExpAST.kind() === 241 /* FunctionPropertyAssignment */ ? funcExpAST.propertyName : null;
if (name) {
this.semanticInfoChain.setSymbolForAST(name, functionSymbol);
}
this.semanticInfoChain.setSymbolForAST(funcExpAST, functionSymbol);
var signature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */, true);
if (parameters.lastParameterIsRest()) {
signature.hasVarArgs = true;
}
var typeParameters = functionExpressionDeclaration.getTypeParameters();
var typeParameter;
for (var i = 0; i < typeParameters.length; i++) {
typeParameter = signature.findTypeParameter(typeParameters[i].name);
if (!typeParameter) {
typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name);
signature.addTypeParameter(typeParameter);
} else {
var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]);
this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.getName()]);
}
typeParameter.addDeclaration(typeParameters[i]);
typeParameters[i].setSymbol(typeParameter);
}
signature.addDeclaration(functionExpressionDeclaration);
functionExpressionDeclaration.setSignatureSymbol(signature);
this.bindParameterSymbols(funcExpAST, parameters, functionTypeSymbol, signature);
functionTypeSymbol.appendCallSignature(signature);
};
PullSymbolBinder.prototype.bindFunctionTypeDeclarationToPullSymbol = function (functionTypeDeclaration) {
var declKind = functionTypeDeclaration.kind;
var declFlags = functionTypeDeclaration.flags;
var funcTypeAST = this.semanticInfoChain.getASTForDecl(functionTypeDeclaration);
var functionTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */);
functionTypeDeclaration.setSymbol(functionTypeSymbol);
functionTypeSymbol.addDeclaration(functionTypeDeclaration);
this.semanticInfoChain.setSymbolForAST(funcTypeAST, functionTypeSymbol);
var isSignature = (declFlags & 2048 /* Signature */) !== 0;
var signature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */, !isSignature);
if (TypeScript.lastParameterIsRest(funcTypeAST.parameterList)) {
signature.hasVarArgs = true;
}
var typeParameters = functionTypeDeclaration.getTypeParameters();
var typeParameter;
for (var i = 0; i < typeParameters.length; i++) {
typeParameter = signature.findTypeParameter(typeParameters[i].name);
if (!typeParameter) {
typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name);
signature.addTypeParameter(typeParameter);
} else {
var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]);
this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.name]);
}
typeParameter.addDeclaration(typeParameters[i]);
typeParameters[i].setSymbol(typeParameter);
}
signature.addDeclaration(functionTypeDeclaration);
functionTypeDeclaration.setSignatureSymbol(signature);
this.bindParameterSymbols(funcTypeAST, TypeScript.ASTHelpers.parametersFromParameterList(funcTypeAST.parameterList), functionTypeSymbol, signature);
functionTypeSymbol.appendCallSignature(signature);
};
PullSymbolBinder.prototype.bindMethodDeclarationToPullSymbol = function (methodDeclaration) {
var declKind = methodDeclaration.kind;
var declFlags = methodDeclaration.flags;
var methodAST = this.semanticInfoChain.getASTForDecl(methodDeclaration);
var isPrivate = (declFlags & 2 /* Private */) !== 0;
var isStatic = (declFlags & 16 /* Static */) !== 0;
var isOptional = (declFlags & 128 /* Optional */) !== 0;
var methodName = methodDeclaration.name;
var isSignature = (declFlags & 2048 /* Signature */) !== 0;
var parent = this.getParent(methodDeclaration, true);
var parentHadSymbol = false;
var methodSymbol = null;
var methodTypeSymbol = null;
if (parent.isClass() && isStatic) {
parent = parent.getConstructorMethod().type;
}
methodSymbol = parent.findMember(methodName, false);
if (methodSymbol && (methodSymbol.kind !== 65536 /* Method */ || (!isSignature && !methodSymbol.allDeclsHaveFlag(2048 /* Signature */)))) {
this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(methodAST, methodDeclaration.getDisplayName(), methodSymbol.getDeclarations()[0].ast());
methodSymbol = null;
}
if (methodSymbol) {
methodTypeSymbol = methodSymbol.type;
parentHadSymbol = true;
}
if (!methodSymbol) {
methodSymbol = new TypeScript.PullSymbol(methodName, 65536 /* Method */);
}
if (!methodTypeSymbol) {
methodTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */);
methodSymbol.type = methodTypeSymbol;
methodTypeSymbol.setFunctionSymbol(methodSymbol);
}
methodDeclaration.setSymbol(methodSymbol);
methodSymbol.addDeclaration(methodDeclaration);
methodTypeSymbol.addDeclaration(methodDeclaration);
var nameAST = methodAST.kind() === 135 /* MemberFunctionDeclaration */ ? methodAST.propertyName : methodAST.propertyName;
TypeScript.Debug.assert(nameAST);
this.semanticInfoChain.setSymbolForAST(nameAST, methodSymbol);
this.semanticInfoChain.setSymbolForAST(methodAST, methodSymbol);
if (isOptional) {
methodSymbol.isOptional = true;
}
if (!parentHadSymbol) {
parent.addMember(methodSymbol);
}
var sigKind = 1048576 /* CallSignature */;
var signature = new TypeScript.PullSignatureSymbol(sigKind, !isSignature);
var parameterList = TypeScript.ASTHelpers.getParameterList(methodAST);
if (TypeScript.lastParameterIsRest(parameterList)) {
signature.hasVarArgs = true;
}
var typeParameters = methodDeclaration.getTypeParameters();
var typeParameter;
var typeParameterName;
var typeParameterAST;
for (var i = 0; i < typeParameters.length; i++) {
typeParameterName = typeParameters[i].name;
typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameters[i]);
typeParameter = signature.findTypeParameter(typeParameterName);
if (!typeParameter) {
typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameterName);
signature.addTypeParameter(typeParameter);
} else {
this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.getName()]);
}
typeParameter.addDeclaration(typeParameters[i]);
typeParameters[i].setSymbol(typeParameter);
}
signature.addDeclaration(methodDeclaration);
methodDeclaration.setSignatureSymbol(signature);
var funcDecl = this.semanticInfoChain.getASTForDecl(methodDeclaration);
this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameterList(TypeScript.ASTHelpers.getParameterList(funcDecl)), methodTypeSymbol, signature);
var signatureIndex = this.getIndexForInsertingSignatureAtEndOfEnclosingDeclInSignatureList(signature, methodTypeSymbol.getOwnCallSignatures());
methodTypeSymbol.insertCallSignatureAtIndex(signature, signatureIndex);
};
PullSymbolBinder.prototype.bindStaticPrototypePropertyOfClass = function (classAST, classTypeSymbol, constructorTypeSymbol) {
var prototypeStr = "prototype";
var prototypeSymbol = constructorTypeSymbol.findMember(prototypeStr, false);
if (prototypeSymbol && !prototypeSymbol.getIsSynthesized()) {
this.semanticInfoChain.addDiagnostic(TypeScript.PullHelpers.diagnosticFromDecl(prototypeSymbol.getDeclarations()[0], TypeScript.DiagnosticCode.Duplicate_identifier_0, [prototypeSymbol.getDisplayName()]));
}
if (!prototypeSymbol || !prototypeSymbol.getIsSynthesized()) {
var prototypeDecl = new TypeScript.PullSynthesizedDecl(prototypeStr, prototypeStr, 4096 /* Property */, 4 /* Public */ | 16 /* Static */, constructorTypeSymbol.getDeclarations()[0], this.semanticInfoChain);
prototypeSymbol = new TypeScript.PullSymbol(prototypeStr, 4096 /* Property */);
prototypeSymbol.setIsSynthesized();
prototypeSymbol.addDeclaration(prototypeDecl);
prototypeSymbol.type = classTypeSymbol;
constructorTypeSymbol.addMember(prototypeSymbol);
if (prototypeSymbol.type && prototypeSymbol.type.isGeneric()) {
var resolver = this.semanticInfoChain.getResolver();
prototypeSymbol.type = resolver.instantiateTypeToAny(prototypeSymbol.type, new TypeScript.PullTypeResolutionContext(resolver));
}
prototypeSymbol.setResolved();
}
};
PullSymbolBinder.prototype.bindConstructorDeclarationToPullSymbol = function (constructorDeclaration) {
var declKind = constructorDeclaration.kind;
var declFlags = constructorDeclaration.flags;
var constructorAST = this.semanticInfoChain.getASTForDecl(constructorDeclaration);
var constructorName = constructorDeclaration.name;
var isSignature = (declFlags & 2048 /* Signature */) !== 0;
var parent = this.getParent(constructorDeclaration, true);
var parentHadSymbol = false;
var constructorSymbol = parent.getConstructorMethod();
var constructorTypeSymbol = null;
if (constructorSymbol && (constructorSymbol.kind !== 32768 /* ConstructorMethod */ || (!isSignature && constructorSymbol.type && constructorSymbol.type.hasOwnConstructSignatures()))) {
var hasDefinitionSignature = false;
var constructorSigs = constructorSymbol.type.getConstructSignatures();
for (var i = 0; i < constructorSigs.length; i++) {
if (!constructorSigs[i].anyDeclHasFlag(2048 /* Signature */)) {
hasDefinitionSignature = true;
break;
}
}
if (hasDefinitionSignature) {
this.semanticInfoChain.addDiagnosticFromAST(constructorAST, TypeScript.DiagnosticCode.Multiple_constructor_implementations_are_not_allowed);
constructorSymbol = null;
}
}
if (constructorSymbol) {
constructorTypeSymbol = constructorSymbol.type;
} else {
constructorSymbol = new TypeScript.PullSymbol(constructorName, 32768 /* ConstructorMethod */);
constructorTypeSymbol = new TypeScript.PullTypeSymbol("", 33554432 /* ConstructorType */);
}
parent.setConstructorMethod(constructorSymbol);
constructorSymbol.type = constructorTypeSymbol;
constructorDeclaration.setSymbol(constructorSymbol);
constructorSymbol.addDeclaration(constructorDeclaration);
constructorTypeSymbol.addDeclaration(constructorDeclaration);
constructorSymbol.setIsSynthesized(false);
this.semanticInfoChain.setSymbolForAST(constructorAST, constructorSymbol);
var constructSignature = new TypeScript.PullSignatureSymbol(2097152 /* ConstructSignature */, !isSignature);
constructSignature.returnType = parent;
constructSignature.addTypeParametersFromReturnType();
constructSignature.addDeclaration(constructorDeclaration);
constructorDeclaration.setSignatureSymbol(constructSignature);
this.bindParameterSymbols(constructorAST, TypeScript.ASTHelpers.parametersFromParameterList(constructorAST.callSignature.parameterList), constructorTypeSymbol, constructSignature);
if (TypeScript.lastParameterIsRest(constructorAST.callSignature.parameterList)) {
constructSignature.hasVarArgs = true;
}
constructorTypeSymbol.appendConstructSignature(constructSignature);
};
PullSymbolBinder.prototype.bindConstructSignatureDeclarationToPullSymbol = function (constructSignatureDeclaration) {
var parent = this.getParent(constructSignatureDeclaration, true);
var constructorAST = this.semanticInfoChain.getASTForDecl(constructSignatureDeclaration);
var constructSignature = new TypeScript.PullSignatureSymbol(2097152 /* ConstructSignature */);
if (TypeScript.lastParameterIsRest(constructorAST.callSignature.parameterList)) {
constructSignature.hasVarArgs = true;
}
var typeParameters = constructSignatureDeclaration.getTypeParameters();
var typeParameter;
for (var i = 0; i < typeParameters.length; i++) {
typeParameter = constructSignature.findTypeParameter(typeParameters[i].name);
if (!typeParameter) {
typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name);
constructSignature.addTypeParameter(typeParameter);
} else {
var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]);
this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.getName()]);
}
typeParameter.addDeclaration(typeParameters[i]);
typeParameters[i].setSymbol(typeParameter);
}
constructSignature.addDeclaration(constructSignatureDeclaration);
constructSignatureDeclaration.setSignatureSymbol(constructSignature);
var funcDecl = this.semanticInfoChain.getASTForDecl(constructSignatureDeclaration);
this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameterList(TypeScript.ASTHelpers.getParameterList(funcDecl)), null, constructSignature);
this.semanticInfoChain.setSymbolForAST(this.semanticInfoChain.getASTForDecl(constructSignatureDeclaration), constructSignature);
var signatureIndex = this.getIndexForInsertingSignatureAtEndOfEnclosingDeclInSignatureList(constructSignature, parent.getOwnConstructSignatures());
parent.insertConstructSignatureAtIndex(constructSignature, signatureIndex);
};
PullSymbolBinder.prototype.bindCallSignatureDeclarationToPullSymbol = function (callSignatureDeclaration) {
var parent = this.getParent(callSignatureDeclaration, true);
var callSignatureAST = this.semanticInfoChain.getASTForDecl(callSignatureDeclaration);
var callSignature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */);
if (TypeScript.lastParameterIsRest(callSignatureAST.parameterList)) {
callSignature.hasVarArgs = true;
}
var typeParameters = callSignatureDeclaration.getTypeParameters();
var typeParameter;
for (var i = 0; i < typeParameters.length; i++) {
typeParameter = callSignature.findTypeParameter(typeParameters[i].name);
if (!typeParameter) {
typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name);
callSignature.addTypeParameter(typeParameter);
} else {
var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]);
this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.getName()]);
}
typeParameter.addDeclaration(typeParameters[i]);
typeParameters[i].setSymbol(typeParameter);
}
callSignature.addDeclaration(callSignatureDeclaration);
callSignatureDeclaration.setSignatureSymbol(callSignature);
var funcDecl = this.semanticInfoChain.getASTForDecl(callSignatureDeclaration);
this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.parameterList), null, callSignature);
this.semanticInfoChain.setSymbolForAST(this.semanticInfoChain.getASTForDecl(callSignatureDeclaration), callSignature);
var signatureIndex = this.getIndexForInsertingSignatureAtEndOfEnclosingDeclInSignatureList(callSignature, parent.getOwnCallSignatures());
parent.insertCallSignatureAtIndex(callSignature, signatureIndex);
};
PullSymbolBinder.prototype.bindIndexSignatureDeclarationToPullSymbol = function (indexSignatureDeclaration) {
var indexSignature = new TypeScript.PullSignatureSymbol(4194304 /* IndexSignature */);
indexSignature.addDeclaration(indexSignatureDeclaration);
indexSignatureDeclaration.setSignatureSymbol(indexSignature);
var funcDecl = this.semanticInfoChain.getASTForDecl(indexSignatureDeclaration);
this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameter(funcDecl.parameter), null, indexSignature);
this.semanticInfoChain.setSymbolForAST(this.semanticInfoChain.getASTForDecl(indexSignatureDeclaration), indexSignature);
var parent = this.getParent(indexSignatureDeclaration);
parent.addIndexSignature(indexSignature);
indexSignature.setContainer(parent);
};
PullSymbolBinder.prototype.bindGetAccessorDeclarationToPullSymbol = function (getAccessorDeclaration) {
var declKind = getAccessorDeclaration.kind;
var declFlags = getAccessorDeclaration.flags;
var funcDeclAST = this.semanticInfoChain.getASTForDecl(getAccessorDeclaration);
var isExported = (declFlags & 1 /* Exported */) !== 0;
var funcName = getAccessorDeclaration.name;
var isSignature = (declFlags & 2048 /* Signature */) !== 0;
var isStatic = false;
if (TypeScript.hasFlag(declFlags, 16 /* Static */)) {
isStatic = true;
}
var parent = this.getParent(getAccessorDeclaration, true);
var parentHadSymbol = false;
var accessorSymbol = null;
var getterSymbol = null;
var getterTypeSymbol = null;
if (isStatic) {
parent = parent.getConstructorMethod().type;
}
accessorSymbol = parent.findMember(funcName, false);
if (accessorSymbol) {
if (!accessorSymbol.isAccessor()) {
this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(funcDeclAST.propertyName, getAccessorDeclaration.getDisplayName(), accessorSymbol.getDeclarations()[0].ast());
accessorSymbol = null;
} else {
getterSymbol = accessorSymbol.getGetter();
if (getterSymbol) {
this.semanticInfoChain.addDiagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Getter_0_already_declared, [getAccessorDeclaration.getDisplayName()]);
accessorSymbol = null;
getterSymbol = null;
}
}
}
if (accessorSymbol) {
parentHadSymbol = true;
}
if (accessorSymbol && getterSymbol) {
getterTypeSymbol = getterSymbol.type;
}
if (!accessorSymbol) {
accessorSymbol = new TypeScript.PullAccessorSymbol(funcName);
}
if (!getterSymbol) {
getterSymbol = new TypeScript.PullSymbol(funcName, 16384 /* Function */);
getterTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */);
getterTypeSymbol.setFunctionSymbol(getterSymbol);
getterSymbol.type = getterTypeSymbol;
accessorSymbol.setGetter(getterSymbol);
}
getAccessorDeclaration.setSymbol(accessorSymbol);
accessorSymbol.addDeclaration(getAccessorDeclaration);
getterSymbol.addDeclaration(getAccessorDeclaration);
var nameAST = funcDeclAST.propertyName;
this.semanticInfoChain.setSymbolForAST(nameAST, accessorSymbol);
this.semanticInfoChain.setSymbolForAST(funcDeclAST, getterSymbol);
if (!parentHadSymbol) {
parent.addMember(accessorSymbol);
}
var signature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */, !isSignature);
signature.addDeclaration(getAccessorDeclaration);
getAccessorDeclaration.setSignatureSymbol(signature);
this.bindParameterSymbols(funcDeclAST, TypeScript.ASTHelpers.parametersFromParameterList(funcDeclAST.parameterList), getterTypeSymbol, signature);
getterTypeSymbol.appendCallSignature(signature);
};
PullSymbolBinder.prototype.bindSetAccessorDeclarationToPullSymbol = function (setAccessorDeclaration) {
var declKind = setAccessorDeclaration.kind;
var declFlags = setAccessorDeclaration.flags;
var funcDeclAST = this.semanticInfoChain.getASTForDecl(setAccessorDeclaration);
var isExported = (declFlags & 1 /* Exported */) !== 0;
var funcName = setAccessorDeclaration.name;
var isSignature = (declFlags & 2048 /* Signature */) !== 0;
var isStatic = false;
if (TypeScript.hasFlag(declFlags, 16 /* Static */)) {
isStatic = true;
}
var parent = this.getParent(setAccessorDeclaration, true);
var parentHadSymbol = false;
var accessorSymbol = null;
var setterSymbol = null;
var setterTypeSymbol = null;
if (isStatic) {
parent = parent.getConstructorMethod().type;
}
accessorSymbol = parent.findMember(funcName, false);
if (accessorSymbol) {
if (!accessorSymbol.isAccessor()) {
this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(funcDeclAST.propertyName, setAccessorDeclaration.getDisplayName(), accessorSymbol.getDeclarations()[0].ast());
accessorSymbol = null;
} else {
setterSymbol = accessorSymbol.getSetter();
if (setterSymbol) {
this.semanticInfoChain.addDiagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Setter_0_already_declared, [setAccessorDeclaration.getDisplayName()]);
accessorSymbol = null;
setterSymbol = null;
}
}
}
if (accessorSymbol) {
parentHadSymbol = true;
if (setterSymbol) {
setterTypeSymbol = setterSymbol.type;
}
}
if (!accessorSymbol) {
accessorSymbol = new TypeScript.PullAccessorSymbol(funcName);
}
if (!setterSymbol) {
setterSymbol = new TypeScript.PullSymbol(funcName, 16384 /* Function */);
setterTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */);
setterTypeSymbol.setFunctionSymbol(setterSymbol);
setterSymbol.type = setterTypeSymbol;
accessorSymbol.setSetter(setterSymbol);
}
setAccessorDeclaration.setSymbol(accessorSymbol);
accessorSymbol.addDeclaration(setAccessorDeclaration);
setterSymbol.addDeclaration(setAccessorDeclaration);
var nameAST = funcDeclAST.propertyName;
this.semanticInfoChain.setSymbolForAST(nameAST, accessorSymbol);
this.semanticInfoChain.setSymbolForAST(funcDeclAST, setterSymbol);
if (!parentHadSymbol) {
parent.addMember(accessorSymbol);
}
var signature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */, !isSignature);
signature.addDeclaration(setAccessorDeclaration);
setAccessorDeclaration.setSignatureSymbol(signature);
this.bindParameterSymbols(funcDeclAST, TypeScript.ASTHelpers.parametersFromParameterList(funcDeclAST.parameterList), setterTypeSymbol, signature);
setterTypeSymbol.appendCallSignature(signature);
};
PullSymbolBinder.prototype.getDeclsToBind = function (decl) {
var decls;
switch (decl.kind) {
case 64 /* Enum */:
case 32 /* DynamicModule */:
case 4 /* Container */:
case 16 /* Interface */:
decls = this.findDeclsInContext(decl, decl.kind, true);
break;
case 512 /* Variable */:
case 16384 /* Function */:
case 65536 /* Method */:
case 32768 /* ConstructorMethod */:
decls = this.findDeclsInContext(decl, decl.kind, false);
break;
default:
decls = [decl];
}
TypeScript.Debug.assert(decls && decls.length > 0);
TypeScript.Debug.assert(TypeScript.ArrayUtilities.contains(decls, decl));
return decls;
};
PullSymbolBinder.prototype.shouldBindDeclaration = function (decl) {
return !decl.hasBeenBound() && this.declsBeingBound.indexOf(decl.declID) < 0;
};
PullSymbolBinder.prototype.bindDeclToPullSymbol = function (decl) {
if (this.shouldBindDeclaration(decl)) {
this.bindAllDeclsToPullSymbol(decl);
}
};
PullSymbolBinder.prototype.bindAllDeclsToPullSymbol = function (askedDecl) {
var allDecls = this.getDeclsToBind(askedDecl);
for (var i = 0; i < allDecls.length; i++) {
var decl = allDecls[i];
if (this.shouldBindDeclaration(decl)) {
this.bindSingleDeclToPullSymbol(decl);
}
}
};
PullSymbolBinder.prototype.bindSingleDeclToPullSymbol = function (decl) {
this.declsBeingBound.push(decl.declID);
switch (decl.kind) {
case 1 /* Script */:
var childDecls = decl.getChildDecls();
for (var i = 0; i < childDecls.length; i++) {
this.bindDeclToPullSymbol(childDecls[i]);
}
break;
case 64 /* Enum */:
this.bindEnumDeclarationToPullSymbol(decl);
break;
case 32 /* DynamicModule */:
case 4 /* Container */:
this.bindModuleDeclarationToPullSymbol(decl);
break;
case 16 /* Interface */:
this.bindInterfaceDeclarationToPullSymbol(decl);
break;
case 8 /* Class */:
this.bindClassDeclarationToPullSymbol(decl);
break;
case 16384 /* Function */:
this.bindFunctionDeclarationToPullSymbol(decl);
break;
case 512 /* Variable */:
this.bindVariableDeclarationToPullSymbol(decl);
break;
case 1024 /* CatchVariable */:
this.bindCatchVariableToPullSymbol(decl);
break;
case 67108864 /* EnumMember */:
this.bindEnumMemberDeclarationToPullSymbol(decl);
break;
case 4096 /* Property */:
this.bindPropertyDeclarationToPullSymbol(decl);
break;
case 65536 /* Method */:
this.bindMethodDeclarationToPullSymbol(decl);
break;
case 32768 /* ConstructorMethod */:
this.bindConstructorDeclarationToPullSymbol(decl);
break;
case 1048576 /* CallSignature */:
this.bindCallSignatureDeclarationToPullSymbol(decl);
break;
case 2097152 /* ConstructSignature */:
this.bindConstructSignatureDeclarationToPullSymbol(decl);
break;
case 4194304 /* IndexSignature */:
this.bindIndexSignatureDeclarationToPullSymbol(decl);
break;
case 262144 /* GetAccessor */:
this.bindGetAccessorDeclarationToPullSymbol(decl);
break;
case 524288 /* SetAccessor */:
this.bindSetAccessorDeclarationToPullSymbol(decl);
break;
case 8388608 /* ObjectType */:
this.bindObjectTypeDeclarationToPullSymbol(decl);
break;
case 16777216 /* FunctionType */:
this.bindFunctionTypeDeclarationToPullSymbol(decl);
break;
case 33554432 /* ConstructorType */:
this.bindConstructorTypeDeclarationToPullSymbol(decl);
break;
case 131072 /* FunctionExpression */:
this.bindFunctionExpressionToPullSymbol(decl);
break;
case 128 /* TypeAlias */:
this.bindImportDeclaration(decl);
break;
case 2048 /* Parameter */:
case 8192 /* TypeParameter */:
decl.getParentDecl().getSymbol();
break;
case 268435456 /* CatchBlock */:
case 134217728 /* WithBlock */:
break;
default:
TypeScript.CompilerDiagnostics.assert(false, "Unrecognized type declaration");
}
TypeScript.Debug.assert(TypeScript.ArrayUtilities.last(this.declsBeingBound) === decl.declID);
this.declsBeingBound.pop();
};
return PullSymbolBinder;
})();
TypeScript.PullSymbolBinder = PullSymbolBinder;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (PullHelpers) {
function diagnosticFromDecl(decl, diagnosticKey, _arguments, additionalLocations) {
if (typeof _arguments === "undefined") { _arguments = null; }
if (typeof additionalLocations === "undefined") { additionalLocations = null; }
var ast = decl.ast();
return decl.semanticInfoChain.diagnosticFromAST(ast, diagnosticKey, _arguments, additionalLocations);
}
PullHelpers.diagnosticFromDecl = diagnosticFromDecl;
function resolveDeclaredSymbolToUseType(symbol) {
if (symbol.isSignature()) {
if (!symbol.returnType) {
symbol._resolveDeclaredSymbol();
}
} else if (!symbol.type) {
symbol._resolveDeclaredSymbol();
}
}
PullHelpers.resolveDeclaredSymbolToUseType = resolveDeclaredSymbolToUseType;
function getSignatureForFuncDecl(functionDecl) {
var funcDecl = functionDecl.ast();
var funcSymbol = functionDecl.getSymbol();
if (!funcSymbol) {
funcSymbol = functionDecl.getSignatureSymbol();
}
var functionSignature = null;
var typeSymbolWithAllSignatures = null;
if (funcSymbol.isSignature()) {
functionSignature = funcSymbol;
var parent = functionDecl.getParentDecl();
typeSymbolWithAllSignatures = parent.getSymbol().type;
} else {
functionSignature = functionDecl.getSignatureSymbol();
typeSymbolWithAllSignatures = funcSymbol.type;
}
var signatures;
if (funcDecl.kind() === 137 /* ConstructorDeclaration */ || functionDecl.kind === 2097152 /* ConstructSignature */) {
signatures = typeSymbolWithAllSignatures.getConstructSignatures();
} else if (functionDecl.kind === 4194304 /* IndexSignature */) {
signatures = typeSymbolWithAllSignatures.getIndexSignatures();
} else {
signatures = typeSymbolWithAllSignatures.getCallSignatures();
}
return {
signature: functionSignature,
allSignatures: signatures
};
}
PullHelpers.getSignatureForFuncDecl = getSignatureForFuncDecl;
function getAccessorSymbol(getterOrSetter, semanticInfoChain) {
var functionDecl = semanticInfoChain.getDeclForAST(getterOrSetter);
var getterOrSetterSymbol = functionDecl.getSymbol();
return getterOrSetterSymbol;
}
PullHelpers.getAccessorSymbol = getAccessorSymbol;
function getGetterAndSetterFunction(funcDecl, semanticInfoChain) {
var accessorSymbol = PullHelpers.getAccessorSymbol(funcDecl, semanticInfoChain);
var result = {
getter: null,
setter: null
};
var getter = accessorSymbol.getGetter();
if (getter) {
var getterDecl = getter.getDeclarations()[0];
result.getter = semanticInfoChain.getASTForDecl(getterDecl);
}
var setter = accessorSymbol.getSetter();
if (setter) {
var setterDecl = setter.getDeclarations()[0];
result.setter = semanticInfoChain.getASTForDecl(setterDecl);
}
return result;
}
PullHelpers.getGetterAndSetterFunction = getGetterAndSetterFunction;
function symbolIsEnum(source) {
return source && (source.kind & (64 /* Enum */ | 67108864 /* EnumMember */)) !== 0;
}
PullHelpers.symbolIsEnum = symbolIsEnum;
function symbolIsModule(symbol) {
return symbol && (symbol.kind === 4 /* Container */ || isOneDeclarationOfKind(symbol, 4 /* Container */));
}
PullHelpers.symbolIsModule = symbolIsModule;
function isOneDeclarationOfKind(symbol, kind) {
var decls = symbol.getDeclarations();
for (var i = 0; i < decls.length; i++) {
if (decls[i].kind === kind) {
return true;
}
}
return false;
}
function isNameNumeric(name) {
return isFinite(+name);
}
PullHelpers.isNameNumeric = isNameNumeric;
function typeSymbolsAreIdentical(a, b) {
if (a.isTypeReference() && !a.getIsSpecialized()) {
a = a.referencedTypeSymbol;
}
if (b.isTypeReference() && !b.getIsSpecialized()) {
b = b.referencedTypeSymbol;
}
return a === b;
}
PullHelpers.typeSymbolsAreIdentical = typeSymbolsAreIdentical;
function getRootType(type) {
var rootType = type.getRootSymbol();
while (true) {
if (type === rootType) {
return type;
}
type = rootType;
rootType = type.getRootSymbol();
}
}
PullHelpers.getRootType = getRootType;
function isSymbolLocal(symbol) {
var container = symbol.getContainer();
if (container) {
var containerKind = container.kind;
if (containerKind & (1032192 /* SomeFunction */ | 16777216 /* FunctionType */)) {
return true;
}
if (containerKind === 33554432 /* ConstructorType */ && !symbol.anyDeclHasFlag(16 /* Static */ | 1 /* Exported */)) {
return true;
}
}
return false;
}
PullHelpers.isSymbolLocal = isSymbolLocal;
function isExportedSymbolInClodule(symbol) {
var container = symbol.getContainer();
return container && container.kind === 33554432 /* ConstructorType */ && symbolIsModule(container) && symbol.anyDeclHasFlag(1 /* Exported */);
}
PullHelpers.isExportedSymbolInClodule = isExportedSymbolInClodule;
function walkSignatureSymbol(signatureSymbol, walker) {
var continueWalk = true;
var parameters = signatureSymbol.parameters;
if (parameters) {
for (var i = 0; continueWalk && i < parameters.length; i++) {
continueWalk = walker.signatureParameterWalk(parameters[i]);
}
}
if (continueWalk) {
continueWalk = walker.signatureReturnTypeWalk(signatureSymbol.returnType);
}
return continueWalk;
}
function walkPullTypeSymbolStructure(typeSymbol, walker) {
var continueWalk = true;
var members = typeSymbol.getMembers();
for (var i = 0; continueWalk && i < members.length; i++) {
continueWalk = walker.memberSymbolWalk(members[i]);
}
if (continueWalk) {
var callSigantures = typeSymbol.getCallSignatures();
for (var i = 0; continueWalk && i < callSigantures.length; i++) {
continueWalk = walker.callSignatureWalk(callSigantures[i]);
if (continueWalk) {
continueWalk = walkSignatureSymbol(callSigantures[i], walker);
}
}
}
if (continueWalk) {
var constructSignatures = typeSymbol.getConstructSignatures();
for (var i = 0; continueWalk && i < constructSignatures.length; i++) {
continueWalk = walker.constructSignatureWalk(constructSignatures[i]);
if (continueWalk) {
continueWalk = walkSignatureSymbol(constructSignatures[i], walker);
}
}
}
if (continueWalk) {
var indexSignatures = typeSymbol.getIndexSignatures();
for (var i = 0; continueWalk && i < indexSignatures.length; i++) {
continueWalk = walker.indexSignatureWalk(indexSignatures[i]);
if (continueWalk) {
continueWalk = walkSignatureSymbol(indexSignatures[i], walker);
}
}
}
}
PullHelpers.walkPullTypeSymbolStructure = walkPullTypeSymbolStructure;
var OtherPullDeclsWalker = (function () {
function OtherPullDeclsWalker() {
this.currentlyWalkingOtherDecls = [];
}
OtherPullDeclsWalker.prototype.walkOtherPullDecls = function (currentDecl, otherDecls, callBack) {
if (otherDecls) {
var isAlreadyWalkingOtherDecl = TypeScript.ArrayUtilities.any(this.currentlyWalkingOtherDecls, function (inWalkingOtherDecl) {
return TypeScript.ArrayUtilities.contains(otherDecls, inWalkingOtherDecl);
});
if (!isAlreadyWalkingOtherDecl) {
this.currentlyWalkingOtherDecls.push(currentDecl);
for (var i = 0; i < otherDecls.length; i++) {
if (otherDecls[i] !== currentDecl) {
callBack(otherDecls[i]);
}
}
var currentlyWalkingOtherDeclsDecl = this.currentlyWalkingOtherDecls.pop();
TypeScript.Debug.assert(currentlyWalkingOtherDeclsDecl == currentDecl);
}
}
};
return OtherPullDeclsWalker;
})();
PullHelpers.OtherPullDeclsWalker = OtherPullDeclsWalker;
})(TypeScript.PullHelpers || (TypeScript.PullHelpers = {}));
var PullHelpers = TypeScript.PullHelpers;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var WrapsTypeParameterCache = (function () {
function WrapsTypeParameterCache() {
this._wrapsTypeParameterCache = TypeScript.BitVector.getBitVector(true);
}
WrapsTypeParameterCache.prototype.getWrapsTypeParameter = function (typeParameterArgumentMap) {
var mapHasTypeParameterNotCached = false;
for (var typeParameterID in typeParameterArgumentMap) {
if (typeParameterArgumentMap.hasOwnProperty(typeParameterID)) {
var cachedValue = this._wrapsTypeParameterCache.valueAt(typeParameterID);
if (cachedValue) {
return typeParameterID;
}
mapHasTypeParameterNotCached = mapHasTypeParameterNotCached || cachedValue === undefined;
}
}
if (!mapHasTypeParameterNotCached) {
return 0;
}
return undefined;
};
WrapsTypeParameterCache.prototype.setWrapsTypeParameter = function (typeParameterArgumentMap, wrappingTypeParameterID) {
if (wrappingTypeParameterID) {
this._wrapsTypeParameterCache.setValueAt(wrappingTypeParameterID, true);
} else {
for (var typeParameterID in typeParameterArgumentMap) {
if (typeParameterArgumentMap.hasOwnProperty(typeParameterID)) {
this._wrapsTypeParameterCache.setValueAt(typeParameterID, false);
}
}
}
};
return WrapsTypeParameterCache;
})();
TypeScript.WrapsTypeParameterCache = WrapsTypeParameterCache;
(function (PullInstantiationHelpers) {
var MutableTypeArgumentMap = (function () {
function MutableTypeArgumentMap(typeParameterArgumentMap) {
this.typeParameterArgumentMap = typeParameterArgumentMap;
this.createdDuplicateTypeArgumentMap = false;
}
MutableTypeArgumentMap.prototype.ensureTypeArgumentCopy = function () {
if (!this.createdDuplicateTypeArgumentMap) {
var passedInTypeArgumentMap = this.typeParameterArgumentMap;
this.typeParameterArgumentMap = [];
for (var typeParameterID in passedInTypeArgumentMap) {
if (passedInTypeArgumentMap.hasOwnProperty(typeParameterID)) {
this.typeParameterArgumentMap[typeParameterID] = passedInTypeArgumentMap[typeParameterID];
}
}
this.createdDuplicateTypeArgumentMap = true;
}
};
return MutableTypeArgumentMap;
})();
PullInstantiationHelpers.MutableTypeArgumentMap = MutableTypeArgumentMap;
function instantiateTypeArgument(resolver, symbol, mutableTypeParameterMap) {
if (symbol.getIsSpecialized()) {
var rootTypeArgumentMap = symbol.getTypeParameterArgumentMap();
var newTypeArgumentMap = [];
var allowedTypeParameters = symbol.getAllowedToReferenceTypeParameters();
for (var i = 0; i < allowedTypeParameters.length; i++) {
var typeParameterID = allowedTypeParameters[i].pullSymbolID;
var typeArg = rootTypeArgumentMap[typeParameterID];
if (typeArg) {
newTypeArgumentMap[typeParameterID] = resolver.instantiateType(typeArg, mutableTypeParameterMap.typeParameterArgumentMap);
}
}
for (var i = 0; i < allowedTypeParameters.length; i++) {
var typeParameterID = allowedTypeParameters[i].pullSymbolID;
if (newTypeArgumentMap[typeParameterID] && mutableTypeParameterMap.typeParameterArgumentMap[typeParameterID] != newTypeArgumentMap[typeParameterID]) {
mutableTypeParameterMap.ensureTypeArgumentCopy();
mutableTypeParameterMap.typeParameterArgumentMap[typeParameterID] = newTypeArgumentMap[typeParameterID];
}
}
}
}
PullInstantiationHelpers.instantiateTypeArgument = instantiateTypeArgument;
function cleanUpTypeArgumentMap(symbol, mutableTypeArgumentMap) {
var allowedToReferenceTypeParameters = symbol.getAllowedToReferenceTypeParameters();
for (var typeParameterID in mutableTypeArgumentMap.typeParameterArgumentMap) {
if (mutableTypeArgumentMap.typeParameterArgumentMap.hasOwnProperty(typeParameterID)) {
if (!TypeScript.ArrayUtilities.any(allowedToReferenceTypeParameters, function (typeParameter) {
return typeParameter.pullSymbolID == typeParameterID;
})) {
mutableTypeArgumentMap.ensureTypeArgumentCopy();
delete mutableTypeArgumentMap.typeParameterArgumentMap[typeParameterID];
}
}
}
}
PullInstantiationHelpers.cleanUpTypeArgumentMap = cleanUpTypeArgumentMap;
function getAllowedToReferenceTypeParametersFromDecl(decl) {
var allowedToReferenceTypeParameters = [];
var allowedToUseDeclTypeParameters = false;
var getTypeParametersFromParentDecl = false;
switch (decl.kind) {
case 65536 /* Method */:
if (TypeScript.hasFlag(decl.flags, 16 /* Static */)) {
allowedToUseDeclTypeParameters = true;
break;
}
case 16777216 /* FunctionType */:
case 33554432 /* ConstructorType */:
case 2097152 /* ConstructSignature */:
case 1048576 /* CallSignature */:
case 131072 /* FunctionExpression */:
case 16384 /* Function */:
allowedToUseDeclTypeParameters = true;
getTypeParametersFromParentDecl = true;
break;
case 4096 /* Property */:
if (TypeScript.hasFlag(decl.flags, 16 /* Static */)) {
break;
}
case 2048 /* Parameter */:
case 262144 /* GetAccessor */:
case 524288 /* SetAccessor */:
case 32768 /* ConstructorMethod */:
case 4194304 /* IndexSignature */:
case 8388608 /* ObjectType */:
case 256 /* ObjectLiteral */:
case 8192 /* TypeParameter */:
getTypeParametersFromParentDecl = true;
break;
case 8 /* Class */:
case 16 /* Interface */:
allowedToUseDeclTypeParameters = true;
break;
}
if (getTypeParametersFromParentDecl) {
allowedToReferenceTypeParameters = allowedToReferenceTypeParameters.concat(getAllowedToReferenceTypeParametersFromDecl(decl.getParentDecl()));
}
if (allowedToUseDeclTypeParameters) {
var typeParameterDecls = decl.getTypeParameters();
for (var i = 0; i < typeParameterDecls.length; i++) {
allowedToReferenceTypeParameters.push(typeParameterDecls[i].getSymbol());
}
}
return allowedToReferenceTypeParameters;
}
PullInstantiationHelpers.getAllowedToReferenceTypeParametersFromDecl = getAllowedToReferenceTypeParametersFromDecl;
function createTypeParameterArgumentMap(typeParameters, typeArguments) {
return updateTypeParameterArgumentMap(typeParameters, typeArguments, {});
}
PullInstantiationHelpers.createTypeParameterArgumentMap = createTypeParameterArgumentMap;
function updateTypeParameterArgumentMap(typeParameters, typeArguments, typeParameterArgumentMap) {
for (var i = 0; i < typeParameters.length; i++) {
typeParameterArgumentMap[typeParameters[i].getRootSymbol().pullSymbolID] = typeArguments[i];
}
return typeParameterArgumentMap;
}
PullInstantiationHelpers.updateTypeParameterArgumentMap = updateTypeParameterArgumentMap;
function updateMutableTypeParameterArgumentMap(typeParameters, typeArguments, mutableMap) {
for (var i = 0; i < typeParameters.length; i++) {
var typeParameterId = typeParameters[i].getRootSymbol().pullSymbolID;
if (mutableMap.typeParameterArgumentMap[typeParameterId] !== typeArguments[i]) {
mutableMap.ensureTypeArgumentCopy();
mutableMap.typeParameterArgumentMap[typeParameterId] = typeArguments[i];
}
}
}
PullInstantiationHelpers.updateMutableTypeParameterArgumentMap = updateMutableTypeParameterArgumentMap;
function twoTypesAreInstantiationsOfSameNamedGenericType(type1, type2) {
var type1IsGeneric = type1.isGeneric() && type1.getTypeArguments() !== null;
var type2IsGeneric = type2.isGeneric() && type2.getTypeArguments() !== null;
if (type1IsGeneric && type2IsGeneric) {
var type1Root = TypeScript.PullHelpers.getRootType(type1);
var type2Root = TypeScript.PullHelpers.getRootType(type2);
return type1Root === type2Root;
}
return false;
}
PullInstantiationHelpers.twoTypesAreInstantiationsOfSameNamedGenericType = twoTypesAreInstantiationsOfSameNamedGenericType;
})(TypeScript.PullInstantiationHelpers || (TypeScript.PullInstantiationHelpers = {}));
var PullInstantiationHelpers = TypeScript.PullInstantiationHelpers;
})(TypeScript || (TypeScript = {}));
if (Error)
Error.stackTraceLimit = 1000;
var TypeScript;
(function (TypeScript) {
TypeScript.fileResolutionTime = 0;
TypeScript.fileResolutionIOTime = 0;
TypeScript.fileResolutionScanImportsTime = 0;
TypeScript.fileResolutionImportFileSearchTime = 0;
TypeScript.fileResolutionGetDefaultLibraryTime = 0;
TypeScript.sourceCharactersCompiled = 0;
TypeScript.syntaxTreeParseTime = 0;
TypeScript.syntaxDiagnosticsTime = 0;
TypeScript.astTranslationTime = 0;
TypeScript.typeCheckTime = 0;
TypeScript.compilerResolvePathTime = 0;
TypeScript.compilerDirectoryNameTime = 0;
TypeScript.compilerDirectoryExistsTime = 0;
TypeScript.compilerFileExistsTime = 0;
TypeScript.emitTime = 0;
TypeScript.emitWriteFileTime = 0;
TypeScript.declarationEmitTime = 0;
TypeScript.declarationEmitIsExternallyVisibleTime = 0;
TypeScript.declarationEmitTypeSignatureTime = 0;
TypeScript.declarationEmitGetBoundDeclTypeTime = 0;
TypeScript.declarationEmitIsOverloadedCallSignatureTime = 0;
TypeScript.declarationEmitFunctionDeclarationGetSymbolTime = 0;
TypeScript.declarationEmitGetBaseTypeTime = 0;
TypeScript.declarationEmitGetAccessorFunctionTime = 0;
TypeScript.declarationEmitGetTypeParameterSymbolTime = 0;
TypeScript.declarationEmitGetImportDeclarationSymbolTime = 0;
TypeScript.ioHostResolvePathTime = 0;
TypeScript.ioHostDirectoryNameTime = 0;
TypeScript.ioHostCreateDirectoryStructureTime = 0;
TypeScript.ioHostWriteFileTime = 0;
(function (EmitOutputResult) {
EmitOutputResult[EmitOutputResult["Succeeded"] = 0] = "Succeeded";
EmitOutputResult[EmitOutputResult["FailedBecauseOfSyntaxErrors"] = 1] = "FailedBecauseOfSyntaxErrors";
EmitOutputResult[EmitOutputResult["FailedBecauseOfCompilerOptionsErrors"] = 2] = "FailedBecauseOfCompilerOptionsErrors";
EmitOutputResult[EmitOutputResult["FailedToGenerateDeclarationsBecauseOfSemanticErrors"] = 3] = "FailedToGenerateDeclarationsBecauseOfSemanticErrors";
})(TypeScript.EmitOutputResult || (TypeScript.EmitOutputResult = {}));
var EmitOutputResult = TypeScript.EmitOutputResult;
var EmitOutput = (function () {
function EmitOutput(emitOutputResult) {
if (typeof emitOutputResult === "undefined") { emitOutputResult = 0 /* Succeeded */; }
this.outputFiles = [];
this.emitOutputResult = emitOutputResult;
}
return EmitOutput;
})();
TypeScript.EmitOutput = EmitOutput;
(function (OutputFileType) {
OutputFileType[OutputFileType["JavaScript"] = 0] = "JavaScript";
OutputFileType[OutputFileType["SourceMap"] = 1] = "SourceMap";
OutputFileType[OutputFileType["Declaration"] = 2] = "Declaration";
})(TypeScript.OutputFileType || (TypeScript.OutputFileType = {}));
var OutputFileType = TypeScript.OutputFileType;
var OutputFile = (function () {
function OutputFile(name, writeByteOrderMark, text, fileType, sourceMapEntries) {
if (typeof sourceMapEntries === "undefined") { sourceMapEntries = []; }
this.name = name;
this.writeByteOrderMark = writeByteOrderMark;
this.text = text;
this.fileType = fileType;
this.sourceMapEntries = sourceMapEntries;
}
return OutputFile;
})();
TypeScript.OutputFile = OutputFile;
var CompileResult = (function () {
function CompileResult() {
this.diagnostics = [];
this.outputFiles = [];
}
CompileResult.fromDiagnostics = function (diagnostics) {
var result = new CompileResult();
result.diagnostics = diagnostics;
return result;
};
CompileResult.fromOutputFiles = function (outputFiles) {
var result = new CompileResult();
result.outputFiles = outputFiles;
return result;
};
return CompileResult;
})();
TypeScript.CompileResult = CompileResult;
var TypeScriptCompiler = (function () {
function TypeScriptCompiler(logger, _settings) {
if (typeof logger === "undefined") { logger = new TypeScript.NullLogger(); }
if (typeof _settings === "undefined") { _settings = TypeScript.ImmutableCompilationSettings.defaultSettings(); }
this.logger = logger;
this._settings = _settings;
this.semanticInfoChain = null;
this.semanticInfoChain = new TypeScript.SemanticInfoChain(this, logger);
}
TypeScriptCompiler.prototype.compilationSettings = function () {
return this._settings;
};
TypeScriptCompiler.prototype.setCompilationSettings = function (newSettings) {
var oldSettings = this._settings;
this._settings = newSettings;
if (!compareDataObjects(oldSettings, newSettings)) {
this.semanticInfoChain.invalidate(oldSettings, newSettings);
}
};
TypeScriptCompiler.prototype.getDocument = function (fileName) {
fileName = TypeScript.switchToForwardSlashes(fileName);
return this.semanticInfoChain.getDocument(fileName);
};
TypeScriptCompiler.prototype.cleanupSemanticCache = function () {
this.semanticInfoChain.invalidate();
};
TypeScriptCompiler.prototype.addFile = function (fileName, scriptSnapshot, byteOrderMark, version, isOpen, referencedFiles) {
if (typeof referencedFiles === "undefined") { referencedFiles = []; }
fileName = TypeScript.switchToForwardSlashes(fileName);
TypeScript.sourceCharactersCompiled += scriptSnapshot.getLength();
var document = TypeScript.Document.create(this, this.semanticInfoChain, fileName, scriptSnapshot, byteOrderMark, version, isOpen, referencedFiles);
this.semanticInfoChain.addDocument(document);
};
TypeScriptCompiler.prototype.updateFile = function (fileName, scriptSnapshot, version, isOpen, textChangeRange) {
fileName = TypeScript.switchToForwardSlashes(fileName);
var document = this.getDocument(fileName);
var updatedDocument = document.update(scriptSnapshot, version, isOpen, textChangeRange);
this.semanticInfoChain.addDocument(updatedDocument);
};
TypeScriptCompiler.prototype.removeFile = function (fileName) {
fileName = TypeScript.switchToForwardSlashes(fileName);
this.semanticInfoChain.removeDocument(fileName);
};
TypeScriptCompiler.prototype.mapOutputFileName = function (document, emitOptions, extensionChanger) {
if (document.emitToOwnOutputFile()) {
var updatedFileName = document.fileName;
if (emitOptions.outputDirectory() !== "") {
updatedFileName = document.fileName.replace(emitOptions.commonDirectoryPath(), "");
updatedFileName = emitOptions.outputDirectory() + updatedFileName;
}
return extensionChanger(updatedFileName, false);
} else {
return extensionChanger(emitOptions.sharedOutputFile(), true);
}
};
TypeScriptCompiler.prototype.writeByteOrderMarkForDocument = function (document) {
var printReason = false;
if (document.emitToOwnOutputFile()) {
var result = document.byteOrderMark !== 0 /* None */;
if (printReason) {
TypeScript.Environment.standardOut.WriteLine("Emitting byte order mark because of: " + document.fileName);
}
return result;
} else {
var fileNames = this.fileNames();
var result = false;
for (var i = 0, n = fileNames.length; i < n; i++) {
var document = this.getDocument(fileNames[i]);
if (document.isExternalModule()) {
continue;
}
if (document.byteOrderMark !== 0 /* None */) {
if (printReason) {
TypeScript.Environment.standardOut.WriteLine("Emitting byte order mark because of: " + document.fileName);
result = true;
} else {
return true;
}
}
}
return result;
}
};
TypeScriptCompiler.mapToDTSFileName = function (fileName, wholeFileNameReplaced) {
return TypeScript.getDeclareFilePath(fileName);
};
TypeScriptCompiler.prototype._shouldEmit = function (document) {
return !document.isDeclareFile();
};
TypeScriptCompiler.prototype._shouldEmitDeclarations = function (document) {
if (!this.compilationSettings().generateDeclarationFiles()) {
return false;
}
return this._shouldEmit(document);
};
TypeScriptCompiler.prototype.emitDocumentDeclarationsWorker = function (document, emitOptions, declarationEmitter) {
var sourceUnit = document.sourceUnit();
TypeScript.Debug.assert(this._shouldEmitDeclarations(document));
if (declarationEmitter) {
declarationEmitter.document = document;
} else {
var declareFileName = this.mapOutputFileName(document, emitOptions, TypeScriptCompiler.mapToDTSFileName);
declarationEmitter = new TypeScript.DeclarationEmitter(declareFileName, document, this, emitOptions, this.semanticInfoChain);
}
declarationEmitter.emitDeclarations(sourceUnit);
return declarationEmitter;
};
TypeScriptCompiler.prototype._emitDocumentDeclarations = function (document, emitOptions, onSingleFileEmitComplete, sharedEmitter) {
if (this._shouldEmitDeclarations(document)) {
if (document.emitToOwnOutputFile()) {
var singleEmitter = this.emitDocumentDeclarationsWorker(document, emitOptions);
if (singleEmitter) {
onSingleFileEmitComplete(singleEmitter.getOutputFile());
}
} else {
sharedEmitter = this.emitDocumentDeclarationsWorker(document, emitOptions, sharedEmitter);
}
}
return sharedEmitter;
};
TypeScriptCompiler.prototype.emitAllDeclarations = function (resolvePath) {
var start = new Date().getTime();
var emitOutput = new EmitOutput();
var emitOptions = new TypeScript.EmitOptions(this, resolvePath);
if (emitOptions.diagnostic()) {
emitOutput.emitOutputResult = 2 /* FailedBecauseOfCompilerOptionsErrors */;
return emitOutput;
}
var sharedEmitter = null;
var fileNames = this.fileNames();
for (var i = 0, n = fileNames.length; i < n; i++) {
var fileName = fileNames[i];
var document = this.getDocument(fileNames[i]);
sharedEmitter = this._emitDocumentDeclarations(document, emitOptions, function (file) {
return emitOutput.outputFiles.push(file);
}, sharedEmitter);
}
if (sharedEmitter) {
emitOutput.outputFiles.push(sharedEmitter.getOutputFile());
}
TypeScript.declarationEmitTime += new Date().getTime() - start;
return emitOutput;
};
TypeScriptCompiler.prototype.emitDeclarations = function (fileName, resolvePath) {
fileName = TypeScript.switchToForwardSlashes(fileName);
var emitOutput = new EmitOutput();
var emitOptions = new TypeScript.EmitOptions(this, resolvePath);
if (emitOptions.diagnostic()) {
emitOutput.emitOutputResult = 2 /* FailedBecauseOfCompilerOptionsErrors */;
return emitOutput;
}
var document = this.getDocument(fileName);
if (document.emitToOwnOutputFile()) {
this._emitDocumentDeclarations(document, emitOptions, function (file) {
return emitOutput.outputFiles.push(file);
}, null);
return emitOutput;
} else {
return this.emitAllDeclarations(resolvePath);
}
};
TypeScriptCompiler.prototype.canEmitDeclarations = function (fileName) {
fileName = TypeScript.switchToForwardSlashes(fileName);
var document = this.getDocument(fileName);
return this._shouldEmitDeclarations(document);
};
TypeScriptCompiler.mapToFileNameExtension = function (extension, fileName, wholeFileNameReplaced) {
if (wholeFileNameReplaced) {
return fileName;
} else {
var splitFname = fileName.split(".");
splitFname.pop();
return splitFname.join(".") + extension;
}
};
TypeScriptCompiler.mapToJSFileName = function (fileName, wholeFileNameReplaced) {
return TypeScriptCompiler.mapToFileNameExtension(".js", fileName, wholeFileNameReplaced);
};
TypeScriptCompiler.prototype.emitDocumentWorker = function (document, emitOptions, emitter) {
var sourceUnit = document.sourceUnit();
TypeScript.Debug.assert(this._shouldEmit(document));
var typeScriptFileName = document.fileName;
if (!emitter) {
var javaScriptFileName = this.mapOutputFileName(document, emitOptions, TypeScriptCompiler.mapToJSFileName);
var outFile = new TypeScript.TextWriter(javaScriptFileName, this.writeByteOrderMarkForDocument(document), 0 /* JavaScript */);
emitter = new TypeScript.Emitter(javaScriptFileName, outFile, emitOptions, this.semanticInfoChain);
if (this.compilationSettings().mapSourceFiles()) {
var sourceMapFile = new TypeScript.TextWriter(javaScriptFileName + TypeScript.SourceMapper.MapFileExtension, false, 1 /* SourceMap */);
emitter.createSourceMapper(document, javaScriptFileName, outFile, sourceMapFile, emitOptions.resolvePath);
}
} else if (this.compilationSettings().mapSourceFiles()) {
emitter.setSourceMapperNewSourceFile(document);
}
emitter.setDocument(document);
emitter.emitJavascript(sourceUnit, false);
return emitter;
};
TypeScriptCompiler.prototype._emitDocument = function (document, emitOptions, onSingleFileEmitComplete, sharedEmitter) {
if (this._shouldEmit(document)) {
if (document.emitToOwnOutputFile()) {
var singleEmitter = this.emitDocumentWorker(document, emitOptions);
if (singleEmitter) {
onSingleFileEmitComplete(singleEmitter.getOutputFiles());
}
} else {
sharedEmitter = this.emitDocumentWorker(document, emitOptions, sharedEmitter);
}
}
return sharedEmitter;
};
TypeScriptCompiler.prototype.emitAll = function (resolvePath) {
var start = new Date().getTime();
var emitOutput = new EmitOutput();
var emitOptions = new TypeScript.EmitOptions(this, resolvePath);
if (emitOptions.diagnostic()) {
emitOutput.emitOutputResult = 2 /* FailedBecauseOfCompilerOptionsErrors */;
return emitOutput;
}
var fileNames = this.fileNames();
var sharedEmitter = null;
for (var i = 0, n = fileNames.length; i < n; i++) {
var fileName = fileNames[i];
var document = this.getDocument(fileName);
sharedEmitter = this._emitDocument(document, emitOptions, function (files) {
return emitOutput.outputFiles.push.apply(emitOutput.outputFiles, files);
}, sharedEmitter);
}
if (sharedEmitter) {
emitOutput.outputFiles.push.apply(emitOutput.outputFiles, sharedEmitter.getOutputFiles());
}
TypeScript.emitTime += new Date().getTime() - start;
return emitOutput;
};
TypeScriptCompiler.prototype.emit = function (fileName, resolvePath) {
fileName = TypeScript.switchToForwardSlashes(fileName);
var emitOutput = new EmitOutput();
var emitOptions = new TypeScript.EmitOptions(this, resolvePath);
if (emitOptions.diagnostic()) {
emitOutput.emitOutputResult = 2 /* FailedBecauseOfCompilerOptionsErrors */;
return emitOutput;
}
var document = this.getDocument(fileName);
if (document.emitToOwnOutputFile()) {
this._emitDocument(document, emitOptions, function (files) {
return emitOutput.outputFiles.push.apply(emitOutput.outputFiles, files);
}, null);
return emitOutput;
} else {
return this.emitAll(resolvePath);
}
};
TypeScriptCompiler.prototype.compile = function (resolvePath, continueOnDiagnostics) {
if (typeof continueOnDiagnostics === "undefined") { continueOnDiagnostics = false; }
return new CompilerIterator(this, resolvePath, continueOnDiagnostics);
};
TypeScriptCompiler.prototype.getSyntacticDiagnostics = function (fileName) {
fileName = TypeScript.switchToForwardSlashes(fileName);
return this.getDocument(fileName).diagnostics();
};
TypeScriptCompiler.prototype.getSyntaxTree = function (fileName) {
return this.getDocument(fileName).syntaxTree();
};
TypeScriptCompiler.prototype.getSourceUnit = function (fileName) {
return this.getDocument(fileName).sourceUnit();
};
TypeScriptCompiler.prototype.getSemanticDiagnostics = function (fileName) {
fileName = TypeScript.switchToForwardSlashes(fileName);
var document = this.getDocument(fileName);
var startTime = (new Date()).getTime();
TypeScript.PullTypeResolver.typeCheck(this.compilationSettings(), this.semanticInfoChain, document);
var endTime = (new Date()).getTime();
TypeScript.typeCheckTime += endTime - startTime;
var errors = this.semanticInfoChain.getDiagnostics(fileName);
errors = TypeScript.ArrayUtilities.distinct(errors, TypeScript.Diagnostic.equals);
errors.sort(function (d1, d2) {
if (d1.fileName() < d2.fileName()) {
return -1;
} else if (d1.fileName() > d2.fileName()) {
return 1;
}
if (d1.start() < d2.start()) {
return -1;
} else if (d1.start() > d2.start()) {
return 1;
}
var code1 = TypeScript.diagnosticInformationMap[d1.diagnosticKey()].code;
var code2 = TypeScript.diagnosticInformationMap[d2.diagnosticKey()].code;
if (code1 < code2) {
return -1;
} else if (code1 > code2) {
return 1;
}
return 0;
});
return errors;
};
TypeScriptCompiler.prototype.getCompilerOptionsDiagnostics = function () {
var emitOptions = new TypeScript.EmitOptions(this, null);
var emitDiagnostic = emitOptions.diagnostic();
if (emitDiagnostic) {
return [emitDiagnostic];
}
return TypeScript.sentinelEmptyArray;
};
TypeScriptCompiler.prototype.resolveAllFiles = function () {
var fileNames = this.fileNames();
for (var i = 0, n = fileNames.length; i < n; i++) {
this.getSemanticDiagnostics(fileNames[i]);
}
};
TypeScriptCompiler.prototype.getSymbolOfDeclaration = function (decl) {
if (!decl) {
return null;
}
var resolver = this.semanticInfoChain.getResolver();
var ast = this.semanticInfoChain.getASTForDecl(decl);
if (!ast) {
return null;
}
var enclosingDecl = resolver.getEnclosingDecl(decl);
if (ast.kind() === 139 /* GetAccessor */ || ast.kind() === 140 /* SetAccessor */) {
return this.getSymbolOfDeclaration(enclosingDecl);
}
return resolver.resolveAST(ast, false, new TypeScript.PullTypeResolutionContext(resolver));
};
TypeScriptCompiler.prototype.extractResolutionContextFromAST = function (resolver, ast, document, propagateContextualTypes) {
var scriptName = document.fileName;
var enclosingDecl = null;
var enclosingDeclAST = null;
var inContextuallyTypedAssignment = false;
var inWithBlock = false;
var resolutionContext = new TypeScript.PullTypeResolutionContext(resolver);
if (!ast) {
return null;
}
var path = this.getASTPath(ast);
for (var i = 0, n = path.length; i < n; i++) {
var current = path[i];
switch (current.kind()) {
case 222 /* FunctionExpression */:
case 219 /* SimpleArrowFunctionExpression */:
case 218 /* ParenthesizedArrowFunctionExpression */:
if (propagateContextualTypes) {
resolver.resolveAST(current, true, resolutionContext);
}
break;
case 136 /* MemberVariableDeclaration */:
var memberVariable = current;
inContextuallyTypedAssignment = memberVariable.variableDeclarator.typeAnnotation !== null;
this.extractResolutionContextForVariable(inContextuallyTypedAssignment, propagateContextualTypes, resolver, resolutionContext, enclosingDecl, memberVariable, memberVariable.variableDeclarator.equalsValueClause);
break;
case 225 /* VariableDeclarator */:
var variableDeclarator = current;
inContextuallyTypedAssignment = variableDeclarator.typeAnnotation !== null;
this.extractResolutionContextForVariable(inContextuallyTypedAssignment, propagateContextualTypes, resolver, resolutionContext, enclosingDecl, variableDeclarator, variableDeclarator.equalsValueClause);
break;
case 213 /* InvocationExpression */:
case 216 /* ObjectCreationExpression */:
if (propagateContextualTypes) {
var isNew = current.kind() === 216 /* ObjectCreationExpression */;
var callExpression = current;
var contextualType = null;
if ((i + 2 < n) && callExpression.argumentList === path[i + 1] && callExpression.argumentList.arguments === path[i + 2]) {
var callResolutionResults = new TypeScript.PullAdditionalCallResolutionData();
if (isNew) {
resolver.resolveObjectCreationExpression(callExpression, resolutionContext, callResolutionResults);
} else {
resolver.resolveInvocationExpression(callExpression, resolutionContext, callResolutionResults);
}
if (callResolutionResults.actualParametersContextTypeSymbols) {
var argExpression = path[i + 3];
if (argExpression) {
for (var j = 0, m = callExpression.argumentList.arguments.nonSeparatorCount(); j < m; j++) {
if (callExpression.argumentList.arguments.nonSeparatorAt(j) === argExpression) {
var callContextualType = callResolutionResults.actualParametersContextTypeSymbols[j];
if (callContextualType) {
contextualType = callContextualType;
break;
}
}
}
}
}
} else {
if (isNew) {
resolver.resolveObjectCreationExpression(callExpression, resolutionContext);
} else {
resolver.resolveInvocationExpression(callExpression, resolutionContext);
}
}
resolutionContext.pushNewContextualType(contextualType);
}
break;
case 214 /* ArrayLiteralExpression */:
if (propagateContextualTypes) {
var contextualType = null;
var currentContextualType = resolutionContext.getContextualType();
if (currentContextualType && currentContextualType.isArrayNamedTypeReference()) {
contextualType = currentContextualType.getElementType();
}
resolutionContext.pushNewContextualType(contextualType);
}
break;
case 215 /* ObjectLiteralExpression */:
if (propagateContextualTypes) {
var objectLiteralExpression = current;
var objectLiteralResolutionContext = new TypeScript.PullAdditionalObjectLiteralResolutionData();
resolver.resolveObjectLiteralExpression(objectLiteralExpression, inContextuallyTypedAssignment, resolutionContext, objectLiteralResolutionContext);
var memeberAST = (path[i + 1] && path[i + 1].kind() === 2 /* SeparatedList */) ? path[i + 2] : path[i + 1];
if (memeberAST) {
var contextualType = null;
var memberDecls = objectLiteralExpression.propertyAssignments;
if (memberDecls && objectLiteralResolutionContext.membersContextTypeSymbols) {
for (var j = 0, m = memberDecls.nonSeparatorCount(); j < m; j++) {
if (memberDecls.nonSeparatorAt(j) === memeberAST) {
var memberContextualType = objectLiteralResolutionContext.membersContextTypeSymbols[j];
if (memberContextualType) {
contextualType = memberContextualType;
break;
}
}
}
}
resolutionContext.pushNewContextualType(contextualType);
}
}
break;
case 174 /* AssignmentExpression */:
if (propagateContextualTypes) {
var assignmentExpression = current;
var contextualType = null;
if (path[i + 1] && path[i + 1] === assignmentExpression.right) {
var leftType = resolver.resolveAST(assignmentExpression.left, inContextuallyTypedAssignment, resolutionContext).type;
if (leftType) {
inContextuallyTypedAssignment = true;
contextualType = leftType;
}
}
resolutionContext.pushNewContextualType(contextualType);
}
break;
case 220 /* CastExpression */:
var castExpression = current;
if (!(i + 1 < n && path[i + 1] === castExpression.type)) {
if (propagateContextualTypes) {
var contextualType = null;
var typeSymbol = resolver.resolveAST(castExpression, inContextuallyTypedAssignment, resolutionContext).type;
if (typeSymbol) {
inContextuallyTypedAssignment = true;
contextualType = typeSymbol;
}
resolutionContext.pushNewContextualType(contextualType);
}
}
break;
case 150 /* ReturnStatement */:
if (propagateContextualTypes) {
var returnStatement = current;
var contextualType = null;
if (enclosingDecl && (enclosingDecl.kind & 1032192 /* SomeFunction */)) {
var typeAnnotation = TypeScript.ASTHelpers.getType(enclosingDeclAST);
if (typeAnnotation) {
var returnTypeSymbol = resolver.resolveTypeReference(typeAnnotation, resolutionContext);
if (returnTypeSymbol) {
inContextuallyTypedAssignment = true;
contextualType = returnTypeSymbol;
}
} else {
var currentContextualType = resolutionContext.getContextualType();
if (currentContextualType && currentContextualType.isFunction()) {
var contextualSignatures = currentContextualType.kind == 33554432 /* ConstructorType */ ? currentContextualType.getConstructSignatures() : currentContextualType.getCallSignatures();
var currentContextualTypeSignatureSymbol = contextualSignatures[0];
var currentContextualTypeReturnTypeSymbol = currentContextualTypeSignatureSymbol.returnType;
if (currentContextualTypeReturnTypeSymbol) {
inContextuallyTypedAssignment = true;
contextualType = currentContextualTypeReturnTypeSymbol;
}
}
}
}
resolutionContext.pushNewContextualType(contextualType);
}
break;
case 122 /* ObjectType */:
if (propagateContextualTypes && TypeScript.isTypesOnlyLocation(current)) {
resolver.resolveAST(current, false, resolutionContext);
}
break;
case 163 /* WithStatement */:
inWithBlock = true;
break;
case 146 /* Block */:
inContextuallyTypedAssignment = false;
break;
}
var decl = this.semanticInfoChain.getDeclForAST(current);
if (decl) {
enclosingDecl = decl;
enclosingDeclAST = current;
}
}
if (ast && ast.parent && ast.kind() === 11 /* IdentifierName */) {
if (ast.parent.kind() === 212 /* MemberAccessExpression */) {
if (ast.parent.name === ast) {
ast = ast.parent;
}
} else if (ast.parent.kind() === 121 /* QualifiedName */) {
if (ast.parent.right === ast) {
ast = ast.parent;
}
}
}
return {
ast: ast,
enclosingDecl: enclosingDecl,
resolutionContext: resolutionContext,
inContextuallyTypedAssignment: inContextuallyTypedAssignment,
inWithBlock: inWithBlock
};
};
TypeScriptCompiler.prototype.extractResolutionContextForVariable = function (inContextuallyTypedAssignment, propagateContextualTypes, resolver, resolutionContext, enclosingDecl, assigningAST, init) {
if (inContextuallyTypedAssignment) {
if (propagateContextualTypes) {
resolver.resolveAST(assigningAST, false, resolutionContext);
var varSymbol = this.semanticInfoChain.getSymbolForAST(assigningAST);
var contextualType = null;
if (varSymbol && inContextuallyTypedAssignment) {
contextualType = varSymbol.type;
}
resolutionContext.pushNewContextualType(contextualType);
if (init) {
resolver.resolveAST(init, inContextuallyTypedAssignment, resolutionContext);
}
}
}
};
TypeScriptCompiler.prototype.getASTPath = function (ast) {
var result = [];
while (ast) {
result.unshift(ast);
ast = ast.parent;
}
return result;
};
TypeScriptCompiler.prototype.pullGetSymbolInformationFromAST = function (ast, document) {
var resolver = this.semanticInfoChain.getResolver();
var context = this.extractResolutionContextFromAST(resolver, ast, document, true);
if (!context || context.inWithBlock) {
return null;
}
ast = context.ast;
var symbol = resolver.resolveAST(ast, context.inContextuallyTypedAssignment, context.resolutionContext);
if (!symbol) {
TypeScript.Debug.assert(ast.kind() === 120 /* SourceUnit */, "No symbol was found for ast and ast was not source unit. Ast Kind: " + TypeScript.SyntaxKind[ast.kind()]);
return null;
}
if (symbol.isTypeReference()) {
symbol = symbol.getReferencedTypeSymbol();
}
var aliasSymbol = this.semanticInfoChain.getAliasSymbolForAST(ast);
return {
symbol: symbol,
aliasSymbol: aliasSymbol,
ast: ast,
enclosingScopeSymbol: this.getSymbolOfDeclaration(context.enclosingDecl)
};
};
TypeScriptCompiler.prototype.pullGetCallInformationFromAST = function (ast, document) {
if (ast.kind() !== 213 /* InvocationExpression */ && ast.kind() !== 216 /* ObjectCreationExpression */) {
return null;
}
var isNew = ast.kind() === 216 /* ObjectCreationExpression */;
var resolver = this.semanticInfoChain.getResolver();
var context = this.extractResolutionContextFromAST(resolver, ast, document, true);
if (!context || context.inWithBlock) {
return null;
}
var callResolutionResults = new TypeScript.PullAdditionalCallResolutionData();
if (isNew) {
resolver.resolveObjectCreationExpression(ast, context.resolutionContext, callResolutionResults);
} else {
resolver.resolveInvocationExpression(ast, context.resolutionContext, callResolutionResults);
}
return {
targetSymbol: callResolutionResults.targetSymbol,
resolvedSignatures: callResolutionResults.resolvedSignatures,
candidateSignature: callResolutionResults.candidateSignature,
ast: ast,
enclosingScopeSymbol: this.getSymbolOfDeclaration(context.enclosingDecl),
isConstructorCall: isNew
};
};
TypeScriptCompiler.prototype.pullGetVisibleMemberSymbolsFromAST = function (ast, document) {
var resolver = this.semanticInfoChain.getResolver();
var context = this.extractResolutionContextFromAST(resolver, ast, document, true);
if (!context || context.inWithBlock) {
return null;
}
var symbols = resolver.getVisibleMembersFromExpression(ast, context.enclosingDecl, context.resolutionContext);
if (!symbols) {
return null;
}
return {
symbols: symbols,
enclosingScopeSymbol: this.getSymbolOfDeclaration(context.enclosingDecl)
};
};
TypeScriptCompiler.prototype.pullGetVisibleDeclsFromAST = function (ast, document) {
var resolver = this.semanticInfoChain.getResolver();
var context = this.extractResolutionContextFromAST(resolver, ast, document, false);
if (!context || context.inWithBlock) {
return null;
}
return resolver.getVisibleDecls(context.enclosingDecl);
};
TypeScriptCompiler.prototype.pullGetContextualMembersFromAST = function (ast, document) {
if (ast.kind() !== 215 /* ObjectLiteralExpression */) {
return null;
}
var resolver = this.semanticInfoChain.getResolver();
var context = this.extractResolutionContextFromAST(resolver, ast, document, true);
if (!context || context.inWithBlock) {
return null;
}
var members = resolver.getVisibleContextSymbols(context.enclosingDecl, context.resolutionContext);
return {
symbols: members,
enclosingScopeSymbol: this.getSymbolOfDeclaration(context.enclosingDecl)
};
};
TypeScriptCompiler.prototype.pullGetDeclInformation = function (decl, ast, document) {
var resolver = this.semanticInfoChain.getResolver();
var context = this.extractResolutionContextFromAST(resolver, ast, document, true);
if (!context || context.inWithBlock) {
return null;
}
var astForDecl = decl.ast();
if (!astForDecl) {
return null;
}
var astForDeclContext = this.extractResolutionContextFromAST(resolver, astForDecl, this.getDocument(astForDecl.fileName()), true);
if (!astForDeclContext) {
return null;
}
var symbol = decl.getSymbol();
resolver.resolveDeclaredSymbol(symbol, context.resolutionContext);
symbol.setUnresolved();
return {
symbol: symbol,
aliasSymbol: null,
ast: ast,
enclosingScopeSymbol: this.getSymbolOfDeclaration(context.enclosingDecl)
};
};
TypeScriptCompiler.prototype.topLevelDeclaration = function (fileName) {
return this.semanticInfoChain.topLevelDecl(fileName);
};
TypeScriptCompiler.prototype.getDeclForAST = function (ast) {
return this.semanticInfoChain.getDeclForAST(ast);
};
TypeScriptCompiler.prototype.fileNames = function () {
return this.semanticInfoChain.fileNames();
};
TypeScriptCompiler.prototype.topLevelDecl = function (fileName) {
return this.semanticInfoChain.topLevelDecl(fileName);
};
TypeScriptCompiler.getLocationText = function (location) {
return location.fileName() + "(" + (location.line() + 1) + "," + (location.character() + 1) + ")";
};
TypeScriptCompiler.getFullDiagnosticText = function (diagnostic) {
var result = "";
if (diagnostic.fileName()) {
result += this.getLocationText(diagnostic) + ": ";
}
result += diagnostic.message();
var additionalLocations = diagnostic.additionalLocations();
if (additionalLocations.length > 0) {
result += " " + TypeScript.getLocalizedText(TypeScript.DiagnosticCode.Additional_locations, null) + TypeScript.Environment.newLine;
for (var i = 0, n = additionalLocations.length; i < n; i++) {
result += "\t" + this.getLocationText(additionalLocations[i]) + TypeScript.Environment.newLine;
}
} else {
result += TypeScript.Environment.newLine;
}
return result;
};
return TypeScriptCompiler;
})();
TypeScript.TypeScriptCompiler = TypeScriptCompiler;
var CompilerPhase;
(function (CompilerPhase) {
CompilerPhase[CompilerPhase["Syntax"] = 0] = "Syntax";
CompilerPhase[CompilerPhase["Semantics"] = 1] = "Semantics";
CompilerPhase[CompilerPhase["EmitOptionsValidation"] = 2] = "EmitOptionsValidation";
CompilerPhase[CompilerPhase["Emit"] = 3] = "Emit";
CompilerPhase[CompilerPhase["DeclarationEmit"] = 4] = "DeclarationEmit";
})(CompilerPhase || (CompilerPhase = {}));
var CompilerIterator = (function () {
function CompilerIterator(compiler, resolvePath, continueOnDiagnostics, startingPhase) {
if (typeof startingPhase === "undefined") { startingPhase = 0 /* Syntax */; }
this.compiler = compiler;
this.resolvePath = resolvePath;
this.continueOnDiagnostics = continueOnDiagnostics;
this.index = -1;
this.fileNames = null;
this._current = null;
this._emitOptions = null;
this._sharedEmitter = null;
this._sharedDeclarationEmitter = null;
this.hadSyntacticDiagnostics = false;
this.hadSemanticDiagnostics = false;
this.hadEmitDiagnostics = false;
this.fileNames = compiler.fileNames();
this.compilerPhase = startingPhase;
}
CompilerIterator.prototype.current = function () {
return this._current;
};
CompilerIterator.prototype.moveNext = function () {
this._current = null;
while (this.moveNextInternal()) {
if (this._current) {
return true;
}
}
return false;
};
CompilerIterator.prototype.moveNextInternal = function () {
this.index++;
while (this.shouldMoveToNextPhase()) {
this.index = 0;
this.compilerPhase++;
}
if (this.compilerPhase > 4 /* DeclarationEmit */) {
return false;
}
switch (this.compilerPhase) {
case 0 /* Syntax */:
return this.moveNextSyntaxPhase();
case 1 /* Semantics */:
return this.moveNextSemanticsPhase();
case 2 /* EmitOptionsValidation */:
return this.moveNextEmitOptionsValidationPhase();
case 3 /* Emit */:
return this.moveNextEmitPhase();
case 4 /* DeclarationEmit */:
return this.moveNextDeclarationEmitPhase();
}
};
CompilerIterator.prototype.shouldMoveToNextPhase = function () {
switch (this.compilerPhase) {
case 2 /* EmitOptionsValidation */:
return this.index === 1;
case 0 /* Syntax */:
case 1 /* Semantics */:
return this.index === this.fileNames.length;
case 3 /* Emit */:
case 4 /* DeclarationEmit */:
return this.index === (this.fileNames.length + 1);
}
return false;
};
CompilerIterator.prototype.moveNextSyntaxPhase = function () {
TypeScript.Debug.assert(this.index >= 0 && this.index < this.fileNames.length);
var fileName = this.fileNames[this.index];
var diagnostics = this.compiler.getSyntacticDiagnostics(fileName);
if (diagnostics.length) {
if (!this.continueOnDiagnostics) {
this.hadSyntacticDiagnostics = true;
}
this._current = CompileResult.fromDiagnostics(diagnostics);
}
return true;
};
CompilerIterator.prototype.moveNextSemanticsPhase = function () {
if (this.hadSyntacticDiagnostics) {
return false;
}
TypeScript.Debug.assert(this.index >= 0 && this.index < this.fileNames.length);
var fileName = this.fileNames[this.index];
var diagnostics = this.compiler.getSemanticDiagnostics(fileName);
if (diagnostics.length) {
if (!this.continueOnDiagnostics) {
this.hadSemanticDiagnostics = true;
}
this._current = CompileResult.fromDiagnostics(diagnostics);
}
return true;
};
CompilerIterator.prototype.moveNextEmitOptionsValidationPhase = function () {
TypeScript.Debug.assert(!this.hadSyntacticDiagnostics);
if (!this._emitOptions) {
this._emitOptions = new TypeScript.EmitOptions(this.compiler, this.resolvePath);
}
if (this._emitOptions.diagnostic()) {
if (!this.continueOnDiagnostics) {
this.hadEmitDiagnostics = true;
}
this._current = CompileResult.fromDiagnostics([this._emitOptions.diagnostic()]);
}
return true;
};
CompilerIterator.prototype.moveNextEmitPhase = function () {
var _this = this;
TypeScript.Debug.assert(!this.hadSyntacticDiagnostics);
TypeScript.Debug.assert(this._emitOptions);
if (this.hadEmitDiagnostics) {
return false;
}
TypeScript.Debug.assert(this.index >= 0 && this.index <= this.fileNames.length);
if (this.index < this.fileNames.length) {
var fileName = this.fileNames[this.index];
var document = this.compiler.getDocument(fileName);
this._sharedEmitter = this.compiler._emitDocument(document, this._emitOptions, function (outputFiles) {
_this._current = CompileResult.fromOutputFiles(outputFiles);
}, this._sharedEmitter);
return true;
}
if (this.index === this.fileNames.length && this._sharedEmitter) {
this._current = CompileResult.fromOutputFiles(this._sharedEmitter.getOutputFiles());
}
return true;
};
CompilerIterator.prototype.moveNextDeclarationEmitPhase = function () {
var _this = this;
TypeScript.Debug.assert(!this.hadSyntacticDiagnostics);
TypeScript.Debug.assert(!this.hadEmitDiagnostics);
if (this.hadSemanticDiagnostics) {
return false;
}
if (!this.compiler.compilationSettings().generateDeclarationFiles()) {
return false;
}
TypeScript.Debug.assert(this.index >= 0 && this.index <= this.fileNames.length);
if (this.index < this.fileNames.length) {
var fileName = this.fileNames[this.index];
var document = this.compiler.getDocument(fileName);
this._sharedDeclarationEmitter = this.compiler._emitDocumentDeclarations(document, this._emitOptions, function (file) {
_this._current = CompileResult.fromOutputFiles([file]);
}, this._sharedDeclarationEmitter);
return true;
}
if (this.index === this.fileNames.length && this._sharedDeclarationEmitter) {
this._current = CompileResult.fromOutputFiles([this._sharedDeclarationEmitter.getOutputFile()]);
}
return true;
};
return CompilerIterator;
})();
function compareDataObjects(dst, src) {
for (var e in dst) {
if (typeof dst[e] === "object") {
if (!compareDataObjects(dst[e], src[e]))
return false;
} else if (typeof dst[e] !== "function") {
if (dst[e] !== src[e])
return false;
}
}
return true;
}
TypeScript.compareDataObjects = compareDataObjects;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (GenerativeTypeClassification) {
GenerativeTypeClassification[GenerativeTypeClassification["Unknown"] = 0] = "Unknown";
GenerativeTypeClassification[GenerativeTypeClassification["Open"] = 1] = "Open";
GenerativeTypeClassification[GenerativeTypeClassification["Closed"] = 2] = "Closed";
GenerativeTypeClassification[GenerativeTypeClassification["InfinitelyExpanding"] = 3] = "InfinitelyExpanding";
})(TypeScript.GenerativeTypeClassification || (TypeScript.GenerativeTypeClassification = {}));
var GenerativeTypeClassification = TypeScript.GenerativeTypeClassification;
var PullTypeReferenceSymbol = (function (_super) {
__extends(PullTypeReferenceSymbol, _super);
function PullTypeReferenceSymbol(referencedTypeSymbol) {
_super.call(this, referencedTypeSymbol.name, referencedTypeSymbol.kind);
this.referencedTypeSymbol = referencedTypeSymbol;
this.isResolved = true;
TypeScript.Debug.assert(referencedTypeSymbol !== null, "Type root symbol may not be null");
this.setRootSymbol(referencedTypeSymbol);
this.typeReference = this;
}
PullTypeReferenceSymbol.createTypeReference = function (type) {
if (type.isTypeReference()) {
return type;
}
var typeReference = type.typeReference;
if (!typeReference) {
typeReference = new PullTypeReferenceSymbol(type);
type.typeReference = typeReference;
}
return typeReference;
};
PullTypeReferenceSymbol.prototype.isTypeReference = function () {
return true;
};
PullTypeReferenceSymbol.prototype.setResolved = function () {
};
PullTypeReferenceSymbol.prototype.setUnresolved = function () {
};
PullTypeReferenceSymbol.prototype.invalidate = function () {
};
PullTypeReferenceSymbol.prototype.ensureReferencedTypeIsResolved = function () {
this._getResolver().resolveDeclaredSymbol(this.referencedTypeSymbol);
};
PullTypeReferenceSymbol.prototype.getReferencedTypeSymbol = function () {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol;
};
PullTypeReferenceSymbol.prototype._getResolver = function () {
return this.referencedTypeSymbol._getResolver();
};
PullTypeReferenceSymbol.prototype.hasMembers = function () {
return this.referencedTypeSymbol.hasMembers();
};
PullTypeReferenceSymbol.prototype.setAssociatedContainerType = function (type) {
TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": setAssociatedContainerType");
};
PullTypeReferenceSymbol.prototype.getAssociatedContainerType = function () {
return this.referencedTypeSymbol.getAssociatedContainerType();
};
PullTypeReferenceSymbol.prototype.getFunctionSymbol = function () {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.getFunctionSymbol();
};
PullTypeReferenceSymbol.prototype.setFunctionSymbol = function (symbol) {
TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": setFunctionSymbol");
};
PullTypeReferenceSymbol.prototype.addContainedNonMember = function (nonMember) {
TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addContainedNonMember");
};
PullTypeReferenceSymbol.prototype.findContainedNonMemberContainer = function (containerName, kind) {
if (typeof kind === "undefined") { kind = 0 /* None */; }
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.findContainedNonMemberContainer(containerName, kind);
};
PullTypeReferenceSymbol.prototype.addMember = function (memberSymbol) {
TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addMember");
};
PullTypeReferenceSymbol.prototype.addEnclosedMemberType = function (enclosedType) {
TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addEnclosedMemberType");
};
PullTypeReferenceSymbol.prototype.addEnclosedMemberContainer = function (enclosedContainer) {
TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addEnclosedMemberContainer");
};
PullTypeReferenceSymbol.prototype.addEnclosedNonMember = function (enclosedNonMember) {
TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addEnclosedNonMember");
};
PullTypeReferenceSymbol.prototype.addEnclosedNonMemberType = function (enclosedNonMemberType) {
TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addEnclosedNonMemberType");
};
PullTypeReferenceSymbol.prototype.addEnclosedNonMemberContainer = function (enclosedNonMemberContainer) {
TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addEnclosedNonMemberContainer");
};
PullTypeReferenceSymbol.prototype.addTypeParameter = function (typeParameter) {
TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addTypeParameter");
};
PullTypeReferenceSymbol.prototype.addConstructorTypeParameter = function (typeParameter) {
TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addConstructorTypeParameter");
};
PullTypeReferenceSymbol.prototype.findContainedNonMember = function (name) {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.findContainedNonMember(name);
};
PullTypeReferenceSymbol.prototype.findContainedNonMemberType = function (typeName, kind) {
if (typeof kind === "undefined") { kind = 0 /* None */; }
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.findContainedNonMemberType(typeName, kind);
};
PullTypeReferenceSymbol.prototype.getMembers = function () {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.getMembers();
};
PullTypeReferenceSymbol.prototype.setHasDefaultConstructor = function (hasOne) {
if (typeof hasOne === "undefined") { hasOne = true; }
TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ":setHasDefaultConstructor");
};
PullTypeReferenceSymbol.prototype.getHasDefaultConstructor = function () {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.getHasDefaultConstructor();
};
PullTypeReferenceSymbol.prototype.getConstructorMethod = function () {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.getConstructorMethod();
};
PullTypeReferenceSymbol.prototype.setConstructorMethod = function (constructorMethod) {
TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": setConstructorMethod");
};
PullTypeReferenceSymbol.prototype.getTypeParameters = function () {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.getTypeParameters();
};
PullTypeReferenceSymbol.prototype.isGeneric = function () {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.isGeneric();
};
PullTypeReferenceSymbol.prototype.addSpecialization = function (specializedVersionOfThisType, substitutingTypes) {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.addSpecialization(specializedVersionOfThisType, substitutingTypes);
};
PullTypeReferenceSymbol.prototype.getSpecialization = function (substitutingTypes) {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.getSpecialization(substitutingTypes);
};
PullTypeReferenceSymbol.prototype.getKnownSpecializations = function () {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.getKnownSpecializations();
};
PullTypeReferenceSymbol.prototype.getTypeArguments = function () {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.getTypeArguments();
};
PullTypeReferenceSymbol.prototype.getTypeArgumentsOrTypeParameters = function () {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.getTypeArgumentsOrTypeParameters();
};
PullTypeReferenceSymbol.prototype.appendCallSignature = function (callSignature) {
TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": appendCallSignature");
};
PullTypeReferenceSymbol.prototype.insertCallSignatureAtIndex = function (callSignature, index) {
TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": insertCallSignatureAtIndex");
};
PullTypeReferenceSymbol.prototype.appendConstructSignature = function (callSignature) {
TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": appendConstructSignature");
};
PullTypeReferenceSymbol.prototype.insertConstructSignatureAtIndex = function (callSignature, index) {
TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": insertConstructSignatureAtIndex");
};
PullTypeReferenceSymbol.prototype.addIndexSignature = function (indexSignature) {
TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addIndexSignature");
};
PullTypeReferenceSymbol.prototype.hasOwnCallSignatures = function () {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.hasOwnCallSignatures();
};
PullTypeReferenceSymbol.prototype.getCallSignatures = function () {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.getCallSignatures();
};
PullTypeReferenceSymbol.prototype.hasOwnConstructSignatures = function () {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.hasOwnConstructSignatures();
};
PullTypeReferenceSymbol.prototype.getConstructSignatures = function () {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.getConstructSignatures();
};
PullTypeReferenceSymbol.prototype.hasOwnIndexSignatures = function () {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.hasOwnIndexSignatures();
};
PullTypeReferenceSymbol.prototype.getIndexSignatures = function () {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.getIndexSignatures();
};
PullTypeReferenceSymbol.prototype.addImplementedType = function (implementedType) {
this.referencedTypeSymbol.addImplementedType(implementedType);
};
PullTypeReferenceSymbol.prototype.getImplementedTypes = function () {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.getImplementedTypes();
};
PullTypeReferenceSymbol.prototype.addExtendedType = function (extendedType) {
this.referencedTypeSymbol.addExtendedType(extendedType);
};
PullTypeReferenceSymbol.prototype.getExtendedTypes = function () {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.getExtendedTypes();
};
PullTypeReferenceSymbol.prototype.addTypeThatExtendsThisType = function (type) {
this.referencedTypeSymbol.addTypeThatExtendsThisType(type);
};
PullTypeReferenceSymbol.prototype.getTypesThatExtendThisType = function () {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.getTypesThatExtendThisType();
};
PullTypeReferenceSymbol.prototype.addTypeThatExplicitlyImplementsThisType = function (type) {
this.referencedTypeSymbol.addTypeThatExplicitlyImplementsThisType(type);
};
PullTypeReferenceSymbol.prototype.getTypesThatExplicitlyImplementThisType = function () {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.getTypesThatExplicitlyImplementThisType();
};
PullTypeReferenceSymbol.prototype.isValidBaseKind = function (baseType, isExtendedType) {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.isValidBaseKind(baseType, isExtendedType);
};
PullTypeReferenceSymbol.prototype.findMember = function (name, lookInParent) {
if (typeof lookInParent === "undefined") { lookInParent = true; }
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.findMember(name, lookInParent);
};
PullTypeReferenceSymbol.prototype.findNestedType = function (name, kind) {
if (typeof kind === "undefined") { kind = 0 /* None */; }
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.findNestedType(name, kind);
};
PullTypeReferenceSymbol.prototype.findNestedContainer = function (name, kind) {
if (typeof kind === "undefined") { kind = 0 /* None */; }
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.findNestedContainer(name, kind);
};
PullTypeReferenceSymbol.prototype.getAllMembers = function (searchDeclKind, memberVisiblity) {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.getAllMembers(searchDeclKind, memberVisiblity);
};
PullTypeReferenceSymbol.prototype.findTypeParameter = function (name) {
this.ensureReferencedTypeIsResolved();
return this.referencedTypeSymbol.findTypeParameter(name);
};
PullTypeReferenceSymbol.prototype.hasOnlyOverloadCallSignatures = function () {
return this.referencedTypeSymbol.hasOnlyOverloadCallSignatures();
};
return PullTypeReferenceSymbol;
})(TypeScript.PullTypeSymbol);
TypeScript.PullTypeReferenceSymbol = PullTypeReferenceSymbol;
TypeScript.nSpecializationsCreated = 0;
TypeScript.nSpecializedSignaturesCreated = 0;
TypeScript.nSpecializedTypeParameterCreated = 0;
var PullInstantiatedTypeReferenceSymbol = (function (_super) {
__extends(PullInstantiatedTypeReferenceSymbol, _super);
function PullInstantiatedTypeReferenceSymbol(referencedTypeSymbol, _typeParameterArgumentMap, isInstanceReferenceType) {
_super.call(this, referencedTypeSymbol);
this.referencedTypeSymbol = referencedTypeSymbol;
this._typeParameterArgumentMap = _typeParameterArgumentMap;
this.isInstanceReferenceType = isInstanceReferenceType;
this._instantiatedMembers = null;
this._allInstantiatedMemberNameCache = null;
this._instantiatedMemberNameCache = TypeScript.createIntrinsicsObject();
this._instantiatedCallSignatures = null;
this._instantiatedConstructSignatures = null;
this._instantiatedIndexSignatures = null;
this._typeArgumentReferences = undefined;
this._instantiatedConstructorMethod = null;
this._instantiatedAssociatedContainerType = null;
this._isArray = undefined;
this._generativeTypeClassification = [];
TypeScript.nSpecializationsCreated++;
}
PullInstantiatedTypeReferenceSymbol.prototype.getIsSpecialized = function () {
return !this.isInstanceReferenceType;
};
PullInstantiatedTypeReferenceSymbol.prototype.getGenerativeTypeClassification = function (enclosingType) {
if (!this.isNamedTypeSymbol()) {
return 0 /* Unknown */;
}
var generativeTypeClassification = this._generativeTypeClassification[enclosingType.pullSymbolID] || 0 /* Unknown */;
if (generativeTypeClassification === 0 /* Unknown */) {
var typeParameters = enclosingType.getTypeParameters();
var enclosingTypeParameterMap = [];
for (var i = 0; i < typeParameters.length; i++) {
enclosingTypeParameterMap[typeParameters[i].pullSymbolID] = typeParameters[i];
}
var typeArguments = this.getTypeArguments();
for (var i = 0; i < typeArguments.length; i++) {
if (typeArguments[i].wrapsSomeTypeParameter(enclosingTypeParameterMap, true)) {
generativeTypeClassification = 1 /* Open */;
break;
}
}
if (generativeTypeClassification === 1 /* Open */) {
if (this.wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference(enclosingType)) {
generativeTypeClassification = 3 /* InfinitelyExpanding */;
}
} else {
generativeTypeClassification = 2 /* Closed */;
}
this._generativeTypeClassification[enclosingType.pullSymbolID] = generativeTypeClassification;
}
return generativeTypeClassification;
};
PullInstantiatedTypeReferenceSymbol.prototype.isArrayNamedTypeReference = function () {
if (this._isArray === undefined) {
this._isArray = this.getRootSymbol().isArrayNamedTypeReference() || (this.getRootSymbol() === this._getResolver().getArrayNamedType());
}
return this._isArray;
};
PullInstantiatedTypeReferenceSymbol.prototype.getElementType = function () {
if (!this.isArrayNamedTypeReference()) {
return null;
}
var typeArguments = this.getTypeArguments();
return typeArguments ? typeArguments[0] : null;
};
PullInstantiatedTypeReferenceSymbol.prototype.getReferencedTypeSymbol = function () {
this.ensureReferencedTypeIsResolved();
if (this.getIsSpecialized()) {
return this;
}
return this.referencedTypeSymbol;
};
PullInstantiatedTypeReferenceSymbol.create = function (resolver, type, typeParameterArgumentMap) {
TypeScript.Debug.assert(resolver);
var mutableTypeParameterMap = new TypeScript.PullInstantiationHelpers.MutableTypeArgumentMap(typeParameterArgumentMap);
TypeScript.PullInstantiationHelpers.instantiateTypeArgument(resolver, type, mutableTypeParameterMap);
var rootType = type.getRootSymbol();
var instantiation = rootType.getSpecialization(mutableTypeParameterMap.typeParameterArgumentMap);
if (instantiation) {
return instantiation;
}
TypeScript.PullInstantiationHelpers.cleanUpTypeArgumentMap(type, mutableTypeParameterMap);
typeParameterArgumentMap = mutableTypeParameterMap.typeParameterArgumentMap;
var isInstanceReferenceType = (type.kind & 8216 /* SomeInstantiatableType */) != 0;
var resolvedTypeParameterArgumentMap = typeParameterArgumentMap;
if (isInstanceReferenceType) {
var typeParameters = rootType.getTypeParameters();
for (var i = 0; i < typeParameters.length; i++) {
if (!TypeScript.PullHelpers.typeSymbolsAreIdentical(typeParameters[i], typeParameterArgumentMap[typeParameters[i].pullSymbolID])) {
isInstanceReferenceType = false;
break;
}
}
if (isInstanceReferenceType) {
typeParameterArgumentMap = [];
}
}
instantiation = new PullInstantiatedTypeReferenceSymbol(rootType, typeParameterArgumentMap, isInstanceReferenceType);
rootType.addSpecialization(instantiation, resolvedTypeParameterArgumentMap);
return instantiation;
};
PullInstantiatedTypeReferenceSymbol.prototype.isGeneric = function () {
return this.getRootSymbol().isGeneric();
};
PullInstantiatedTypeReferenceSymbol.prototype.getTypeParameterArgumentMap = function () {
return this._typeParameterArgumentMap;
};
PullInstantiatedTypeReferenceSymbol.prototype.getTypeArguments = function () {
if (this.isInstanceReferenceType) {
return this.getTypeParameters();
}
if (this._typeArgumentReferences === undefined) {
var typeParameters = this.referencedTypeSymbol.getTypeParameters();
if (typeParameters.length) {
var typeArgument = null;
var typeArguments = [];
for (var i = 0; i < typeParameters.length; i++) {
typeArgument = this._typeParameterArgumentMap[typeParameters[i].pullSymbolID];
if (!typeArgument) {
TypeScript.Debug.fail("type argument count mismatch");
}
if (typeArgument) {
typeArguments[typeArguments.length] = typeArgument;
}
}
this._typeArgumentReferences = typeArguments;
} else {
this._typeArgumentReferences = null;
}
}
return this._typeArgumentReferences;
};
PullInstantiatedTypeReferenceSymbol.prototype.getTypeArgumentsOrTypeParameters = function () {
return this.getTypeArguments();
};
PullInstantiatedTypeReferenceSymbol.prototype.populateInstantiatedMemberFromReferencedMember = function (referencedMember) {
var instantiatedMember;
TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(referencedMember);
if (!referencedMember.type.wrapsSomeTypeParameter(this._typeParameterArgumentMap)) {
instantiatedMember = referencedMember;
} else {
instantiatedMember = new TypeScript.PullSymbol(referencedMember.name, referencedMember.kind);
instantiatedMember.setRootSymbol(referencedMember);
instantiatedMember.type = this._getResolver().instantiateType(referencedMember.type, this._typeParameterArgumentMap);
instantiatedMember.isOptional = referencedMember.isOptional;
}
this._instantiatedMemberNameCache[instantiatedMember.name] = instantiatedMember;
};
PullInstantiatedTypeReferenceSymbol.prototype.getMembers = function () {
this.ensureReferencedTypeIsResolved();
if (this.isInstanceReferenceType) {
return this.referencedTypeSymbol.getMembers();
}
if (!this._instantiatedMembers) {
var referencedMembers = this.referencedTypeSymbol.getMembers();
var referencedMember = null;
var instantiatedMember = null;
this._instantiatedMembers = [];
for (var i = 0; i < referencedMembers.length; i++) {
referencedMember = referencedMembers[i];
this._getResolver().resolveDeclaredSymbol(referencedMember);
if (!this._instantiatedMemberNameCache[referencedMember.name]) {
this.populateInstantiatedMemberFromReferencedMember(referencedMember);
}
this._instantiatedMembers[this._instantiatedMembers.length] = this._instantiatedMemberNameCache[referencedMember.name];
}
}
return this._instantiatedMembers;
};
PullInstantiatedTypeReferenceSymbol.prototype.findMember = function (name, lookInParent) {
if (typeof lookInParent === "undefined") { lookInParent = true; }
this.ensureReferencedTypeIsResolved();
if (this.isInstanceReferenceType) {
return this.referencedTypeSymbol.findMember(name, lookInParent);
}
var memberSymbol = this._instantiatedMemberNameCache[name];
if (!memberSymbol) {
var referencedMemberSymbol = this.referencedTypeSymbol.findMember(name, lookInParent);
if (referencedMemberSymbol) {
this.populateInstantiatedMemberFromReferencedMember(referencedMemberSymbol);
memberSymbol = this._instantiatedMemberNameCache[name];
} else {
memberSymbol = null;
}
}
return memberSymbol;
};
PullInstantiatedTypeReferenceSymbol.prototype.getAllMembers = function (searchDeclKind, memberVisiblity) {
this.ensureReferencedTypeIsResolved();
if (this.isInstanceReferenceType) {
return this.referencedTypeSymbol.getAllMembers(searchDeclKind, memberVisiblity);
}
var requestedMembers = [];
var allReferencedMembers = this.referencedTypeSymbol.getAllMembers(searchDeclKind, memberVisiblity);
if (!this._allInstantiatedMemberNameCache) {
this._allInstantiatedMemberNameCache = TypeScript.createIntrinsicsObject();
var members = this.getMembers();
for (var i = 0; i < members.length; i++) {
this._allInstantiatedMemberNameCache[members[i].name] = members[i];
}
}
var referencedMember = null;
var requestedMember = null;
for (var i = 0; i < allReferencedMembers.length; i++) {
referencedMember = allReferencedMembers[i];
this._getResolver().resolveDeclaredSymbol(referencedMember);
if (this._allInstantiatedMemberNameCache[referencedMember.name]) {
requestedMembers[requestedMembers.length] = this._allInstantiatedMemberNameCache[referencedMember.name];
} else {
if (!referencedMember.type.wrapsSomeTypeParameter(this._typeParameterArgumentMap)) {
this._allInstantiatedMemberNameCache[referencedMember.name] = referencedMember;
requestedMembers[requestedMembers.length] = referencedMember;
} else {
requestedMember = new TypeScript.PullSymbol(referencedMember.name, referencedMember.kind);
requestedMember.setRootSymbol(referencedMember);
requestedMember.type = this._getResolver().instantiateType(referencedMember.type, this._typeParameterArgumentMap);
requestedMember.isOptional = referencedMember.isOptional;
this._allInstantiatedMemberNameCache[requestedMember.name] = requestedMember;
requestedMembers[requestedMembers.length] = requestedMember;
}
}
}
return requestedMembers;
};
PullInstantiatedTypeReferenceSymbol.prototype.getConstructorMethod = function () {
if (this.isInstanceReferenceType) {
return this.referencedTypeSymbol.getConstructorMethod();
}
if (!this._instantiatedConstructorMethod) {
var referencedConstructorMethod = this.referencedTypeSymbol.getConstructorMethod();
this._instantiatedConstructorMethod = new TypeScript.PullSymbol(referencedConstructorMethod.name, referencedConstructorMethod.kind);
this._instantiatedConstructorMethod.setRootSymbol(referencedConstructorMethod);
this._instantiatedConstructorMethod.setResolved();
this._instantiatedConstructorMethod.type = PullInstantiatedTypeReferenceSymbol.create(this._getResolver(), referencedConstructorMethod.type, this._typeParameterArgumentMap);
}
return this._instantiatedConstructorMethod;
};
PullInstantiatedTypeReferenceSymbol.prototype.getAssociatedContainerType = function () {
if (!this.isInstanceReferenceType) {
return this.referencedTypeSymbol.getAssociatedContainerType();
}
if (!this._instantiatedAssociatedContainerType) {
var referencedAssociatedContainerType = this.referencedTypeSymbol.getAssociatedContainerType();
if (referencedAssociatedContainerType) {
this._instantiatedAssociatedContainerType = PullInstantiatedTypeReferenceSymbol.create(this._getResolver(), referencedAssociatedContainerType, this._typeParameterArgumentMap);
}
}
return this._instantiatedAssociatedContainerType;
};
PullInstantiatedTypeReferenceSymbol.prototype.getCallSignatures = function () {
this.ensureReferencedTypeIsResolved();
if (this.isInstanceReferenceType) {
return this.referencedTypeSymbol.getCallSignatures();
}
if (this._instantiatedCallSignatures) {
return this._instantiatedCallSignatures;
}
var referencedCallSignatures = this.referencedTypeSymbol.getCallSignatures();
this._instantiatedCallSignatures = [];
for (var i = 0; i < referencedCallSignatures.length; i++) {
this._getResolver().resolveDeclaredSymbol(referencedCallSignatures[i]);
if (!referencedCallSignatures[i].wrapsSomeTypeParameter(this._typeParameterArgumentMap)) {
this._instantiatedCallSignatures[this._instantiatedCallSignatures.length] = referencedCallSignatures[i];
} else {
this._instantiatedCallSignatures[this._instantiatedCallSignatures.length] = this._getResolver().instantiateSignature(referencedCallSignatures[i], this._typeParameterArgumentMap);
this._instantiatedCallSignatures[this._instantiatedCallSignatures.length - 1].functionType = this;
}
}
return this._instantiatedCallSignatures;
};
PullInstantiatedTypeReferenceSymbol.prototype.getConstructSignatures = function () {
this.ensureReferencedTypeIsResolved();
if (this.isInstanceReferenceType) {
return this.referencedTypeSymbol.getConstructSignatures();
}
if (this._instantiatedConstructSignatures) {
return this._instantiatedConstructSignatures;
}
var referencedConstructSignatures = this.referencedTypeSymbol.getConstructSignatures();
this._instantiatedConstructSignatures = [];
for (var i = 0; i < referencedConstructSignatures.length; i++) {
this._getResolver().resolveDeclaredSymbol(referencedConstructSignatures[i]);
if (!referencedConstructSignatures[i].wrapsSomeTypeParameter(this._typeParameterArgumentMap)) {
this._instantiatedConstructSignatures[this._instantiatedConstructSignatures.length] = referencedConstructSignatures[i];
} else {
this._instantiatedConstructSignatures[this._instantiatedConstructSignatures.length] = this._getResolver().instantiateSignature(referencedConstructSignatures[i], this._typeParameterArgumentMap);
this._instantiatedConstructSignatures[this._instantiatedConstructSignatures.length - 1].functionType = this;
}
}
return this._instantiatedConstructSignatures;
};
PullInstantiatedTypeReferenceSymbol.prototype.getIndexSignatures = function () {
this.ensureReferencedTypeIsResolved();
if (this.isInstanceReferenceType) {
return this.referencedTypeSymbol.getIndexSignatures();
}
if (this._instantiatedIndexSignatures) {
return this._instantiatedIndexSignatures;
}
var referencedIndexSignatures = this.referencedTypeSymbol.getIndexSignatures();
this._instantiatedIndexSignatures = [];
for (var i = 0; i < referencedIndexSignatures.length; i++) {
this._getResolver().resolveDeclaredSymbol(referencedIndexSignatures[i]);
if (!referencedIndexSignatures[i].wrapsSomeTypeParameter(this._typeParameterArgumentMap)) {
this._instantiatedIndexSignatures[this._instantiatedIndexSignatures.length] = referencedIndexSignatures[i];
} else {
this._instantiatedIndexSignatures[this._instantiatedIndexSignatures.length] = this._getResolver().instantiateSignature(referencedIndexSignatures[i], this._typeParameterArgumentMap);
this._instantiatedIndexSignatures[this._instantiatedIndexSignatures.length - 1].functionType = this;
}
}
return this._instantiatedIndexSignatures;
};
return PullInstantiatedTypeReferenceSymbol;
})(PullTypeReferenceSymbol);
TypeScript.PullInstantiatedTypeReferenceSymbol = PullInstantiatedTypeReferenceSymbol;
var PullInstantiatedSignatureSymbol = (function (_super) {
__extends(PullInstantiatedSignatureSymbol, _super);
function PullInstantiatedSignatureSymbol(rootSignature, _typeParameterArgumentMap) {
_super.call(this, rootSignature.kind, rootSignature.isDefinition());
this._typeParameterArgumentMap = _typeParameterArgumentMap;
this.setRootSymbol(rootSignature);
TypeScript.nSpecializedSignaturesCreated++;
rootSignature.addSpecialization(this, _typeParameterArgumentMap);
}
PullInstantiatedSignatureSymbol.prototype.getTypeParameterArgumentMap = function () {
return this._typeParameterArgumentMap;
};
PullInstantiatedSignatureSymbol.prototype.getIsSpecialized = function () {
return true;
};
PullInstantiatedSignatureSymbol.prototype._getResolver = function () {
return this.getRootSymbol()._getResolver();
};
PullInstantiatedSignatureSymbol.prototype.getTypeParameters = function () {
var _this = this;
if (!this._typeParameters) {
var rootSymbol = this.getRootSymbol();
var typeParameters = rootSymbol.getTypeParameters();
var hasInstantiatedTypeParametersOfThisSignature = TypeScript.ArrayUtilities.all(typeParameters, function (typeParameter) {
return _this._typeParameterArgumentMap[typeParameter.pullSymbolID] !== undefined;
});
if (!hasInstantiatedTypeParametersOfThisSignature && typeParameters.length) {
this._typeParameters = [];
for (var i = 0; i < typeParameters.length; i++) {
this._typeParameters[this._typeParameters.length] = this._getResolver().instantiateTypeParameter(typeParameters[i], this._typeParameterArgumentMap);
}
} else {
this._typeParameters = TypeScript.sentinelEmptyArray;
}
}
return this._typeParameters;
};
PullInstantiatedSignatureSymbol.prototype.getAllowedToReferenceTypeParameters = function () {
var rootSymbol = this.getRootSymbol();
return rootSymbol.getAllowedToReferenceTypeParameters();
};
return PullInstantiatedSignatureSymbol;
})(TypeScript.PullSignatureSymbol);
TypeScript.PullInstantiatedSignatureSymbol = PullInstantiatedSignatureSymbol;
var PullInstantiatedTypeParameterSymbol = (function (_super) {
__extends(PullInstantiatedTypeParameterSymbol, _super);
function PullInstantiatedTypeParameterSymbol(rootTypeParameter, constraintType) {
_super.call(this, rootTypeParameter.name);
TypeScript.nSpecializedTypeParameterCreated++;
this.setRootSymbol(rootTypeParameter);
this.setConstraint(constraintType);
rootTypeParameter.addSpecialization(this, [constraintType]);
}
PullInstantiatedTypeParameterSymbol.prototype._getResolver = function () {
return this.getRootSymbol()._getResolver();
};
return PullInstantiatedTypeParameterSymbol;
})(TypeScript.PullTypeParameterSymbol);
TypeScript.PullInstantiatedTypeParameterSymbol = PullInstantiatedTypeParameterSymbol;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var SyntaxTreeToAstVisitor = (function () {
function SyntaxTreeToAstVisitor(fileName, lineMap, compilationSettings) {
this.fileName = fileName;
this.lineMap = lineMap;
this.compilationSettings = compilationSettings;
this.position = 0;
this.previousTokenTrailingComments = null;
}
SyntaxTreeToAstVisitor.visit = function (syntaxTree, fileName, compilationSettings, incrementalAST) {
var visitor = incrementalAST ? new SyntaxTreeToIncrementalAstVisitor(fileName, syntaxTree.lineMap(), compilationSettings) : new SyntaxTreeToAstVisitor(fileName, syntaxTree.lineMap(), compilationSettings);
return syntaxTree.sourceUnit().accept(visitor);
};
SyntaxTreeToAstVisitor.prototype.movePast = function (element) {
if (element !== null) {
this.position += element.fullWidth();
}
};
SyntaxTreeToAstVisitor.prototype.moveTo = function (element1, element2) {
if (element2 !== null) {
this.position += TypeScript.Syntax.childOffset(element1, element2);
}
};
SyntaxTreeToAstVisitor.prototype.setCommentsAndSpan = function (ast, fullStart, node) {
var firstToken = node.firstToken();
var lastToken = node.lastToken();
this.setSpan(ast, fullStart, node, firstToken, lastToken);
ast.setPreComments(this.convertTokenLeadingComments(firstToken, fullStart));
ast.setPostComments(this.convertNodeTrailingComments(node, lastToken, fullStart));
};
SyntaxTreeToAstVisitor.prototype.createTokenSpan = function (fullStart, element) {
if (element === null) {
return null;
}
if (element.fullWidth() === 0) {
return new TypeScript.ASTSpan(-1, -1);
}
var leadingTriviaWidth = element.leadingTriviaWidth();
var trailingTriviaWidth = element.trailingTriviaWidth();
var start = fullStart + leadingTriviaWidth;
var end = fullStart + element.fullWidth() - trailingTriviaWidth;
return new TypeScript.ASTSpan(start, end);
};
SyntaxTreeToAstVisitor.prototype.setSpan = function (span, fullStart, element, firstToken, lastToken) {
if (typeof firstToken === "undefined") { firstToken = element.firstToken(); }
if (typeof lastToken === "undefined") { lastToken = element.lastToken(); }
var leadingTriviaWidth = firstToken ? firstToken.leadingTriviaWidth() : 0;
var trailingTriviaWidth = lastToken ? lastToken.trailingTriviaWidth() : 0;
var desiredMinChar = fullStart + leadingTriviaWidth;
var desiredLimChar = fullStart + element.fullWidth() - trailingTriviaWidth;
this.setSpanExplicit(span, desiredMinChar, desiredLimChar);
span._trailingTriviaWidth = trailingTriviaWidth;
};
SyntaxTreeToAstVisitor.prototype.setSpanExplicit = function (span, start, end) {
span._start = start;
span._end = end;
};
SyntaxTreeToAstVisitor.prototype.visitSyntaxList = function (node) {
var start = this.position;
var array = new Array(node.childCount());
for (var i = 0, n = node.childCount(); i < n; i++) {
array[i] = node.childAt(i).accept(this);
}
var result = new TypeScript.ISyntaxList2(this.fileName, array);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitSeparatedSyntaxList = function (list) {
var start = this.position;
var array = new Array(list.nonSeparatorCount());
for (var i = 0, n = list.childCount(); i < n; i++) {
if (i % 2 === 0) {
array[i / 2] = list.childAt(i).accept(this);
this.previousTokenTrailingComments = null;
} else {
var separatorToken = list.childAt(i);
this.previousTokenTrailingComments = this.convertTokenTrailingComments(separatorToken, this.position + separatorToken.leadingTriviaWidth() + separatorToken.width());
this.movePast(separatorToken);
}
}
var result = new TypeScript.ISeparatedSyntaxList2(this.fileName, array, list.separatorCount());
this.setSpan(result, start, list);
result.setPostComments(this.previousTokenTrailingComments);
this.previousTokenTrailingComments = null;
return result;
};
SyntaxTreeToAstVisitor.prototype.convertComment = function (trivia, commentStartPosition, hasTrailingNewLine) {
var comment = new TypeScript.Comment(trivia, hasTrailingNewLine, commentStartPosition, commentStartPosition + trivia.fullWidth());
return comment;
};
SyntaxTreeToAstVisitor.prototype.convertComments = function (triviaList, commentStartPosition) {
var result = [];
for (var i = 0, n = triviaList.count(); i < n; i++) {
var trivia = triviaList.syntaxTriviaAt(i);
if (trivia.isComment()) {
var hasTrailingNewLine = ((i + 1) < n) && triviaList.syntaxTriviaAt(i + 1).isNewLine();
result.push(this.convertComment(trivia, commentStartPosition, hasTrailingNewLine));
}
commentStartPosition += trivia.fullWidth();
}
return result;
};
SyntaxTreeToAstVisitor.prototype.mergeComments = function (comments1, comments2) {
if (comments1 === null) {
return comments2;
}
if (comments2 === null) {
return comments1;
}
return comments1.concat(comments2);
};
SyntaxTreeToAstVisitor.prototype.convertTokenLeadingComments = function (token, commentStartPosition) {
if (token === null) {
return null;
}
var preComments = token.hasLeadingComment() ? this.convertComments(token.leadingTrivia(), commentStartPosition) : null;
var previousTokenTrailingComments = this.previousTokenTrailingComments;
this.previousTokenTrailingComments = null;
return this.mergeComments(previousTokenTrailingComments, preComments);
};
SyntaxTreeToAstVisitor.prototype.convertTokenTrailingComments = function (token, commentStartPosition) {
if (token === null || !token.hasTrailingComment() || token.hasTrailingNewLine()) {
return null;
}
return this.convertComments(token.trailingTrivia(), commentStartPosition);
};
SyntaxTreeToAstVisitor.prototype.convertNodeTrailingComments = function (node, lastToken, nodeStart) {
if (lastToken === null || !lastToken.hasTrailingComment() || lastToken.hasTrailingNewLine()) {
return null;
}
return this.convertComments(lastToken.trailingTrivia(), nodeStart + node.fullWidth() - lastToken.trailingTriviaWidth());
};
SyntaxTreeToAstVisitor.prototype.visitIdentifier = function (token) {
return this.visitToken(token);
};
SyntaxTreeToAstVisitor.prototype.visitToken = function (token) {
var fullStart = this.position;
var result = this.visitTokenWorker(token);
this.movePast(token);
var start = fullStart + token.leadingTriviaWidth();
this.setSpanExplicit(result, start, start + token.width());
return result;
};
SyntaxTreeToAstVisitor.prototype.visitTokenWorker = function (token) {
switch (token.tokenKind) {
case 60 /* AnyKeyword */:
return new TypeScript.BuiltInType(60 /* AnyKeyword */, token.text(), token.valueText());
case 61 /* BooleanKeyword */:
return new TypeScript.BuiltInType(61 /* BooleanKeyword */, token.text(), token.valueText());
case 67 /* NumberKeyword */:
return new TypeScript.BuiltInType(67 /* NumberKeyword */, token.text(), token.valueText());
case 69 /* StringKeyword */:
return new TypeScript.BuiltInType(69 /* StringKeyword */, token.text(), token.valueText());
case 41 /* VoidKeyword */:
return new TypeScript.BuiltInType(41 /* VoidKeyword */, token.text(), token.valueText());
case 35 /* ThisKeyword */:
return new TypeScript.ThisExpression(token.text(), token.valueText());
case 50 /* SuperKeyword */:
return new TypeScript.SuperExpression(token.text(), token.valueText());
case 37 /* TrueKeyword */:
return new TypeScript.LiteralExpression(37 /* TrueKeyword */, token.text(), token.valueText());
case 24 /* FalseKeyword */:
return new TypeScript.LiteralExpression(24 /* FalseKeyword */, token.text(), token.valueText());
case 32 /* NullKeyword */:
return new TypeScript.LiteralExpression(32 /* NullKeyword */, token.text(), token.valueText());
case 14 /* StringLiteral */:
return new TypeScript.StringLiteral(token.text(), token.valueText());
case 12 /* RegularExpressionLiteral */:
return new TypeScript.RegularExpressionLiteral(token.text(), token.valueText());
case 13 /* NumericLiteral */:
var fullStart = this.position;
var preComments = this.convertTokenLeadingComments(token, fullStart);
var result = new TypeScript.NumericLiteral(token.value(), token.text(), token.valueText());
result.setPreComments(preComments);
return result;
case 11 /* IdentifierName */:
return new TypeScript.Identifier(token.text());
default:
throw TypeScript.Errors.invalidOperation();
}
};
SyntaxTreeToAstVisitor.prototype.visitSourceUnit = function (node) {
var start = this.position;
TypeScript.Debug.assert(start === 0);
var bod = this.visitSyntaxList(node.moduleElements);
var comments = this.convertTokenLeadingComments(node.endOfFileToken, TypeScript.Syntax.childOffset(node, node.endOfFileToken));
var result = new TypeScript.SourceUnit(bod, comments, this.fileName);
this.setSpanExplicit(result, start, start + node.fullWidth());
return result;
};
SyntaxTreeToAstVisitor.prototype.visitExternalModuleReference = function (node) {
var start = this.position;
this.moveTo(node, node.stringLiteral);
var stringLiteral = node.stringLiteral.accept(this);
this.movePast(node.closeParenToken);
var result = new TypeScript.ExternalModuleReference(stringLiteral);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitModuleNameModuleReference = function (node) {
var start = this.position;
var moduleName = node.moduleName.accept(this);
var result = new TypeScript.ModuleNameModuleReference(moduleName);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitClassDeclaration = function (node) {
var start = this.position;
this.moveTo(node, node.identifier);
var name = this.visitIdentifier(node.identifier);
var typeParameters = this.visitTypeParameterList(node.typeParameterList);
var heritageClauses = node.heritageClauses ? this.visitSyntaxList(node.heritageClauses) : null;
this.movePast(node.openBraceToken);
var members = this.visitSyntaxList(node.classElements);
var closeBraceToken = this.createTokenSpan(this.position, node.closeBraceToken);
this.movePast(node.closeBraceToken);
var modifiers = this.visitModifiers(node.modifiers);
var result = new TypeScript.ClassDeclaration(modifiers, name, typeParameters, heritageClauses, members, closeBraceToken);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitModifiers = function (modifiers) {
var result = null;
if (TypeScript.SyntaxUtilities.containsToken(modifiers, 47 /* ExportKeyword */)) {
result = result || [];
result.push(1 /* Exported */);
}
if (TypeScript.SyntaxUtilities.containsToken(modifiers, 63 /* DeclareKeyword */)) {
result = result || [];
result.push(8 /* Ambient */);
}
if (TypeScript.SyntaxUtilities.containsToken(modifiers, 58 /* StaticKeyword */)) {
result = result || [];
result.push(16 /* Static */);
}
if (TypeScript.SyntaxUtilities.containsToken(modifiers, 57 /* PublicKeyword */)) {
result = result || [];
result.push(4 /* Public */);
}
if (TypeScript.SyntaxUtilities.containsToken(modifiers, 55 /* PrivateKeyword */)) {
result = result || [];
result.push(2 /* Private */);
}
return result || TypeScript.sentinelEmptyArray;
};
SyntaxTreeToAstVisitor.prototype.visitInterfaceDeclaration = function (node) {
var start = this.position;
this.moveTo(node, node.identifier);
var name = this.visitIdentifier(node.identifier);
var typeParameters = this.visitTypeParameterList(node.typeParameterList);
var heritageClauses = node.heritageClauses ? this.visitSyntaxList(node.heritageClauses) : null;
var body = this.visitObjectType(node.body);
var modifiers = this.visitModifiers(node.modifiers);
var result = new TypeScript.InterfaceDeclaration(modifiers, name, typeParameters, heritageClauses, body);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitHeritageClause = function (node) {
var start = this.position;
this.movePast(node.extendsOrImplementsKeyword);
var typeNames = this.visitSeparatedSyntaxList(node.typeNames);
var result = new TypeScript.HeritageClause(node.extendsOrImplementsKeyword.tokenKind === 48 /* ExtendsKeyword */ ? 230 /* ExtendsHeritageClause */ : 231 /* ImplementsHeritageClause */, typeNames);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitModuleDeclaration = function (node) {
var start = this.position;
var modifiers = this.visitModifiers(node.modifiers);
this.moveTo(node, node.moduleKeyword);
this.movePast(node.moduleKeyword);
var moduleName = node.name ? node.name.accept(this) : null;
var stringLiteral = node.stringLiteral ? node.stringLiteral.accept(this) : null;
this.movePast(node.openBraceToken);
var moduleElements = this.visitSyntaxList(node.moduleElements);
var closeBraceToken = this.createTokenSpan(this.position, node.closeBraceToken);
this.movePast(node.closeBraceToken);
var result = new TypeScript.ModuleDeclaration(modifiers, moduleName, stringLiteral, moduleElements, closeBraceToken);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitFunctionDeclaration = function (node) {
var start = this.position;
this.moveTo(node, node.identifier);
var name = this.visitIdentifier(node.identifier);
var callSignature = this.visitCallSignature(node.callSignature);
var block = node.block ? this.visitBlock(node.block) : null;
this.movePast(node.semicolonToken);
var result = new TypeScript.FunctionDeclaration(this.visitModifiers(node.modifiers), name, callSignature, block);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitEnumDeclaration = function (node) {
var start = this.position;
this.moveTo(node, node.identifier);
var identifier = this.visitIdentifier(node.identifier);
this.movePast(node.openBraceToken);
var enumElements = this.visitSeparatedSyntaxList(node.enumElements);
this.movePast(node.closeBraceToken);
var result = new TypeScript.EnumDeclaration(this.visitModifiers(node.modifiers), identifier, enumElements);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitEnumElement = function (node) {
var start = this.position;
var memberName = this.visitToken(node.propertyName);
var value = node.equalsValueClause !== null ? this.visitEqualsValueClause(node.equalsValueClause) : null;
var result = new TypeScript.EnumElement(memberName, value);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitImportDeclaration = function (node) {
var start = this.position;
this.moveTo(node, node.identifier);
var name = this.visitIdentifier(node.identifier);
this.movePast(node.equalsToken);
var alias = node.moduleReference.accept(this);
this.movePast(node.semicolonToken);
var modifiers = this.visitModifiers(node.modifiers);
var result = new TypeScript.ImportDeclaration(modifiers, name, alias);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitExportAssignment = function (node) {
var start = this.position;
this.moveTo(node, node.identifier);
var name = this.visitIdentifier(node.identifier);
this.movePast(node.semicolonToken);
var result = new TypeScript.ExportAssignment(name);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitVariableStatement = function (node) {
var start = this.position;
this.moveTo(node, node.variableDeclaration);
var declaration = node.variableDeclaration.accept(this);
this.movePast(node.semicolonToken);
var modifiers = this.visitModifiers(node.modifiers);
var result = new TypeScript.VariableStatement(modifiers, declaration);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitVariableDeclaration = function (node) {
var start = this.position;
this.moveTo(node, node.variableDeclarators);
var variableDecls = this.visitSeparatedSyntaxList(node.variableDeclarators);
var result = new TypeScript.VariableDeclaration(variableDecls);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitVariableDeclarator = function (node) {
var start = this.position;
var propertyName = this.visitToken(node.propertyName);
var typeExpr = this.visitTypeAnnotation(node.typeAnnotation);
var init = node.equalsValueClause ? this.visitEqualsValueClause(node.equalsValueClause) : null;
var result = new TypeScript.VariableDeclarator(propertyName, typeExpr, init);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitEqualsValueClause = function (node) {
var start = this.position;
var afterEqualsComments = this.convertTokenTrailingComments(node.equalsToken, this.position + node.equalsToken.leadingTriviaWidth() + node.equalsToken.width());
this.movePast(node.equalsToken);
var value = node.value.accept(this);
value.setPreComments(this.mergeComments(afterEqualsComments, value.preComments()));
var result = new TypeScript.EqualsValueClause(value);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitPrefixUnaryExpression = function (node) {
var start = this.position;
this.movePast(node.operatorToken);
var operand = node.operand.accept(this);
var result = new TypeScript.PrefixUnaryExpression(node.kind(), operand);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitArrayLiteralExpression = function (node) {
var start = this.position;
var openStart = this.position + node.openBracketToken.leadingTriviaWidth();
this.movePast(node.openBracketToken);
var expressions = this.visitSeparatedSyntaxList(node.expressions);
var closeStart = this.position + node.closeBracketToken.leadingTriviaWidth();
this.movePast(node.closeBracketToken);
var result = new TypeScript.ArrayLiteralExpression(expressions);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitOmittedExpression = function (node) {
var start = this.position;
var result = new TypeScript.OmittedExpression();
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitParenthesizedExpression = function (node) {
var start = this.position;
var openParenToken = node.openParenToken;
var openParenTrailingComments = this.convertTokenTrailingComments(openParenToken, start + openParenToken.leadingTriviaWidth() + openParenToken.width());
this.movePast(openParenToken);
var expr = node.expression.accept(this);
this.movePast(node.closeParenToken);
var result = new TypeScript.ParenthesizedExpression(openParenTrailingComments, expr);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitSimpleArrowFunctionExpression = function (node) {
var start = this.position;
var identifier = node.identifier.accept(this);
this.movePast(node.equalsGreaterThanToken);
var block = node.block ? this.visitBlock(node.block) : null;
var expression = node.expression ? node.expression.accept(this) : null;
var result = new TypeScript.SimpleArrowFunctionExpression(identifier, block, expression);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitParenthesizedArrowFunctionExpression = function (node) {
var start = this.position;
var callSignature = this.visitCallSignature(node.callSignature);
this.movePast(node.equalsGreaterThanToken);
var block = node.block ? this.visitBlock(node.block) : null;
var expression = node.expression ? node.expression.accept(this) : null;
var result = new TypeScript.ParenthesizedArrowFunctionExpression(callSignature, block, expression);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitType = function (type) {
return type ? type.accept(this) : null;
};
SyntaxTreeToAstVisitor.prototype.visitTypeQuery = function (node) {
var start = this.position;
this.movePast(node.typeOfKeyword);
var name = node.name.accept(this);
var result = new TypeScript.TypeQuery(name);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitQualifiedName = function (node) {
var start = this.position;
var left = this.visitType(node.left);
this.movePast(node.dotToken);
var right = this.visitIdentifier(node.right);
var result = new TypeScript.QualifiedName(left, right);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitTypeArgumentList = function (node) {
if (node === null) {
return null;
}
var start = this.position;
this.movePast(node.lessThanToken);
var typeArguments = this.visitSeparatedSyntaxList(node.typeArguments);
this.movePast(node.greaterThanToken);
var result = new TypeScript.TypeArgumentList(typeArguments);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitConstructorType = function (node) {
var start = this.position;
this.movePast(node.newKeyword);
var typeParameters = this.visitTypeParameterList(node.typeParameterList);
var parameters = this.visitParameterList(node.parameterList);
this.movePast(node.equalsGreaterThanToken);
var returnType = this.visitType(node.type);
var result = new TypeScript.ConstructorType(typeParameters, parameters, returnType);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitFunctionType = function (node) {
var start = this.position;
var typeParameters = this.visitTypeParameterList(node.typeParameterList);
var parameters = this.visitParameterList(node.parameterList);
this.movePast(node.equalsGreaterThanToken);
var returnType = this.visitType(node.type);
var result = new TypeScript.FunctionType(typeParameters, parameters, returnType);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitObjectType = function (node) {
var start = this.position;
this.movePast(node.openBraceToken);
var typeMembers = this.visitSeparatedSyntaxList(node.typeMembers);
this.movePast(node.closeBraceToken);
var result = new TypeScript.ObjectType(typeMembers);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitArrayType = function (node) {
var start = this.position;
var underlying = this.visitType(node.type);
this.movePast(node.openBracketToken);
this.movePast(node.closeBracketToken);
var result = new TypeScript.ArrayType(underlying);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitGenericType = function (node) {
var start = this.position;
var underlying = this.visitType(node.name);
var typeArguments = this.visitTypeArgumentList(node.typeArgumentList);
var result = new TypeScript.GenericType(underlying, typeArguments);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitTypeAnnotation = function (node) {
if (!node) {
return null;
}
var start = this.position;
this.movePast(node.colonToken);
var type = this.visitType(node.type);
var result = new TypeScript.TypeAnnotation(type);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitBlock = function (node) {
if (!node) {
return null;
}
var start = this.position;
this.movePast(node.openBraceToken);
var statements = this.visitSyntaxList(node.statements);
var closeBracePosition = this.position;
var closeBraceLeadingComments = this.convertTokenLeadingComments(node.closeBraceToken, this.position);
var closeBraceToken = this.createTokenSpan(this.position, node.closeBraceToken);
this.movePast(node.closeBraceToken);
var result = new TypeScript.Block(statements, closeBraceLeadingComments, closeBraceToken);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitParameter = function (node) {
var start = this.position;
var dotDotDotToken = this.createTokenSpan(this.position, node.dotDotDotToken);
this.moveTo(node, node.identifier);
var identifier = this.visitIdentifier(node.identifier);
var questionToken = this.createTokenSpan(this.position, node.questionToken);
this.movePast(node.questionToken);
var typeExpr = this.visitTypeAnnotation(node.typeAnnotation);
var init = node.equalsValueClause ? node.equalsValueClause.accept(this) : null;
var modifiers = this.visitModifiers(node.modifiers);
var result = new TypeScript.Parameter(dotDotDotToken, modifiers, identifier, questionToken, typeExpr, init);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitMemberAccessExpression = function (node) {
var start = this.position;
var expression = node.expression.accept(this);
this.movePast(node.dotToken);
var name = this.visitIdentifier(node.name);
var result = new TypeScript.MemberAccessExpression(expression, name);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitPostfixUnaryExpression = function (node) {
var start = this.position;
var operand = node.operand.accept(this);
this.movePast(node.operatorToken);
var result = new TypeScript.PostfixUnaryExpression(node.kind() === 210 /* PostIncrementExpression */ ? 210 /* PostIncrementExpression */ : 211 /* PostDecrementExpression */, operand);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitElementAccessExpression = function (node) {
var start = this.position;
var expression = node.expression.accept(this);
this.movePast(node.openBracketToken);
var argumentExpression = node.argumentExpression.accept(this);
this.movePast(node.closeBracketToken);
var result = new TypeScript.ElementAccessExpression(expression, argumentExpression);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitInvocationExpression = function (node) {
var start = this.position;
var expression = node.expression.accept(this);
var argumentList = this.visitArgumentList(node.argumentList);
var result = new TypeScript.InvocationExpression(expression, argumentList);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitArgumentList = function (node) {
if (node === null) {
return null;
}
var start = this.position;
var typeArguments = this.visitTypeArgumentList(node.typeArgumentList);
this.movePast(node.openParenToken);
var _arguments = this.visitSeparatedSyntaxList(node.arguments);
if (node.arguments.fullWidth() === 0 && node.closeParenToken.fullWidth() === 0) {
var openParenTokenEnd = start + node.openParenToken.leadingTriviaWidth() + node.openParenToken.width();
this.setSpanExplicit(_arguments, openParenTokenEnd, openParenTokenEnd + node.openParenToken.trailingTriviaWidth());
}
var closeParenToken = this.createTokenSpan(this.position, node.closeParenToken);
this.movePast(node.closeParenToken);
var result = new TypeScript.ArgumentList(typeArguments, _arguments, closeParenToken);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitBinaryExpression = function (node) {
var start = this.position;
var left = node.left.accept(this);
this.movePast(node.operatorToken);
var right = node.right.accept(this);
var result = new TypeScript.BinaryExpression(node.kind(), left, right);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitConditionalExpression = function (node) {
var start = this.position;
var condition = node.condition.accept(this);
this.movePast(node.questionToken);
var whenTrue = node.whenTrue.accept(this);
this.movePast(node.colonToken);
var whenFalse = node.whenFalse.accept(this);
var result = new TypeScript.ConditionalExpression(condition, whenTrue, whenFalse);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitConstructSignature = function (node) {
var start = this.position;
this.movePast(node.newKeyword);
var callSignature = this.visitCallSignature(node.callSignature);
var result = new TypeScript.ConstructSignature(callSignature);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitMethodSignature = function (node) {
var start = this.position;
var name = this.visitToken(node.propertyName);
var questionToken = this.createTokenSpan(this.position, node.questionToken);
this.movePast(node.questionToken);
var callSignature = this.visitCallSignature(node.callSignature);
var result = new TypeScript.MethodSignature(name, questionToken, callSignature);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitIndexSignature = function (node) {
var start = this.position;
this.movePast(node.openBracketToken);
var parameter = node.parameter.accept(this);
this.movePast(node.closeBracketToken);
var returnType = this.visitTypeAnnotation(node.typeAnnotation);
var result = new TypeScript.IndexSignature(parameter, returnType);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitPropertySignature = function (node) {
var start = this.position;
var name = this.visitToken(node.propertyName);
var questionToken = this.createTokenSpan(this.position, node.questionToken);
this.movePast(node.questionToken);
var typeExpr = this.visitTypeAnnotation(node.typeAnnotation);
var result = new TypeScript.PropertySignature(name, questionToken, typeExpr);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitParameterList = function (node) {
if (!node) {
return null;
}
var start = this.position;
var openParenToken = node.openParenToken;
this.previousTokenTrailingComments = this.convertTokenTrailingComments(openParenToken, start + openParenToken.leadingTriviaWidth() + openParenToken.width());
var openParenTrailingComments = null;
if (node.parameters.childCount() === 0) {
openParenTrailingComments = this.previousTokenTrailingComments;
this.previousTokenTrailingComments = null;
}
this.movePast(node.openParenToken);
var parameters = this.visitSeparatedSyntaxList(node.parameters);
this.movePast(node.closeParenToken);
var result = new TypeScript.ParameterList(openParenTrailingComments, parameters);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitCallSignature = function (node) {
var start = this.position;
var typeParameters = this.visitTypeParameterList(node.typeParameterList);
var parameters = this.visitParameterList(node.parameterList);
var returnType = this.visitTypeAnnotation(node.typeAnnotation);
var result = new TypeScript.CallSignature(typeParameters, parameters, returnType);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitTypeParameterList = function (node) {
if (!node) {
return null;
}
var start = this.position;
this.movePast(node.lessThanToken);
var typeParameters = this.visitSeparatedSyntaxList(node.typeParameters);
this.movePast(node.greaterThanToken);
var result = new TypeScript.TypeParameterList(typeParameters);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitTypeParameter = function (node) {
var start = this.position;
var identifier = this.visitIdentifier(node.identifier);
var constraint = node.constraint ? node.constraint.accept(this) : null;
var result = new TypeScript.TypeParameter(identifier, constraint);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitConstraint = function (node) {
var start = this.position;
this.movePast(node.extendsKeyword);
var type = this.visitType(node.type);
var result = new TypeScript.Constraint(type);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitIfStatement = function (node) {
var start = this.position;
this.moveTo(node, node.condition);
var condition = node.condition.accept(this);
this.movePast(node.closeParenToken);
var thenBod = node.statement.accept(this);
var elseBod = node.elseClause ? node.elseClause.accept(this) : null;
var result = new TypeScript.IfStatement(condition, thenBod, elseBod);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitElseClause = function (node) {
var start = this.position;
this.movePast(node.elseKeyword);
var statement = node.statement.accept(this);
var result = new TypeScript.ElseClause(statement);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitExpressionStatement = function (node) {
var start = this.position;
var preComments = this.convertTokenLeadingComments(node.firstToken(), start);
var expression = node.expression.accept(this);
var semicolonPosition = this.position;
var postComments = this.convertComments(node.semicolonToken.trailingTrivia(), this.position + node.semicolonToken.leadingTriviaWidth() + node.semicolonToken.width());
this.movePast(node.semicolonToken);
var result = new TypeScript.ExpressionStatement(expression);
this.setSpan(result, start, node);
result.setPreComments(preComments);
result.setPostComments(postComments);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitConstructorDeclaration = function (node) {
var start = this.position;
this.moveTo(node, node.callSignature);
var callSignature = this.visitCallSignature(node.callSignature);
var block = node.block ? node.block.accept(this) : null;
this.movePast(node.semicolonToken);
var result = new TypeScript.ConstructorDeclaration(callSignature, block);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitIndexMemberDeclaration = function (node) {
var start = this.position;
this.moveTo(node, node.indexSignature);
var indexSignature = node.indexSignature.accept(this);
this.movePast(node.semicolonToken);
var result = new TypeScript.IndexMemberDeclaration(indexSignature);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitMemberFunctionDeclaration = function (node) {
var start = this.position;
this.moveTo(node, node.propertyName);
var name = this.visitToken(node.propertyName);
var callSignature = this.visitCallSignature(node.callSignature);
var block = node.block ? this.visitBlock(node.block) : null;
this.movePast(node.semicolonToken);
var result = new TypeScript.MemberFunctionDeclaration(this.visitModifiers(node.modifiers), name, callSignature, block);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitGetAccessor = function (node) {
var start = this.position;
this.moveTo(node, node.propertyName);
var name = this.visitToken(node.propertyName);
var parameters = this.visitParameterList(node.parameterList);
var returnType = this.visitTypeAnnotation(node.typeAnnotation);
var block = node.block ? node.block.accept(this) : null;
var result = new TypeScript.GetAccessor(this.visitModifiers(node.modifiers), name, parameters, returnType, block);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitSetAccessor = function (node) {
var start = this.position;
this.moveTo(node, node.propertyName);
var name = this.visitToken(node.propertyName);
var parameters = this.visitParameterList(node.parameterList);
var block = node.block ? node.block.accept(this) : null;
var result = new TypeScript.SetAccessor(this.visitModifiers(node.modifiers), name, parameters, block);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitMemberVariableDeclaration = function (node) {
var start = this.position;
this.moveTo(node, node.variableDeclarator);
var variableDeclarator = node.variableDeclarator.accept(this);
this.movePast(node.semicolonToken);
var modifiers = this.visitModifiers(node.modifiers);
var result = new TypeScript.MemberVariableDeclaration(modifiers, variableDeclarator);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitThrowStatement = function (node) {
var start = this.position;
this.movePast(node.throwKeyword);
var expression = node.expression.accept(this);
this.movePast(node.semicolonToken);
var result = new TypeScript.ThrowStatement(expression);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitReturnStatement = function (node) {
var start = this.position;
this.movePast(node.returnKeyword);
var expression = node.expression ? node.expression.accept(this) : null;
this.movePast(node.semicolonToken);
var result = new TypeScript.ReturnStatement(expression);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitObjectCreationExpression = function (node) {
var start = this.position;
this.movePast(node.newKeyword);
var expression = node.expression.accept(this);
var argumentList = this.visitArgumentList(node.argumentList);
var result = new TypeScript.ObjectCreationExpression(expression, argumentList);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitSwitchStatement = function (node) {
var start = this.position;
this.movePast(node.switchKeyword);
this.movePast(node.openParenToken);
var expression = node.expression.accept(this);
var closeParenToken = this.createTokenSpan(this.position, node.closeParenToken);
this.movePast(node.closeParenToken);
this.movePast(node.openBraceToken);
var switchClauses = this.visitSyntaxList(node.switchClauses);
this.movePast(node.closeBraceToken);
var result = new TypeScript.SwitchStatement(expression, closeParenToken, switchClauses);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitCaseSwitchClause = function (node) {
var start = this.position;
this.movePast(node.caseKeyword);
var expression = node.expression.accept(this);
this.movePast(node.colonToken);
var statements = this.visitSyntaxList(node.statements);
var result = new TypeScript.CaseSwitchClause(expression, statements);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitDefaultSwitchClause = function (node) {
var start = this.position;
this.movePast(node.defaultKeyword);
this.movePast(node.colonToken);
var statements = this.visitSyntaxList(node.statements);
var result = new TypeScript.DefaultSwitchClause(statements);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitBreakStatement = function (node) {
var start = this.position;
this.movePast(node.breakKeyword);
var identifier = node.identifier ? node.identifier.accept(this) : null;
this.movePast(node.semicolonToken);
var result = new TypeScript.BreakStatement(identifier);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitContinueStatement = function (node) {
var start = this.position;
this.movePast(node.continueKeyword);
var identifier = node.identifier ? node.identifier.accept(this) : null;
this.movePast(node.semicolonToken);
var result = new TypeScript.ContinueStatement(identifier);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitForStatement = function (node) {
var start = this.position;
this.movePast(node.forKeyword);
this.movePast(node.openParenToken);
var variableDeclaration = node.variableDeclaration ? node.variableDeclaration.accept(this) : null;
var initializer = node.initializer ? node.initializer.accept(this) : null;
this.movePast(node.firstSemicolonToken);
var cond = node.condition ? node.condition.accept(this) : null;
this.movePast(node.secondSemicolonToken);
var incr = node.incrementor ? node.incrementor.accept(this) : null;
this.movePast(node.closeParenToken);
var body = node.statement.accept(this);
var result = new TypeScript.ForStatement(variableDeclaration, initializer, cond, incr, body);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitForInStatement = function (node) {
var start = this.position;
this.movePast(node.forKeyword);
this.movePast(node.openParenToken);
var variableDeclaration = node.variableDeclaration ? node.variableDeclaration.accept(this) : null;
var left = node.left ? node.left.accept(this) : null;
this.movePast(node.inKeyword);
var expression = node.expression.accept(this);
this.movePast(node.closeParenToken);
var body = node.statement.accept(this);
var result = new TypeScript.ForInStatement(variableDeclaration, left, expression, body);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitWhileStatement = function (node) {
var start = this.position;
this.moveTo(node, node.condition);
var condition = node.condition.accept(this);
this.movePast(node.closeParenToken);
var statement = node.statement.accept(this);
var result = new TypeScript.WhileStatement(condition, statement);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitWithStatement = function (node) {
var start = this.position;
this.moveTo(node, node.condition);
var condition = node.condition.accept(this);
this.movePast(node.closeParenToken);
var statement = node.statement.accept(this);
var result = new TypeScript.WithStatement(condition, statement);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitCastExpression = function (node) {
var start = this.position;
this.movePast(node.lessThanToken);
var castTerm = this.visitType(node.type);
this.movePast(node.greaterThanToken);
var expression = node.expression.accept(this);
var result = new TypeScript.CastExpression(castTerm, expression);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitObjectLiteralExpression = function (node) {
var start = this.position;
var openStart = this.position + node.openBraceToken.leadingTriviaWidth();
this.movePast(node.openBraceToken);
var propertyAssignments = this.visitSeparatedSyntaxList(node.propertyAssignments);
var closeStart = this.position + node.closeBraceToken.leadingTriviaWidth();
this.movePast(node.closeBraceToken);
var result = new TypeScript.ObjectLiteralExpression(propertyAssignments);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitSimplePropertyAssignment = function (node) {
var start = this.position;
var preComments = this.convertTokenLeadingComments(node.firstToken(), start);
var postComments = this.convertNodeTrailingComments(node, node.lastToken(), start);
var propertyName = node.propertyName.accept(this);
var afterColonComments = this.convertTokenTrailingComments(node.colonToken, this.position + node.colonToken.leadingTriviaWidth() + node.colonToken.width());
this.movePast(node.colonToken);
var expression = node.expression.accept(this);
expression.setPreComments(this.mergeComments(afterColonComments, expression.preComments()));
var result = new TypeScript.SimplePropertyAssignment(propertyName, expression);
this.setSpan(result, start, node);
result.setPreComments(preComments);
result.setPostComments(postComments);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitFunctionPropertyAssignment = function (node) {
var start = this.position;
var propertyName = node.propertyName.accept(this);
var callSignature = this.visitCallSignature(node.callSignature);
var block = this.visitBlock(node.block);
var result = new TypeScript.FunctionPropertyAssignment(propertyName, callSignature, block);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitFunctionExpression = function (node) {
var start = this.position;
this.movePast(node.functionKeyword);
var name = node.identifier === null ? null : this.visitIdentifier(node.identifier);
var callSignature = this.visitCallSignature(node.callSignature);
var block = node.block ? node.block.accept(this) : null;
var result = new TypeScript.FunctionExpression(name, callSignature, block);
this.setCommentsAndSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitEmptyStatement = function (node) {
var start = this.position;
this.movePast(node.semicolonToken);
var result = new TypeScript.EmptyStatement();
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitTryStatement = function (node) {
var start = this.position;
this.movePast(node.tryKeyword);
var tryBody = node.block.accept(this);
var catchClause = null;
if (node.catchClause !== null) {
catchClause = node.catchClause.accept(this);
}
var finallyBody = null;
if (node.finallyClause !== null) {
finallyBody = node.finallyClause.accept(this);
}
var result = new TypeScript.TryStatement(tryBody, catchClause, finallyBody);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitCatchClause = function (node) {
var start = this.position;
this.movePast(node.catchKeyword);
this.movePast(node.openParenToken);
var identifier = this.visitIdentifier(node.identifier);
var typeAnnotation = this.visitTypeAnnotation(node.typeAnnotation);
this.movePast(node.closeParenToken);
var block = node.block.accept(this);
var result = new TypeScript.CatchClause(identifier, typeAnnotation, block);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitFinallyClause = function (node) {
var start = this.position;
this.movePast(node.finallyKeyword);
var block = node.block.accept(this);
var result = new TypeScript.FinallyClause(block);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitLabeledStatement = function (node) {
var start = this.position;
var identifier = this.visitIdentifier(node.identifier);
this.movePast(node.colonToken);
var statement = node.statement.accept(this);
var result = new TypeScript.LabeledStatement(identifier, statement);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitDoStatement = function (node) {
var start = this.position;
this.movePast(node.doKeyword);
var statement = node.statement.accept(this);
var whileKeyword = this.createTokenSpan(this.position, node.whileKeyword);
this.movePast(node.whileKeyword);
this.movePast(node.openParenToken);
var condition = node.condition.accept(this);
this.movePast(node.closeParenToken);
this.movePast(node.semicolonToken);
var result = new TypeScript.DoStatement(statement, whileKeyword, condition);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitTypeOfExpression = function (node) {
var start = this.position;
this.movePast(node.typeOfKeyword);
var expression = node.expression.accept(this);
var result = new TypeScript.TypeOfExpression(expression);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitDeleteExpression = function (node) {
var start = this.position;
this.movePast(node.deleteKeyword);
var expression = node.expression.accept(this);
var result = new TypeScript.DeleteExpression(expression);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitVoidExpression = function (node) {
var start = this.position;
this.movePast(node.voidKeyword);
var expression = node.expression.accept(this);
var result = new TypeScript.VoidExpression(expression);
this.setSpan(result, start, node);
return result;
};
SyntaxTreeToAstVisitor.prototype.visitDebuggerStatement = function (node) {
var start = this.position;
this.movePast(node.debuggerKeyword);
this.movePast(node.semicolonToken);
var result = new TypeScript.DebuggerStatement();
this.setSpan(result, start, node);
return result;
};
return SyntaxTreeToAstVisitor;
})();
TypeScript.SyntaxTreeToAstVisitor = SyntaxTreeToAstVisitor;
function applyDelta(ast, delta) {
if (ast) {
if (ast._start !== -1) {
ast._start += delta;
}
if (ast._end !== -1) {
ast._end += delta;
}
}
}
function applyDeltaToComments(comments, delta) {
if (comments && comments.length > 0) {
for (var i = 0; i < comments.length; i++) {
var comment = comments[i];
applyDelta(comment, delta);
}
}
}
var SyntaxTreeToIncrementalAstVisitor = (function (_super) {
__extends(SyntaxTreeToIncrementalAstVisitor, _super);
function SyntaxTreeToIncrementalAstVisitor() {
_super.apply(this, arguments);
}
SyntaxTreeToIncrementalAstVisitor.prototype.applyDelta = function (ast, delta) {
if (delta === 0) {
return;
}
var pre = function (cur) {
applyDelta(cur, delta);
applyDeltaToComments(cur.preComments(), delta);
applyDeltaToComments(cur.postComments(), delta);
switch (cur.kind()) {
case 146 /* Block */:
applyDelta(cur.closeBraceToken, delta);
break;
case 226 /* ArgumentList */:
applyDelta(cur.closeParenToken, delta);
break;
case 130 /* ModuleDeclaration */:
applyDelta(cur.endingToken, delta);
break;
case 131 /* ClassDeclaration */:
applyDelta(cur.closeBraceToken, delta);
break;
case 161 /* DoStatement */:
applyDelta(cur.whileKeyword, delta);
break;
case 151 /* SwitchStatement */:
applyDelta(cur.closeParenToken, delta);
break;
}
};
TypeScript.getAstWalkerFactory().simpleWalk(ast, pre);
};
SyntaxTreeToIncrementalAstVisitor.prototype.setSpanExplicit = function (span, start, end) {
if (span._start !== -1) {
var delta = start - span._start;
this.applyDelta(span, delta);
span._end = end;
} else {
_super.prototype.setSpanExplicit.call(this, span, start, end);
}
};
SyntaxTreeToIncrementalAstVisitor.prototype.getAndMovePastAST = function (element) {
if (this.previousTokenTrailingComments !== null) {
return null;
}
var result = element._ast;
if (!result) {
return null;
}
var start = this.position;
this.movePast(element);
this.setSpan(result, start, element);
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.setAST = function (element, ast) {
element._ast = ast;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitSyntaxList = function (list) {
var result = this.getAndMovePastAST(list);
if (!result) {
result = _super.prototype.visitSyntaxList.call(this, list);
if (list.childCount() > 0) {
this.setAST(list, result);
}
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitSeparatedSyntaxList = function (list) {
var result = this.getAndMovePastAST(list);
if (!result) {
result = _super.prototype.visitSeparatedSyntaxList.call(this, list);
if (list.childCount() > 0) {
this.setAST(list, result);
}
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitToken = function (token) {
var result = this.getAndMovePastAST(token);
if (!result) {
result = _super.prototype.visitToken.call(this, token);
this.setAST(token, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitClassDeclaration = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitClassDeclaration.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitInterfaceDeclaration = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitInterfaceDeclaration.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitHeritageClause = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitHeritageClause.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitModuleDeclaration = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitModuleDeclaration.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitFunctionDeclaration = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitFunctionDeclaration.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitImportDeclaration = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitImportDeclaration.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitExportAssignment = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitExportAssignment.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitPrefixUnaryExpression = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitPrefixUnaryExpression.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitArrayLiteralExpression = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitArrayLiteralExpression.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitOmittedExpression = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitOmittedExpression.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitParenthesizedExpression = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitParenthesizedExpression.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitSimpleArrowFunctionExpression = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitSimpleArrowFunctionExpression.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitParenthesizedArrowFunctionExpression = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitParenthesizedArrowFunctionExpression.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitQualifiedName = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
var result = _super.prototype.visitQualifiedName.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitConstructorType = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitConstructorType.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitFunctionType = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitFunctionType.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitObjectType = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitObjectType.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitArrayType = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitArrayType.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitGenericType = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitGenericType.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitBlock = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitBlock.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitParameter = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitParameter.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitMemberAccessExpression = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitMemberAccessExpression.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitPostfixUnaryExpression = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitPostfixUnaryExpression.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitElementAccessExpression = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitElementAccessExpression.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitInvocationExpression = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitInvocationExpression.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitBinaryExpression = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitBinaryExpression.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitConditionalExpression = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitConditionalExpression.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitConstructSignature = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitConstructSignature.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitMethodSignature = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitMethodSignature.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitIndexSignature = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitIndexSignature.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitPropertySignature = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitPropertySignature.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitCallSignature = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitCallSignature.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitTypeParameter = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitTypeParameter.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitIfStatement = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitIfStatement.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitExpressionStatement = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitExpressionStatement.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitConstructorDeclaration = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitConstructorDeclaration.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitMemberFunctionDeclaration = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitMemberFunctionDeclaration.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitGetAccessor = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitGetAccessor.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitSetAccessor = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitSetAccessor.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitMemberVariableDeclaration = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitMemberVariableDeclaration.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitThrowStatement = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitThrowStatement.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitReturnStatement = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitReturnStatement.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitObjectCreationExpression = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitObjectCreationExpression.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitSwitchStatement = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitSwitchStatement.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitCaseSwitchClause = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitCaseSwitchClause.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitDefaultSwitchClause = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitDefaultSwitchClause.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitBreakStatement = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitBreakStatement.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitContinueStatement = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitContinueStatement.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitForStatement = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitForStatement.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitForInStatement = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitForInStatement.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitWhileStatement = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitWhileStatement.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitWithStatement = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitWithStatement.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitCastExpression = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitCastExpression.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitObjectLiteralExpression = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitObjectLiteralExpression.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitSimplePropertyAssignment = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitSimplePropertyAssignment.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitFunctionPropertyAssignment = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitFunctionPropertyAssignment.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitFunctionExpression = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitFunctionExpression.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitEmptyStatement = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitEmptyStatement.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitTryStatement = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitTryStatement.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitCatchClause = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitCatchClause.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitLabeledStatement = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitLabeledStatement.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitDoStatement = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitDoStatement.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitTypeOfExpression = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitTypeOfExpression.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitDeleteExpression = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitDeleteExpression.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitVoidExpression = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitVoidExpression.call(this, node);
this.setAST(node, result);
}
return result;
};
SyntaxTreeToIncrementalAstVisitor.prototype.visitDebuggerStatement = function (node) {
var result = this.getAndMovePastAST(node);
if (!result) {
result = _super.prototype.visitDebuggerStatement.call(this, node);
this.setAST(node, result);
}
return result;
};
return SyntaxTreeToIncrementalAstVisitor;
})(SyntaxTreeToAstVisitor);
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var ASTSpan = (function () {
function ASTSpan(_start, _end) {
this._start = _start;
this._end = _end;
}
ASTSpan.prototype.start = function () {
return this._start;
};
ASTSpan.prototype.end = function () {
return this._end;
};
return ASTSpan;
})();
TypeScript.ASTSpan = ASTSpan;
var astID = 0;
function structuralEqualsNotIncludingPosition(ast1, ast2) {
return structuralEquals(ast1, ast2, false);
}
TypeScript.structuralEqualsNotIncludingPosition = structuralEqualsNotIncludingPosition;
function structuralEqualsIncludingPosition(ast1, ast2) {
return structuralEquals(ast1, ast2, true);
}
TypeScript.structuralEqualsIncludingPosition = structuralEqualsIncludingPosition;
function commentStructuralEqualsNotIncludingPosition(ast1, ast2) {
return commentStructuralEquals(ast1, ast2, false);
}
function commentStructuralEqualsIncludingPosition(ast1, ast2) {
return commentStructuralEquals(ast1, ast2, true);
}
function structuralEquals(ast1, ast2, includingPosition) {
if (ast1 === ast2) {
return true;
}
return ast1 !== null && ast2 !== null && ast1.kind() === ast2.kind() && ast1.structuralEquals(ast2, includingPosition);
}
function commentStructuralEquals(ast1, ast2, includingPosition) {
if (ast1 === ast2) {
return true;
}
return ast1 !== null && ast2 !== null && ast1.structuralEquals(ast2, includingPosition);
}
function astArrayStructuralEquals(array1, array2, includingPosition) {
return TypeScript.ArrayUtilities.sequenceEquals(array1, array2, includingPosition ? structuralEqualsIncludingPosition : structuralEqualsNotIncludingPosition);
}
function commentArrayStructuralEquals(array1, array2, includingPosition) {
return TypeScript.ArrayUtilities.sequenceEquals(array1, array2, includingPosition ? commentStructuralEqualsIncludingPosition : commentStructuralEqualsNotIncludingPosition);
}
var AST = (function () {
function AST() {
this.parent = null;
this._start = -1;
this._end = -1;
this._trailingTriviaWidth = 0;
this._astID = astID++;
this._preComments = null;
this._postComments = null;
}
AST.prototype.syntaxID = function () {
return this._astID;
};
AST.prototype.start = function () {
return this._start;
};
AST.prototype.end = function () {
return this._end;
};
AST.prototype.trailingTriviaWidth = function () {
return this._trailingTriviaWidth;
};
AST.prototype.fileName = function () {
return this.parent.fileName();
};
AST.prototype.kind = function () {
throw TypeScript.Errors.abstract();
};
AST.prototype.preComments = function () {
return this._preComments;
};
AST.prototype.postComments = function () {
return this._postComments;
};
AST.prototype.setPreComments = function (comments) {
if (comments && comments.length) {
this._preComments = comments;
} else if (this._preComments) {
this._preComments = null;
}
};
AST.prototype.setPostComments = function (comments) {
if (comments && comments.length) {
this._postComments = comments;
} else if (this._postComments) {
this._postComments = null;
}
};
AST.prototype.width = function () {
return this.end() - this.start();
};
AST.prototype.structuralEquals = function (ast, includingPosition) {
if (includingPosition) {
if (this.start() !== ast.start() || this.end() !== ast.end()) {
return false;
}
}
return commentArrayStructuralEquals(this.preComments(), ast.preComments(), includingPosition) && commentArrayStructuralEquals(this.postComments(), ast.postComments(), includingPosition);
};
AST.prototype.isExpression = function () {
return false;
};
return AST;
})();
TypeScript.AST = AST;
var ISyntaxList2 = (function (_super) {
__extends(ISyntaxList2, _super);
function ISyntaxList2(_fileName, members) {
_super.call(this);
this._fileName = _fileName;
this.members = members;
for (var i = 0, n = members.length; i < n; i++) {
members[i].parent = this;
}
}
ISyntaxList2.prototype.childCount = function () {
return this.members.length;
};
ISyntaxList2.prototype.childAt = function (index) {
return this.members[index];
};
ISyntaxList2.prototype.fileName = function () {
return this._fileName;
};
ISyntaxList2.prototype.kind = function () {
return 1 /* List */;
};
ISyntaxList2.prototype.firstOrDefault = function (func) {
return TypeScript.ArrayUtilities.firstOrDefault(this.members, func);
};
ISyntaxList2.prototype.lastOrDefault = function (func) {
return TypeScript.ArrayUtilities.lastOrDefault(this.members, func);
};
ISyntaxList2.prototype.any = function (func) {
return TypeScript.ArrayUtilities.any(this.members, func);
};
ISyntaxList2.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && astArrayStructuralEquals(this.members, ast.members, includingPosition);
};
return ISyntaxList2;
})(AST);
TypeScript.ISyntaxList2 = ISyntaxList2;
var ISeparatedSyntaxList2 = (function (_super) {
__extends(ISeparatedSyntaxList2, _super);
function ISeparatedSyntaxList2(_fileName, members, _separatorCount) {
_super.call(this);
this._fileName = _fileName;
this.members = members;
this._separatorCount = _separatorCount;
for (var i = 0, n = members.length; i < n; i++) {
members[i].parent = this;
}
}
ISeparatedSyntaxList2.prototype.nonSeparatorCount = function () {
return this.members.length;
};
ISeparatedSyntaxList2.prototype.separatorCount = function () {
return this._separatorCount;
};
ISeparatedSyntaxList2.prototype.nonSeparatorAt = function (index) {
return this.members[index];
};
ISeparatedSyntaxList2.prototype.nonSeparatorIndexOf = function (ast) {
for (var i = 0, n = this.nonSeparatorCount(); i < n; i++) {
if (this.nonSeparatorAt(i) === ast) {
return i;
}
}
return -1;
};
ISeparatedSyntaxList2.prototype.fileName = function () {
return this._fileName;
};
ISeparatedSyntaxList2.prototype.kind = function () {
return 2 /* SeparatedList */;
};
ISeparatedSyntaxList2.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && astArrayStructuralEquals(this.members, ast.members, includingPosition);
};
return ISeparatedSyntaxList2;
})(AST);
TypeScript.ISeparatedSyntaxList2 = ISeparatedSyntaxList2;
var SourceUnit = (function (_super) {
__extends(SourceUnit, _super);
function SourceUnit(moduleElements, endOfFileTokenLeadingComments, _fileName) {
_super.call(this);
this.moduleElements = moduleElements;
this.endOfFileTokenLeadingComments = endOfFileTokenLeadingComments;
this._fileName = _fileName;
moduleElements && (moduleElements.parent = this);
}
SourceUnit.prototype.fileName = function () {
return this._fileName;
};
SourceUnit.prototype.kind = function () {
return 120 /* SourceUnit */;
};
SourceUnit.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.moduleElements, ast.moduleElements, includingPosition);
};
return SourceUnit;
})(AST);
TypeScript.SourceUnit = SourceUnit;
var Identifier = (function (_super) {
__extends(Identifier, _super);
function Identifier(_text) {
_super.call(this);
this._text = _text;
this._valueText = null;
}
Identifier.prototype.text = function () {
return this._text;
};
Identifier.prototype.valueText = function () {
if (!this._valueText) {
var text = this._text;
if (text === "__proto__") {
this._valueText = "#__proto__";
} else {
this._valueText = TypeScript.Syntax.massageEscapes(text);
}
}
return this._valueText;
};
Identifier.prototype.kind = function () {
return 11 /* IdentifierName */;
};
Identifier.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && this._text === ast._text;
};
Identifier.prototype.isExpression = function () {
return true;
};
return Identifier;
})(AST);
TypeScript.Identifier = Identifier;
var LiteralExpression = (function (_super) {
__extends(LiteralExpression, _super);
function LiteralExpression(_nodeType, _text, _valueText) {
_super.call(this);
this._nodeType = _nodeType;
this._text = _text;
this._valueText = _valueText;
}
LiteralExpression.prototype.text = function () {
return this._text;
};
LiteralExpression.prototype.valueText = function () {
return this._valueText;
};
LiteralExpression.prototype.kind = function () {
return this._nodeType;
};
LiteralExpression.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition);
};
LiteralExpression.prototype.isExpression = function () {
return true;
};
return LiteralExpression;
})(AST);
TypeScript.LiteralExpression = LiteralExpression;
var ThisExpression = (function (_super) {
__extends(ThisExpression, _super);
function ThisExpression(_text, _valueText) {
_super.call(this);
this._text = _text;
this._valueText = _valueText;
}
ThisExpression.prototype.text = function () {
return this._text;
};
ThisExpression.prototype.valueText = function () {
return this._valueText;
};
ThisExpression.prototype.kind = function () {
return 35 /* ThisKeyword */;
};
ThisExpression.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition);
};
ThisExpression.prototype.isExpression = function () {
return true;
};
return ThisExpression;
})(AST);
TypeScript.ThisExpression = ThisExpression;
var SuperExpression = (function (_super) {
__extends(SuperExpression, _super);
function SuperExpression(_text, _valueText) {
_super.call(this);
this._text = _text;
this._valueText = _valueText;
}
SuperExpression.prototype.text = function () {
return this._text;
};
SuperExpression.prototype.valueText = function () {
return this._valueText;
};
SuperExpression.prototype.kind = function () {
return 50 /* SuperKeyword */;
};
SuperExpression.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition);
};
SuperExpression.prototype.isExpression = function () {
return true;
};
return SuperExpression;
})(AST);
TypeScript.SuperExpression = SuperExpression;
var NumericLiteral = (function (_super) {
__extends(NumericLiteral, _super);
function NumericLiteral(_value, _text, _valueText) {
_super.call(this);
this._value = _value;
this._text = _text;
this._valueText = _valueText;
}
NumericLiteral.prototype.text = function () {
return this._text;
};
NumericLiteral.prototype.valueText = function () {
return this._valueText;
};
NumericLiteral.prototype.value = function () {
return this._value;
};
NumericLiteral.prototype.kind = function () {
return 13 /* NumericLiteral */;
};
NumericLiteral.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && (this._value === ast._value || (isNaN(this._value) && isNaN(ast._value))) && this._text === ast._text;
};
NumericLiteral.prototype.isExpression = function () {
return true;
};
return NumericLiteral;
})(AST);
TypeScript.NumericLiteral = NumericLiteral;
var RegularExpressionLiteral = (function (_super) {
__extends(RegularExpressionLiteral, _super);
function RegularExpressionLiteral(_text, _valueText) {
_super.call(this);
this._text = _text;
this._valueText = _valueText;
}
RegularExpressionLiteral.prototype.text = function () {
return this._text;
};
RegularExpressionLiteral.prototype.valueText = function () {
return this._valueText;
};
RegularExpressionLiteral.prototype.kind = function () {
return 12 /* RegularExpressionLiteral */;
};
RegularExpressionLiteral.prototype.isExpression = function () {
return true;
};
return RegularExpressionLiteral;
})(AST);
TypeScript.RegularExpressionLiteral = RegularExpressionLiteral;
var StringLiteral = (function (_super) {
__extends(StringLiteral, _super);
function StringLiteral(_text, _valueText) {
_super.call(this);
this._text = _text;
this._valueText = _valueText;
this._valueText = _valueText === "__proto__" ? "#__proto__" : _valueText;
}
StringLiteral.prototype.text = function () {
return this._text;
};
StringLiteral.prototype.valueText = function () {
return this._valueText;
};
StringLiteral.prototype.kind = function () {
return 14 /* StringLiteral */;
};
StringLiteral.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && this._text === ast._text;
};
StringLiteral.prototype.isExpression = function () {
return true;
};
return StringLiteral;
})(AST);
TypeScript.StringLiteral = StringLiteral;
var TypeAnnotation = (function (_super) {
__extends(TypeAnnotation, _super);
function TypeAnnotation(type) {
_super.call(this);
this.type = type;
type && (type.parent = this);
}
TypeAnnotation.prototype.kind = function () {
return 244 /* TypeAnnotation */;
};
return TypeAnnotation;
})(AST);
TypeScript.TypeAnnotation = TypeAnnotation;
var BuiltInType = (function (_super) {
__extends(BuiltInType, _super);
function BuiltInType(_nodeType, _text, _valueText) {
_super.call(this);
this._nodeType = _nodeType;
this._text = _text;
this._valueText = _valueText;
}
BuiltInType.prototype.text = function () {
return this._text;
};
BuiltInType.prototype.valueText = function () {
return this._valueText;
};
BuiltInType.prototype.kind = function () {
return this._nodeType;
};
return BuiltInType;
})(AST);
TypeScript.BuiltInType = BuiltInType;
var ExternalModuleReference = (function (_super) {
__extends(ExternalModuleReference, _super);
function ExternalModuleReference(stringLiteral) {
_super.call(this);
this.stringLiteral = stringLiteral;
stringLiteral && (stringLiteral.parent = this);
}
ExternalModuleReference.prototype.kind = function () {
return 245 /* ExternalModuleReference */;
};
return ExternalModuleReference;
})(AST);
TypeScript.ExternalModuleReference = ExternalModuleReference;
var ModuleNameModuleReference = (function (_super) {
__extends(ModuleNameModuleReference, _super);
function ModuleNameModuleReference(moduleName) {
_super.call(this);
this.moduleName = moduleName;
moduleName && (moduleName.parent = this);
}
ModuleNameModuleReference.prototype.kind = function () {
return 246 /* ModuleNameModuleReference */;
};
return ModuleNameModuleReference;
})(AST);
TypeScript.ModuleNameModuleReference = ModuleNameModuleReference;
var ImportDeclaration = (function (_super) {
__extends(ImportDeclaration, _super);
function ImportDeclaration(modifiers, identifier, moduleReference) {
_super.call(this);
this.modifiers = modifiers;
this.identifier = identifier;
this.moduleReference = moduleReference;
identifier && (identifier.parent = this);
moduleReference && (moduleReference.parent = this);
}
ImportDeclaration.prototype.kind = function () {
return 133 /* ImportDeclaration */;
};
ImportDeclaration.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.moduleReference, ast.moduleReference, includingPosition);
};
return ImportDeclaration;
})(AST);
TypeScript.ImportDeclaration = ImportDeclaration;
var ExportAssignment = (function (_super) {
__extends(ExportAssignment, _super);
function ExportAssignment(identifier) {
_super.call(this);
this.identifier = identifier;
identifier && (identifier.parent = this);
}
ExportAssignment.prototype.kind = function () {
return 134 /* ExportAssignment */;
};
ExportAssignment.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition);
};
return ExportAssignment;
})(AST);
TypeScript.ExportAssignment = ExportAssignment;
var TypeParameterList = (function (_super) {
__extends(TypeParameterList, _super);
function TypeParameterList(typeParameters) {
_super.call(this);
this.typeParameters = typeParameters;
typeParameters && (typeParameters.parent = this);
}
TypeParameterList.prototype.kind = function () {
return 229 /* TypeParameterList */;
};
return TypeParameterList;
})(AST);
TypeScript.TypeParameterList = TypeParameterList;
var ClassDeclaration = (function (_super) {
__extends(ClassDeclaration, _super);
function ClassDeclaration(modifiers, identifier, typeParameterList, heritageClauses, classElements, closeBraceToken) {
_super.call(this);
this.modifiers = modifiers;
this.identifier = identifier;
this.typeParameterList = typeParameterList;
this.heritageClauses = heritageClauses;
this.classElements = classElements;
this.closeBraceToken = closeBraceToken;
identifier && (identifier.parent = this);
typeParameterList && (typeParameterList.parent = this);
heritageClauses && (heritageClauses.parent = this);
classElements && (classElements.parent = this);
}
ClassDeclaration.prototype.kind = function () {
return 131 /* ClassDeclaration */;
};
ClassDeclaration.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.classElements, ast.classElements, includingPosition) && structuralEquals(this.typeParameterList, ast.typeParameterList, includingPosition) && structuralEquals(this.heritageClauses, ast.heritageClauses, includingPosition);
};
return ClassDeclaration;
})(AST);
TypeScript.ClassDeclaration = ClassDeclaration;
var InterfaceDeclaration = (function (_super) {
__extends(InterfaceDeclaration, _super);
function InterfaceDeclaration(modifiers, identifier, typeParameterList, heritageClauses, body) {
_super.call(this);
this.modifiers = modifiers;
this.identifier = identifier;
this.typeParameterList = typeParameterList;
this.heritageClauses = heritageClauses;
this.body = body;
identifier && (identifier.parent = this);
typeParameterList && (typeParameterList.parent = this);
body && (body.parent = this);
heritageClauses && (heritageClauses.parent = this);
}
InterfaceDeclaration.prototype.kind = function () {
return 128 /* InterfaceDeclaration */;
};
InterfaceDeclaration.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.body, ast.body, includingPosition) && structuralEquals(this.typeParameterList, ast.typeParameterList, includingPosition) && structuralEquals(this.heritageClauses, ast.heritageClauses, includingPosition);
};
return InterfaceDeclaration;
})(AST);
TypeScript.InterfaceDeclaration = InterfaceDeclaration;
var HeritageClause = (function (_super) {
__extends(HeritageClause, _super);
function HeritageClause(_nodeType, typeNames) {
_super.call(this);
this._nodeType = _nodeType;
this.typeNames = typeNames;
typeNames && (typeNames.parent = this);
}
HeritageClause.prototype.kind = function () {
return this._nodeType;
};
HeritageClause.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.typeNames, ast.typeNames, includingPosition);
};
return HeritageClause;
})(AST);
TypeScript.HeritageClause = HeritageClause;
var ModuleDeclaration = (function (_super) {
__extends(ModuleDeclaration, _super);
function ModuleDeclaration(modifiers, name, stringLiteral, moduleElements, endingToken) {
_super.call(this);
this.modifiers = modifiers;
this.name = name;
this.stringLiteral = stringLiteral;
this.moduleElements = moduleElements;
this.endingToken = endingToken;
name && (name.parent = this);
stringLiteral && (stringLiteral.parent = this);
moduleElements && (moduleElements.parent = this);
}
ModuleDeclaration.prototype.kind = function () {
return 130 /* ModuleDeclaration */;
};
ModuleDeclaration.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.name, ast.name, includingPosition) && structuralEquals(this.moduleElements, ast.moduleElements, includingPosition);
};
return ModuleDeclaration;
})(AST);
TypeScript.ModuleDeclaration = ModuleDeclaration;
var FunctionDeclaration = (function (_super) {
__extends(FunctionDeclaration, _super);
function FunctionDeclaration(modifiers, identifier, callSignature, block) {
_super.call(this);
this.modifiers = modifiers;
this.identifier = identifier;
this.callSignature = callSignature;
this.block = block;
identifier && (identifier.parent = this);
callSignature && (callSignature.parent = this);
block && (block.parent = this);
}
FunctionDeclaration.prototype.kind = function () {
return 129 /* FunctionDeclaration */;
};
FunctionDeclaration.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.block, ast.block, includingPosition) && structuralEquals(this.callSignature, ast.callSignature, includingPosition);
};
return FunctionDeclaration;
})(AST);
TypeScript.FunctionDeclaration = FunctionDeclaration;
var VariableStatement = (function (_super) {
__extends(VariableStatement, _super);
function VariableStatement(modifiers, declaration) {
_super.call(this);
this.modifiers = modifiers;
this.declaration = declaration;
declaration && (declaration.parent = this);
}
VariableStatement.prototype.kind = function () {
return 148 /* VariableStatement */;
};
VariableStatement.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.declaration, ast.declaration, includingPosition);
};
return VariableStatement;
})(AST);
TypeScript.VariableStatement = VariableStatement;
var VariableDeclaration = (function (_super) {
__extends(VariableDeclaration, _super);
function VariableDeclaration(declarators) {
_super.call(this);
this.declarators = declarators;
declarators && (declarators.parent = this);
}
VariableDeclaration.prototype.kind = function () {
return 224 /* VariableDeclaration */;
};
VariableDeclaration.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.declarators, ast.declarators, includingPosition);
};
return VariableDeclaration;
})(AST);
TypeScript.VariableDeclaration = VariableDeclaration;
var VariableDeclarator = (function (_super) {
__extends(VariableDeclarator, _super);
function VariableDeclarator(propertyName, typeAnnotation, equalsValueClause) {
_super.call(this);
this.propertyName = propertyName;
this.typeAnnotation = typeAnnotation;
this.equalsValueClause = equalsValueClause;
propertyName && (propertyName.parent = this);
typeAnnotation && (typeAnnotation.parent = this);
equalsValueClause && (equalsValueClause.parent = this);
}
VariableDeclarator.prototype.kind = function () {
return 225 /* VariableDeclarator */;
};
return VariableDeclarator;
})(AST);
TypeScript.VariableDeclarator = VariableDeclarator;
var EqualsValueClause = (function (_super) {
__extends(EqualsValueClause, _super);
function EqualsValueClause(value) {
_super.call(this);
this.value = value;
value && (value.parent = this);
}
EqualsValueClause.prototype.kind = function () {
return 232 /* EqualsValueClause */;
};
return EqualsValueClause;
})(AST);
TypeScript.EqualsValueClause = EqualsValueClause;
var PrefixUnaryExpression = (function (_super) {
__extends(PrefixUnaryExpression, _super);
function PrefixUnaryExpression(_nodeType, operand) {
_super.call(this);
this._nodeType = _nodeType;
this.operand = operand;
operand && (operand.parent = this);
}
PrefixUnaryExpression.prototype.kind = function () {
return this._nodeType;
};
PrefixUnaryExpression.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.operand, ast.operand, includingPosition);
};
PrefixUnaryExpression.prototype.isExpression = function () {
return true;
};
return PrefixUnaryExpression;
})(AST);
TypeScript.PrefixUnaryExpression = PrefixUnaryExpression;
var ArrayLiteralExpression = (function (_super) {
__extends(ArrayLiteralExpression, _super);
function ArrayLiteralExpression(expressions) {
_super.call(this);
this.expressions = expressions;
expressions && (expressions.parent = this);
}
ArrayLiteralExpression.prototype.kind = function () {
return 214 /* ArrayLiteralExpression */;
};
ArrayLiteralExpression.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expressions, ast.expressions, includingPosition);
};
ArrayLiteralExpression.prototype.isExpression = function () {
return true;
};
return ArrayLiteralExpression;
})(AST);
TypeScript.ArrayLiteralExpression = ArrayLiteralExpression;
var OmittedExpression = (function (_super) {
__extends(OmittedExpression, _super);
function OmittedExpression() {
_super.apply(this, arguments);
}
OmittedExpression.prototype.kind = function () {
return 223 /* OmittedExpression */;
};
OmittedExpression.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition);
};
OmittedExpression.prototype.isExpression = function () {
return true;
};
return OmittedExpression;
})(AST);
TypeScript.OmittedExpression = OmittedExpression;
var ParenthesizedExpression = (function (_super) {
__extends(ParenthesizedExpression, _super);
function ParenthesizedExpression(openParenTrailingComments, expression) {
_super.call(this);
this.openParenTrailingComments = openParenTrailingComments;
this.expression = expression;
expression && (expression.parent = this);
}
ParenthesizedExpression.prototype.kind = function () {
return 217 /* ParenthesizedExpression */;
};
ParenthesizedExpression.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition);
};
ParenthesizedExpression.prototype.isExpression = function () {
return true;
};
return ParenthesizedExpression;
})(AST);
TypeScript.ParenthesizedExpression = ParenthesizedExpression;
var SimpleArrowFunctionExpression = (function (_super) {
__extends(SimpleArrowFunctionExpression, _super);
function SimpleArrowFunctionExpression(identifier, block, expression) {
_super.call(this);
this.identifier = identifier;
this.block = block;
this.expression = expression;
identifier && (identifier.parent = this);
block && (block.parent = this);
expression && (expression.parent = this);
}
SimpleArrowFunctionExpression.prototype.kind = function () {
return 219 /* SimpleArrowFunctionExpression */;
};
SimpleArrowFunctionExpression.prototype.isExpression = function () {
return true;
};
return SimpleArrowFunctionExpression;
})(AST);
TypeScript.SimpleArrowFunctionExpression = SimpleArrowFunctionExpression;
var ParenthesizedArrowFunctionExpression = (function (_super) {
__extends(ParenthesizedArrowFunctionExpression, _super);
function ParenthesizedArrowFunctionExpression(callSignature, block, expression) {
_super.call(this);
this.callSignature = callSignature;
this.block = block;
this.expression = expression;
callSignature && (callSignature.parent = this);
block && (block.parent = this);
expression && (expression.parent = this);
}
ParenthesizedArrowFunctionExpression.prototype.kind = function () {
return 218 /* ParenthesizedArrowFunctionExpression */;
};
ParenthesizedArrowFunctionExpression.prototype.isExpression = function () {
return true;
};
return ParenthesizedArrowFunctionExpression;
})(AST);
TypeScript.ParenthesizedArrowFunctionExpression = ParenthesizedArrowFunctionExpression;
var QualifiedName = (function (_super) {
__extends(QualifiedName, _super);
function QualifiedName(left, right) {
_super.call(this);
this.left = left;
this.right = right;
left && (left.parent = this);
right && (right.parent = this);
}
QualifiedName.prototype.kind = function () {
return 121 /* QualifiedName */;
};
QualifiedName.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.left, ast.left, includingPosition) && structuralEquals(this.right, ast.right, includingPosition);
};
return QualifiedName;
})(AST);
TypeScript.QualifiedName = QualifiedName;
var ParameterList = (function (_super) {
__extends(ParameterList, _super);
function ParameterList(openParenTrailingComments, parameters) {
_super.call(this);
this.openParenTrailingComments = openParenTrailingComments;
this.parameters = parameters;
parameters && (parameters.parent = this);
}
ParameterList.prototype.kind = function () {
return 227 /* ParameterList */;
};
return ParameterList;
})(AST);
TypeScript.ParameterList = ParameterList;
var ConstructorType = (function (_super) {
__extends(ConstructorType, _super);
function ConstructorType(typeParameterList, parameterList, type) {
_super.call(this);
this.typeParameterList = typeParameterList;
this.parameterList = parameterList;
this.type = type;
typeParameterList && (typeParameterList.parent = this);
parameterList && (parameterList.parent = this);
type && (type.parent = this);
}
ConstructorType.prototype.kind = function () {
return 125 /* ConstructorType */;
};
return ConstructorType;
})(AST);
TypeScript.ConstructorType = ConstructorType;
var FunctionType = (function (_super) {
__extends(FunctionType, _super);
function FunctionType(typeParameterList, parameterList, type) {
_super.call(this);
this.typeParameterList = typeParameterList;
this.parameterList = parameterList;
this.type = type;
typeParameterList && (typeParameterList.parent = this);
parameterList && (parameterList.parent = this);
type && (type.parent = this);
}
FunctionType.prototype.kind = function () {
return 123 /* FunctionType */;
};
return FunctionType;
})(AST);
TypeScript.FunctionType = FunctionType;
var ObjectType = (function (_super) {
__extends(ObjectType, _super);
function ObjectType(typeMembers) {
_super.call(this);
this.typeMembers = typeMembers;
typeMembers && (typeMembers.parent = this);
}
ObjectType.prototype.kind = function () {
return 122 /* ObjectType */;
};
ObjectType.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.typeMembers, ast.typeMembers, includingPosition);
};
return ObjectType;
})(AST);
TypeScript.ObjectType = ObjectType;
var ArrayType = (function (_super) {
__extends(ArrayType, _super);
function ArrayType(type) {
_super.call(this);
this.type = type;
type && (type.parent = this);
}
ArrayType.prototype.kind = function () {
return 124 /* ArrayType */;
};
ArrayType.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.type, ast.type, includingPosition);
};
return ArrayType;
})(AST);
TypeScript.ArrayType = ArrayType;
var TypeArgumentList = (function (_super) {
__extends(TypeArgumentList, _super);
function TypeArgumentList(typeArguments) {
_super.call(this);
this.typeArguments = typeArguments;
typeArguments && (typeArguments.parent = this);
}
TypeArgumentList.prototype.kind = function () {
return 228 /* TypeArgumentList */;
};
return TypeArgumentList;
})(AST);
TypeScript.TypeArgumentList = TypeArgumentList;
var GenericType = (function (_super) {
__extends(GenericType, _super);
function GenericType(name, typeArgumentList) {
_super.call(this);
this.name = name;
this.typeArgumentList = typeArgumentList;
name && (name.parent = this);
typeArgumentList && (typeArgumentList.parent = this);
}
GenericType.prototype.kind = function () {
return 126 /* GenericType */;
};
GenericType.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.name, ast.name, includingPosition) && structuralEquals(this.typeArgumentList, ast.typeArgumentList, includingPosition);
};
return GenericType;
})(AST);
TypeScript.GenericType = GenericType;
var TypeQuery = (function (_super) {
__extends(TypeQuery, _super);
function TypeQuery(name) {
_super.call(this);
this.name = name;
name && (name.parent = this);
}
TypeQuery.prototype.kind = function () {
return 127 /* TypeQuery */;
};
TypeQuery.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.name, ast.name, includingPosition);
};
return TypeQuery;
})(AST);
TypeScript.TypeQuery = TypeQuery;
var Block = (function (_super) {
__extends(Block, _super);
function Block(statements, closeBraceLeadingComments, closeBraceToken) {
_super.call(this);
this.statements = statements;
this.closeBraceLeadingComments = closeBraceLeadingComments;
this.closeBraceToken = closeBraceToken;
statements && (statements.parent = this);
}
Block.prototype.kind = function () {
return 146 /* Block */;
};
Block.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.statements, ast.statements, includingPosition);
};
return Block;
})(AST);
TypeScript.Block = Block;
var Parameter = (function (_super) {
__extends(Parameter, _super);
function Parameter(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause) {
_super.call(this);
this.dotDotDotToken = dotDotDotToken;
this.modifiers = modifiers;
this.identifier = identifier;
this.questionToken = questionToken;
this.typeAnnotation = typeAnnotation;
this.equalsValueClause = equalsValueClause;
identifier && (identifier.parent = this);
typeAnnotation && (typeAnnotation.parent = this);
equalsValueClause && (equalsValueClause.parent = this);
}
Parameter.prototype.kind = function () {
return 242 /* Parameter */;
};
return Parameter;
})(AST);
TypeScript.Parameter = Parameter;
var MemberAccessExpression = (function (_super) {
__extends(MemberAccessExpression, _super);
function MemberAccessExpression(expression, name) {
_super.call(this);
this.expression = expression;
this.name = name;
expression && (expression.parent = this);
name && (name.parent = this);
}
MemberAccessExpression.prototype.kind = function () {
return 212 /* MemberAccessExpression */;
};
MemberAccessExpression.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.name, ast.name, includingPosition);
};
MemberAccessExpression.prototype.isExpression = function () {
return true;
};
return MemberAccessExpression;
})(AST);
TypeScript.MemberAccessExpression = MemberAccessExpression;
var PostfixUnaryExpression = (function (_super) {
__extends(PostfixUnaryExpression, _super);
function PostfixUnaryExpression(_nodeType, operand) {
_super.call(this);
this._nodeType = _nodeType;
this.operand = operand;
operand && (operand.parent = this);
}
PostfixUnaryExpression.prototype.kind = function () {
return this._nodeType;
};
PostfixUnaryExpression.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.operand, ast.operand, includingPosition);
};
PostfixUnaryExpression.prototype.isExpression = function () {
return true;
};
return PostfixUnaryExpression;
})(AST);
TypeScript.PostfixUnaryExpression = PostfixUnaryExpression;
var ElementAccessExpression = (function (_super) {
__extends(ElementAccessExpression, _super);
function ElementAccessExpression(expression, argumentExpression) {
_super.call(this);
this.expression = expression;
this.argumentExpression = argumentExpression;
expression && (expression.parent = this);
argumentExpression && (argumentExpression.parent = this);
}
ElementAccessExpression.prototype.kind = function () {
return 221 /* ElementAccessExpression */;
};
ElementAccessExpression.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.argumentExpression, ast.argumentExpression, includingPosition);
};
ElementAccessExpression.prototype.isExpression = function () {
return true;
};
return ElementAccessExpression;
})(AST);
TypeScript.ElementAccessExpression = ElementAccessExpression;
var InvocationExpression = (function (_super) {
__extends(InvocationExpression, _super);
function InvocationExpression(expression, argumentList) {
_super.call(this);
this.expression = expression;
this.argumentList = argumentList;
expression && (expression.parent = this);
argumentList && (argumentList.parent = this);
}
InvocationExpression.prototype.kind = function () {
return 213 /* InvocationExpression */;
};
InvocationExpression.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.argumentList, ast.argumentList, includingPosition);
};
InvocationExpression.prototype.isExpression = function () {
return true;
};
return InvocationExpression;
})(AST);
TypeScript.InvocationExpression = InvocationExpression;
var ArgumentList = (function (_super) {
__extends(ArgumentList, _super);
function ArgumentList(typeArgumentList, _arguments, closeParenToken) {
_super.call(this);
this.typeArgumentList = typeArgumentList;
this.closeParenToken = closeParenToken;
this.arguments = _arguments;
typeArgumentList && (typeArgumentList.parent = this);
_arguments && (_arguments.parent = this);
}
ArgumentList.prototype.kind = function () {
return 226 /* ArgumentList */;
};
return ArgumentList;
})(AST);
TypeScript.ArgumentList = ArgumentList;
var BinaryExpression = (function (_super) {
__extends(BinaryExpression, _super);
function BinaryExpression(_nodeType, left, right) {
_super.call(this);
this._nodeType = _nodeType;
this.left = left;
this.right = right;
left && (left.parent = this);
right && (right.parent = this);
}
BinaryExpression.prototype.kind = function () {
return this._nodeType;
};
BinaryExpression.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.left, ast.left, includingPosition) && structuralEquals(this.right, ast.right, includingPosition);
};
BinaryExpression.prototype.isExpression = function () {
return true;
};
return BinaryExpression;
})(AST);
TypeScript.BinaryExpression = BinaryExpression;
var ConditionalExpression = (function (_super) {
__extends(ConditionalExpression, _super);
function ConditionalExpression(condition, whenTrue, whenFalse) {
_super.call(this);
this.condition = condition;
this.whenTrue = whenTrue;
this.whenFalse = whenFalse;
condition && (condition.parent = this);
whenTrue && (whenTrue.parent = this);
whenFalse && (whenFalse.parent = this);
}
ConditionalExpression.prototype.kind = function () {
return 186 /* ConditionalExpression */;
};
ConditionalExpression.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition) && structuralEquals(this.whenTrue, ast.whenTrue, includingPosition) && structuralEquals(this.whenFalse, ast.whenFalse, includingPosition);
};
ConditionalExpression.prototype.isExpression = function () {
return true;
};
return ConditionalExpression;
})(AST);
TypeScript.ConditionalExpression = ConditionalExpression;
var ConstructSignature = (function (_super) {
__extends(ConstructSignature, _super);
function ConstructSignature(callSignature) {
_super.call(this);
this.callSignature = callSignature;
callSignature && (callSignature.parent = this);
}
ConstructSignature.prototype.kind = function () {
return 143 /* ConstructSignature */;
};
return ConstructSignature;
})(AST);
TypeScript.ConstructSignature = ConstructSignature;
var MethodSignature = (function (_super) {
__extends(MethodSignature, _super);
function MethodSignature(propertyName, questionToken, callSignature) {
_super.call(this);
this.propertyName = propertyName;
this.questionToken = questionToken;
this.callSignature = callSignature;
propertyName && (propertyName.parent = this);
callSignature && (callSignature.parent = this);
}
MethodSignature.prototype.kind = function () {
return 145 /* MethodSignature */;
};
return MethodSignature;
})(AST);
TypeScript.MethodSignature = MethodSignature;
var IndexSignature = (function (_super) {
__extends(IndexSignature, _super);
function IndexSignature(parameter, typeAnnotation) {
_super.call(this);
this.parameter = parameter;
this.typeAnnotation = typeAnnotation;
parameter && (parameter.parent = this);
typeAnnotation && (typeAnnotation.parent = this);
}
IndexSignature.prototype.kind = function () {
return 144 /* IndexSignature */;
};
return IndexSignature;
})(AST);
TypeScript.IndexSignature = IndexSignature;
var PropertySignature = (function (_super) {
__extends(PropertySignature, _super);
function PropertySignature(propertyName, questionToken, typeAnnotation) {
_super.call(this);
this.propertyName = propertyName;
this.questionToken = questionToken;
this.typeAnnotation = typeAnnotation;
propertyName && (propertyName.parent = this);
typeAnnotation && (typeAnnotation.parent = this);
}
PropertySignature.prototype.kind = function () {
return 141 /* PropertySignature */;
};
return PropertySignature;
})(AST);
TypeScript.PropertySignature = PropertySignature;
var CallSignature = (function (_super) {
__extends(CallSignature, _super);
function CallSignature(typeParameterList, parameterList, typeAnnotation) {
_super.call(this);
this.typeParameterList = typeParameterList;
this.parameterList = parameterList;
this.typeAnnotation = typeAnnotation;
typeParameterList && (typeParameterList.parent = this);
parameterList && (parameterList.parent = this);
typeAnnotation && (typeAnnotation.parent = this);
}
CallSignature.prototype.kind = function () {
return 142 /* CallSignature */;
};
return CallSignature;
})(AST);
TypeScript.CallSignature = CallSignature;
var TypeParameter = (function (_super) {
__extends(TypeParameter, _super);
function TypeParameter(identifier, constraint) {
_super.call(this);
this.identifier = identifier;
this.constraint = constraint;
identifier && (identifier.parent = this);
constraint && (constraint.parent = this);
}
TypeParameter.prototype.kind = function () {
return 238 /* TypeParameter */;
};
TypeParameter.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.constraint, ast.constraint, includingPosition);
};
return TypeParameter;
})(AST);
TypeScript.TypeParameter = TypeParameter;
var Constraint = (function (_super) {
__extends(Constraint, _super);
function Constraint(type) {
_super.call(this);
this.type = type;
type && (type.parent = this);
}
Constraint.prototype.kind = function () {
return 239 /* Constraint */;
};
return Constraint;
})(AST);
TypeScript.Constraint = Constraint;
var ElseClause = (function (_super) {
__extends(ElseClause, _super);
function ElseClause(statement) {
_super.call(this);
this.statement = statement;
statement && (statement.parent = this);
}
ElseClause.prototype.kind = function () {
return 235 /* ElseClause */;
};
ElseClause.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition);
};
return ElseClause;
})(AST);
TypeScript.ElseClause = ElseClause;
var IfStatement = (function (_super) {
__extends(IfStatement, _super);
function IfStatement(condition, statement, elseClause) {
_super.call(this);
this.condition = condition;
this.statement = statement;
this.elseClause = elseClause;
condition && (condition.parent = this);
statement && (statement.parent = this);
elseClause && (elseClause.parent = this);
}
IfStatement.prototype.kind = function () {
return 147 /* IfStatement */;
};
IfStatement.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition) && structuralEquals(this.elseClause, ast.elseClause, includingPosition);
};
return IfStatement;
})(AST);
TypeScript.IfStatement = IfStatement;
var ExpressionStatement = (function (_super) {
__extends(ExpressionStatement, _super);
function ExpressionStatement(expression) {
_super.call(this);
this.expression = expression;
expression && (expression.parent = this);
}
ExpressionStatement.prototype.kind = function () {
return 149 /* ExpressionStatement */;
};
ExpressionStatement.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition);
};
return ExpressionStatement;
})(AST);
TypeScript.ExpressionStatement = ExpressionStatement;
var ConstructorDeclaration = (function (_super) {
__extends(ConstructorDeclaration, _super);
function ConstructorDeclaration(callSignature, block) {
_super.call(this);
this.callSignature = callSignature;
this.block = block;
callSignature && (callSignature.parent = this);
block && (block.parent = this);
}
ConstructorDeclaration.prototype.kind = function () {
return 137 /* ConstructorDeclaration */;
};
return ConstructorDeclaration;
})(AST);
TypeScript.ConstructorDeclaration = ConstructorDeclaration;
var MemberFunctionDeclaration = (function (_super) {
__extends(MemberFunctionDeclaration, _super);
function MemberFunctionDeclaration(modifiers, propertyName, callSignature, block) {
_super.call(this);
this.modifiers = modifiers;
this.propertyName = propertyName;
this.callSignature = callSignature;
this.block = block;
propertyName && (propertyName.parent = this);
callSignature && (callSignature.parent = this);
block && (block.parent = this);
}
MemberFunctionDeclaration.prototype.kind = function () {
return 135 /* MemberFunctionDeclaration */;
};
return MemberFunctionDeclaration;
})(AST);
TypeScript.MemberFunctionDeclaration = MemberFunctionDeclaration;
var GetAccessor = (function (_super) {
__extends(GetAccessor, _super);
function GetAccessor(modifiers, propertyName, parameterList, typeAnnotation, block) {
_super.call(this);
this.modifiers = modifiers;
this.propertyName = propertyName;
this.parameterList = parameterList;
this.typeAnnotation = typeAnnotation;
this.block = block;
propertyName && (propertyName.parent = this);
parameterList && (parameterList.parent = this);
typeAnnotation && (typeAnnotation.parent = this);
block && (block.parent = this);
}
GetAccessor.prototype.kind = function () {
return 139 /* GetAccessor */;
};
return GetAccessor;
})(AST);
TypeScript.GetAccessor = GetAccessor;
var SetAccessor = (function (_super) {
__extends(SetAccessor, _super);
function SetAccessor(modifiers, propertyName, parameterList, block) {
_super.call(this);
this.modifiers = modifiers;
this.propertyName = propertyName;
this.parameterList = parameterList;
this.block = block;
propertyName && (propertyName.parent = this);
parameterList && (parameterList.parent = this);
block && (block.parent = this);
}
SetAccessor.prototype.kind = function () {
return 140 /* SetAccessor */;
};
return SetAccessor;
})(AST);
TypeScript.SetAccessor = SetAccessor;
var MemberVariableDeclaration = (function (_super) {
__extends(MemberVariableDeclaration, _super);
function MemberVariableDeclaration(modifiers, variableDeclarator) {
_super.call(this);
this.modifiers = modifiers;
this.variableDeclarator = variableDeclarator;
variableDeclarator && (variableDeclarator.parent = this);
}
MemberVariableDeclaration.prototype.kind = function () {
return 136 /* MemberVariableDeclaration */;
};
return MemberVariableDeclaration;
})(AST);
TypeScript.MemberVariableDeclaration = MemberVariableDeclaration;
var IndexMemberDeclaration = (function (_super) {
__extends(IndexMemberDeclaration, _super);
function IndexMemberDeclaration(indexSignature) {
_super.call(this);
this.indexSignature = indexSignature;
indexSignature && (indexSignature.parent = this);
}
IndexMemberDeclaration.prototype.kind = function () {
return 138 /* IndexMemberDeclaration */;
};
return IndexMemberDeclaration;
})(AST);
TypeScript.IndexMemberDeclaration = IndexMemberDeclaration;
var ThrowStatement = (function (_super) {
__extends(ThrowStatement, _super);
function ThrowStatement(expression) {
_super.call(this);
this.expression = expression;
expression && (expression.parent = this);
}
ThrowStatement.prototype.kind = function () {
return 157 /* ThrowStatement */;
};
ThrowStatement.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition);
};
return ThrowStatement;
})(AST);
TypeScript.ThrowStatement = ThrowStatement;
var ReturnStatement = (function (_super) {
__extends(ReturnStatement, _super);
function ReturnStatement(expression) {
_super.call(this);
this.expression = expression;
expression && (expression.parent = this);
}
ReturnStatement.prototype.kind = function () {
return 150 /* ReturnStatement */;
};
ReturnStatement.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition);
};
return ReturnStatement;
})(AST);
TypeScript.ReturnStatement = ReturnStatement;
var ObjectCreationExpression = (function (_super) {
__extends(ObjectCreationExpression, _super);
function ObjectCreationExpression(expression, argumentList) {
_super.call(this);
this.expression = expression;
this.argumentList = argumentList;
expression && (expression.parent = this);
argumentList && (argumentList.parent = this);
}
ObjectCreationExpression.prototype.kind = function () {
return 216 /* ObjectCreationExpression */;
};
ObjectCreationExpression.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.argumentList, ast.argumentList, includingPosition);
};
ObjectCreationExpression.prototype.isExpression = function () {
return true;
};
return ObjectCreationExpression;
})(AST);
TypeScript.ObjectCreationExpression = ObjectCreationExpression;
var SwitchStatement = (function (_super) {
__extends(SwitchStatement, _super);
function SwitchStatement(expression, closeParenToken, switchClauses) {
_super.call(this);
this.expression = expression;
this.closeParenToken = closeParenToken;
this.switchClauses = switchClauses;
expression && (expression.parent = this);
switchClauses && (switchClauses.parent = this);
}
SwitchStatement.prototype.kind = function () {
return 151 /* SwitchStatement */;
};
SwitchStatement.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.switchClauses, ast.switchClauses, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition);
};
return SwitchStatement;
})(AST);
TypeScript.SwitchStatement = SwitchStatement;
var CaseSwitchClause = (function (_super) {
__extends(CaseSwitchClause, _super);
function CaseSwitchClause(expression, statements) {
_super.call(this);
this.expression = expression;
this.statements = statements;
expression && (expression.parent = this);
statements && (statements.parent = this);
}
CaseSwitchClause.prototype.kind = function () {
return 233 /* CaseSwitchClause */;
};
CaseSwitchClause.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.statements, ast.statements, includingPosition);
};
return CaseSwitchClause;
})(AST);
TypeScript.CaseSwitchClause = CaseSwitchClause;
var DefaultSwitchClause = (function (_super) {
__extends(DefaultSwitchClause, _super);
function DefaultSwitchClause(statements) {
_super.call(this);
this.statements = statements;
statements && (statements.parent = this);
}
DefaultSwitchClause.prototype.kind = function () {
return 234 /* DefaultSwitchClause */;
};
DefaultSwitchClause.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.statements, ast.statements, includingPosition);
};
return DefaultSwitchClause;
})(AST);
TypeScript.DefaultSwitchClause = DefaultSwitchClause;
var BreakStatement = (function (_super) {
__extends(BreakStatement, _super);
function BreakStatement(identifier) {
_super.call(this);
this.identifier = identifier;
}
BreakStatement.prototype.kind = function () {
return 152 /* BreakStatement */;
};
BreakStatement.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition);
};
return BreakStatement;
})(AST);
TypeScript.BreakStatement = BreakStatement;
var ContinueStatement = (function (_super) {
__extends(ContinueStatement, _super);
function ContinueStatement(identifier) {
_super.call(this);
this.identifier = identifier;
}
ContinueStatement.prototype.kind = function () {
return 153 /* ContinueStatement */;
};
ContinueStatement.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition);
};
return ContinueStatement;
})(AST);
TypeScript.ContinueStatement = ContinueStatement;
var ForStatement = (function (_super) {
__extends(ForStatement, _super);
function ForStatement(variableDeclaration, initializer, condition, incrementor, statement) {
_super.call(this);
this.variableDeclaration = variableDeclaration;
this.initializer = initializer;
this.condition = condition;
this.incrementor = incrementor;
this.statement = statement;
variableDeclaration && (variableDeclaration.parent = this);
initializer && (initializer.parent = this);
condition && (condition.parent = this);
incrementor && (incrementor.parent = this);
statement && (statement.parent = this);
}
ForStatement.prototype.kind = function () {
return 154 /* ForStatement */;
};
ForStatement.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.initializer, ast.initializer, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition) && structuralEquals(this.incrementor, ast.incrementor, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition);
};
return ForStatement;
})(AST);
TypeScript.ForStatement = ForStatement;
var ForInStatement = (function (_super) {
__extends(ForInStatement, _super);
function ForInStatement(variableDeclaration, left, expression, statement) {
_super.call(this);
this.variableDeclaration = variableDeclaration;
this.left = left;
this.expression = expression;
this.statement = statement;
variableDeclaration && (variableDeclaration.parent = this);
left && (left.parent = this);
expression && (expression.parent = this);
statement && (statement.parent = this);
}
ForInStatement.prototype.kind = function () {
return 155 /* ForInStatement */;
};
ForInStatement.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.variableDeclaration, ast.variableDeclaration, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition);
};
return ForInStatement;
})(AST);
TypeScript.ForInStatement = ForInStatement;
var WhileStatement = (function (_super) {
__extends(WhileStatement, _super);
function WhileStatement(condition, statement) {
_super.call(this);
this.condition = condition;
this.statement = statement;
condition && (condition.parent = this);
statement && (statement.parent = this);
}
WhileStatement.prototype.kind = function () {
return 158 /* WhileStatement */;
};
WhileStatement.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition);
};
return WhileStatement;
})(AST);
TypeScript.WhileStatement = WhileStatement;
var WithStatement = (function (_super) {
__extends(WithStatement, _super);
function WithStatement(condition, statement) {
_super.call(this);
this.condition = condition;
this.statement = statement;
condition && (condition.parent = this);
statement && (statement.parent = this);
}
WithStatement.prototype.kind = function () {
return 163 /* WithStatement */;
};
WithStatement.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition);
};
return WithStatement;
})(AST);
TypeScript.WithStatement = WithStatement;
var EnumDeclaration = (function (_super) {
__extends(EnumDeclaration, _super);
function EnumDeclaration(modifiers, identifier, enumElements) {
_super.call(this);
this.modifiers = modifiers;
this.identifier = identifier;
this.enumElements = enumElements;
identifier && (identifier.parent = this);
enumElements && (enumElements.parent = this);
}
EnumDeclaration.prototype.kind = function () {
return 132 /* EnumDeclaration */;
};
return EnumDeclaration;
})(AST);
TypeScript.EnumDeclaration = EnumDeclaration;
var EnumElement = (function (_super) {
__extends(EnumElement, _super);
function EnumElement(propertyName, equalsValueClause) {
_super.call(this);
this.propertyName = propertyName;
this.equalsValueClause = equalsValueClause;
propertyName && (propertyName.parent = this);
equalsValueClause && (equalsValueClause.parent = this);
}
EnumElement.prototype.kind = function () {
return 243 /* EnumElement */;
};
return EnumElement;
})(AST);
TypeScript.EnumElement = EnumElement;
var CastExpression = (function (_super) {
__extends(CastExpression, _super);
function CastExpression(type, expression) {
_super.call(this);
this.type = type;
this.expression = expression;
type && (type.parent = this);
expression && (expression.parent = this);
}
CastExpression.prototype.kind = function () {
return 220 /* CastExpression */;
};
CastExpression.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.type, ast.type, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition);
};
CastExpression.prototype.isExpression = function () {
return true;
};
return CastExpression;
})(AST);
TypeScript.CastExpression = CastExpression;
var ObjectLiteralExpression = (function (_super) {
__extends(ObjectLiteralExpression, _super);
function ObjectLiteralExpression(propertyAssignments) {
_super.call(this);
this.propertyAssignments = propertyAssignments;
propertyAssignments && (propertyAssignments.parent = this);
}
ObjectLiteralExpression.prototype.kind = function () {
return 215 /* ObjectLiteralExpression */;
};
ObjectLiteralExpression.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.propertyAssignments, ast.propertyAssignments, includingPosition);
};
ObjectLiteralExpression.prototype.isExpression = function () {
return true;
};
return ObjectLiteralExpression;
})(AST);
TypeScript.ObjectLiteralExpression = ObjectLiteralExpression;
var SimplePropertyAssignment = (function (_super) {
__extends(SimplePropertyAssignment, _super);
function SimplePropertyAssignment(propertyName, expression) {
_super.call(this);
this.propertyName = propertyName;
this.expression = expression;
propertyName && (propertyName.parent = this);
expression && (expression.parent = this);
}
SimplePropertyAssignment.prototype.kind = function () {
return 240 /* SimplePropertyAssignment */;
};
return SimplePropertyAssignment;
})(AST);
TypeScript.SimplePropertyAssignment = SimplePropertyAssignment;
var FunctionPropertyAssignment = (function (_super) {
__extends(FunctionPropertyAssignment, _super);
function FunctionPropertyAssignment(propertyName, callSignature, block) {
_super.call(this);
this.propertyName = propertyName;
this.callSignature = callSignature;
this.block = block;
propertyName && (propertyName.parent = this);
callSignature && (callSignature.parent = this);
block && (block.parent = this);
}
FunctionPropertyAssignment.prototype.kind = function () {
return 241 /* FunctionPropertyAssignment */;
};
return FunctionPropertyAssignment;
})(AST);
TypeScript.FunctionPropertyAssignment = FunctionPropertyAssignment;
var FunctionExpression = (function (_super) {
__extends(FunctionExpression, _super);
function FunctionExpression(identifier, callSignature, block) {
_super.call(this);
this.identifier = identifier;
this.callSignature = callSignature;
this.block = block;
identifier && (identifier.parent = this);
callSignature && (callSignature.parent = this);
block && (block.parent = this);
}
FunctionExpression.prototype.kind = function () {
return 222 /* FunctionExpression */;
};
FunctionExpression.prototype.isExpression = function () {
return true;
};
return FunctionExpression;
})(AST);
TypeScript.FunctionExpression = FunctionExpression;
var EmptyStatement = (function (_super) {
__extends(EmptyStatement, _super);
function EmptyStatement() {
_super.apply(this, arguments);
}
EmptyStatement.prototype.kind = function () {
return 156 /* EmptyStatement */;
};
EmptyStatement.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition);
};
return EmptyStatement;
})(AST);
TypeScript.EmptyStatement = EmptyStatement;
var TryStatement = (function (_super) {
__extends(TryStatement, _super);
function TryStatement(block, catchClause, finallyClause) {
_super.call(this);
this.block = block;
this.catchClause = catchClause;
this.finallyClause = finallyClause;
block && (block.parent = this);
catchClause && (catchClause.parent = this);
finallyClause && (finallyClause.parent = this);
}
TryStatement.prototype.kind = function () {
return 159 /* TryStatement */;
};
TryStatement.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.block, ast.block, includingPosition) && structuralEquals(this.catchClause, ast.catchClause, includingPosition) && structuralEquals(this.finallyClause, ast.finallyClause, includingPosition);
};
return TryStatement;
})(AST);
TypeScript.TryStatement = TryStatement;
var CatchClause = (function (_super) {
__extends(CatchClause, _super);
function CatchClause(identifier, typeAnnotation, block) {
_super.call(this);
this.identifier = identifier;
this.typeAnnotation = typeAnnotation;
this.block = block;
identifier && (identifier.parent = this);
typeAnnotation && (typeAnnotation.parent = this);
block && (block.parent = this);
}
CatchClause.prototype.kind = function () {
return 236 /* CatchClause */;
};
CatchClause.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.typeAnnotation, ast.typeAnnotation, includingPosition) && structuralEquals(this.block, ast.block, includingPosition);
};
return CatchClause;
})(AST);
TypeScript.CatchClause = CatchClause;
var FinallyClause = (function (_super) {
__extends(FinallyClause, _super);
function FinallyClause(block) {
_super.call(this);
this.block = block;
block && (block.parent = this);
}
FinallyClause.prototype.kind = function () {
return 237 /* FinallyClause */;
};
FinallyClause.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.block, ast.block, includingPosition);
};
return FinallyClause;
})(AST);
TypeScript.FinallyClause = FinallyClause;
var LabeledStatement = (function (_super) {
__extends(LabeledStatement, _super);
function LabeledStatement(identifier, statement) {
_super.call(this);
this.identifier = identifier;
this.statement = statement;
identifier && (identifier.parent = this);
statement && (statement.parent = this);
}
LabeledStatement.prototype.kind = function () {
return 160 /* LabeledStatement */;
};
LabeledStatement.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition);
};
return LabeledStatement;
})(AST);
TypeScript.LabeledStatement = LabeledStatement;
var DoStatement = (function (_super) {
__extends(DoStatement, _super);
function DoStatement(statement, whileKeyword, condition) {
_super.call(this);
this.statement = statement;
this.whileKeyword = whileKeyword;
this.condition = condition;
statement && (statement.parent = this);
condition && (condition.parent = this);
}
DoStatement.prototype.kind = function () {
return 161 /* DoStatement */;
};
DoStatement.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition);
};
return DoStatement;
})(AST);
TypeScript.DoStatement = DoStatement;
var TypeOfExpression = (function (_super) {
__extends(TypeOfExpression, _super);
function TypeOfExpression(expression) {
_super.call(this);
this.expression = expression;
expression && (expression.parent = this);
}
TypeOfExpression.prototype.kind = function () {
return 171 /* TypeOfExpression */;
};
TypeOfExpression.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition);
};
TypeOfExpression.prototype.isExpression = function () {
return true;
};
return TypeOfExpression;
})(AST);
TypeScript.TypeOfExpression = TypeOfExpression;
var DeleteExpression = (function (_super) {
__extends(DeleteExpression, _super);
function DeleteExpression(expression) {
_super.call(this);
this.expression = expression;
expression && (expression.parent = this);
}
DeleteExpression.prototype.kind = function () {
return 170 /* DeleteExpression */;
};
DeleteExpression.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition);
};
DeleteExpression.prototype.isExpression = function () {
return true;
};
return DeleteExpression;
})(AST);
TypeScript.DeleteExpression = DeleteExpression;
var VoidExpression = (function (_super) {
__extends(VoidExpression, _super);
function VoidExpression(expression) {
_super.call(this);
this.expression = expression;
expression && (expression.parent = this);
}
VoidExpression.prototype.kind = function () {
return 172 /* VoidExpression */;
};
VoidExpression.prototype.structuralEquals = function (ast, includingPosition) {
return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition);
};
VoidExpression.prototype.isExpression = function () {
return true;
};
return VoidExpression;
})(AST);
TypeScript.VoidExpression = VoidExpression;
var DebuggerStatement = (function (_super) {
__extends(DebuggerStatement, _super);
function DebuggerStatement() {
_super.apply(this, arguments);
}
DebuggerStatement.prototype.kind = function () {
return 162 /* DebuggerStatement */;
};
return DebuggerStatement;
})(AST);
TypeScript.DebuggerStatement = DebuggerStatement;
var Comment = (function () {
function Comment(_trivia, endsLine, _start, _end) {
this._trivia = _trivia;
this.endsLine = endsLine;
this._start = _start;
this._end = _end;
}
Comment.prototype.start = function () {
return this._start;
};
Comment.prototype.end = function () {
return this._end;
};
Comment.prototype.fullText = function () {
return this._trivia.fullText();
};
Comment.prototype.kind = function () {
return this._trivia.kind();
};
Comment.prototype.structuralEquals = function (ast, includingPosition) {
if (includingPosition) {
if (this.start() !== ast.start() || this.end() !== ast.end()) {
return false;
}
}
return this._trivia.fullText() === ast._trivia.fullText() && this.endsLine === ast.endsLine;
};
return Comment;
})();
TypeScript.Comment = Comment;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (IOUtils) {
function createDirectoryStructure(ioHost, dirName) {
if (ioHost.directoryExists(dirName)) {
return;
}
var parentDirectory = ioHost.dirName(dirName);
if (parentDirectory != "") {
createDirectoryStructure(ioHost, parentDirectory);
}
ioHost.createDirectory(dirName);
}
function writeFileAndFolderStructure(ioHost, fileName, contents, writeByteOrderMark) {
var start = new Date().getTime();
var path = ioHost.resolvePath(fileName);
TypeScript.ioHostResolvePathTime += new Date().getTime() - start;
var start = new Date().getTime();
var dirName = ioHost.dirName(path);
TypeScript.ioHostDirectoryNameTime += new Date().getTime() - start;
var start = new Date().getTime();
createDirectoryStructure(ioHost, dirName);
TypeScript.ioHostCreateDirectoryStructureTime += new Date().getTime() - start;
var start = new Date().getTime();
ioHost.writeFile(path, contents, writeByteOrderMark);
TypeScript.ioHostWriteFileTime += new Date().getTime() - start;
}
IOUtils.writeFileAndFolderStructure = writeFileAndFolderStructure;
function throwIOError(message, error) {
var errorMessage = message;
if (error && error.message) {
errorMessage += (" " + error.message);
}
throw new Error(errorMessage);
}
IOUtils.throwIOError = throwIOError;
function combine(prefix, suffix) {
return prefix + "/" + suffix;
}
IOUtils.combine = combine;
var BufferedTextWriter = (function () {
function BufferedTextWriter(writer, capacity) {
if (typeof capacity === "undefined") { capacity = 1024; }
this.writer = writer;
this.capacity = capacity;
this.buffer = "";
}
BufferedTextWriter.prototype.Write = function (str) {
this.buffer += str;
if (this.buffer.length >= this.capacity) {
this.writer.Write(this.buffer);
this.buffer = "";
}
};
BufferedTextWriter.prototype.WriteLine = function (str) {
this.Write(str + '\r\n');
};
BufferedTextWriter.prototype.Close = function () {
this.writer.Write(this.buffer);
this.writer.Close();
this.buffer = null;
};
return BufferedTextWriter;
})();
IOUtils.BufferedTextWriter = BufferedTextWriter;
})(TypeScript.IOUtils || (TypeScript.IOUtils = {}));
var IOUtils = TypeScript.IOUtils;
TypeScript.IO = (function () {
function getWindowsScriptHostIO() {
var fso = new ActiveXObject("Scripting.FileSystemObject");
var streamObjectPool = [];
function getStreamObject() {
if (streamObjectPool.length > 0) {
return streamObjectPool.pop();
} else {
return new ActiveXObject("ADODB.Stream");
}
}
function releaseStreamObject(obj) {
streamObjectPool.push(obj);
}
var args = [];
for (var i = 0; i < WScript.Arguments.length; i++) {
args[i] = WScript.Arguments.Item(i);
}
return {
appendFile: function (path, content) {
var txtFile = fso.OpenTextFile(path, 8, true);
txtFile.Write(content);
txtFile.Close();
},
readFile: function (path, codepage) {
return TypeScript.Environment.readFile(path, codepage);
},
writeFile: function (path, contents, writeByteOrderMark) {
TypeScript.Environment.writeFile(path, contents, writeByteOrderMark);
},
fileExists: function (path) {
return fso.FileExists(path);
},
resolvePath: function (path) {
return fso.GetAbsolutePathName(path);
},
dirName: function (path) {
return fso.GetParentFolderName(path);
},
findFile: function (rootPath, partialFilePath) {
var path = fso.GetAbsolutePathName(rootPath) + "/" + partialFilePath;
while (true) {
if (fso.FileExists(path)) {
return { fileInformation: this.readFile(path), path: path };
} else {
rootPath = fso.GetParentFolderName(fso.GetAbsolutePathName(rootPath));
if (rootPath == "") {
return null;
} else {
path = fso.BuildPath(rootPath, partialFilePath);
}
}
}
},
deleteFile: function (path) {
try {
if (fso.FileExists(path)) {
fso.DeleteFile(path, true);
}
} catch (e) {
IOUtils.throwIOError(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Could_not_delete_file_0, [path]), e);
}
},
directoryExists: function (path) {
return fso.FolderExists(path);
},
createDirectory: function (path) {
try {
if (!this.directoryExists(path)) {
fso.CreateFolder(path);
}
} catch (e) {
IOUtils.throwIOError(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Could_not_create_directory_0, [path]), e);
}
},
dir: function (path, spec, options) {
options = options || {};
function filesInFolder(folder, root) {
var paths = [];
var fc;
if (options.recursive) {
fc = new Enumerator(folder.subfolders);
for (; !fc.atEnd(); fc.moveNext()) {
paths = paths.concat(filesInFolder(fc.item(), root + "/" + fc.item().Name));
}
}
fc = new Enumerator(folder.files);
for (; !fc.atEnd(); fc.moveNext()) {
if (!spec || fc.item().Name.match(spec)) {
paths.push(root + "/" + fc.item().Name);
}
}
return paths;
}
var folder = fso.GetFolder(path);
var paths = [];
return filesInFolder(folder, path);
},
print: function (str) {
WScript.StdOut.Write(str);
},
printLine: function (str) {
WScript.Echo(str);
},
arguments: args,
stderr: WScript.StdErr,
stdout: WScript.StdOut,
watchFile: null,
run: function (source, fileName) {
try {
eval(source);
} catch (e) {
IOUtils.throwIOError(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Error_while_executing_file_0, [fileName]), e);
}
},
getExecutingFilePath: function () {
return WScript.ScriptFullName;
},
quit: function (exitCode) {
if (typeof exitCode === "undefined") { exitCode = 0; }
try {
WScript.Quit(exitCode);
} catch (e) {
}
}
};
}
;
function getNodeIO() {
var _fs = require('fs');
var _path = require('path');
var _module = require('module');
return {
appendFile: function (path, content) {
_fs.appendFileSync(path, content);
},
readFile: function (file, codepage) {
return TypeScript.Environment.readFile(file, codepage);
},
writeFile: function (path, contents, writeByteOrderMark) {
TypeScript.Environment.writeFile(path, contents, writeByteOrderMark);
},
deleteFile: function (path) {
try {
_fs.unlinkSync(path);
} catch (e) {
IOUtils.throwIOError(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Could_not_delete_file_0, [path]), e);
}
},
fileExists: function (path) {
return _fs.existsSync(path);
},
dir: function dir(path, spec, options) {
options = options || {};
function filesInFolder(folder) {
var paths = [];
try {
var files = _fs.readdirSync(folder);
for (var i = 0; i < files.length; i++) {
var stat = _fs.statSync(folder + "/" + files[i]);
if (options.recursive && stat.isDirectory()) {
paths = paths.concat(filesInFolder(folder + "/" + files[i]));
} else if (stat.isFile() && (!spec || files[i].match(spec))) {
paths.push(folder + "/" + files[i]);
}
}
} catch (err) {
}
return paths;
}
return filesInFolder(path);
},
createDirectory: function (path) {
try {
if (!this.directoryExists(path)) {
_fs.mkdirSync(path);
}
} catch (e) {
IOUtils.throwIOError(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Could_not_create_directory_0, [path]), e);
}
},
directoryExists: function (path) {
return _fs.existsSync(path) && _fs.statSync(path).isDirectory();
},
resolvePath: function (path) {
return _path.resolve(path);
},
dirName: function (path) {
var dirPath = _path.dirname(path);
if (dirPath === path) {
dirPath = null;
}
return dirPath;
},
findFile: function (rootPath, partialFilePath) {
var path = rootPath + "/" + partialFilePath;
while (true) {
if (_fs.existsSync(path)) {
return { fileInformation: this.readFile(path), path: path };
} else {
var parentPath = _path.resolve(rootPath, "..");
if (rootPath === parentPath) {
return null;
} else {
rootPath = parentPath;
path = _path.resolve(rootPath, partialFilePath);
}
}
}
},
print: function (str) {
process.stdout.write(str);
},
printLine: function (str) {
process.stdout.write(str + '\n');
},
arguments: process.argv.slice(2),
stderr: {
Write: function (str) {
process.stderr.write(str);
},
WriteLine: function (str) {
process.stderr.write(str + '\n');
},
Close: function () {
}
},
stdout: {
Write: function (str) {
process.stdout.write(str);
},
WriteLine: function (str) {
process.stdout.write(str + '\n');
},
Close: function () {
}
},
watchFile: function (fileName, callback) {
var firstRun = true;
var processingChange = false;
var fileChanged = function (curr, prev) {
if (!firstRun) {
if (curr.mtime < prev.mtime) {
return;
}
_fs.unwatchFile(fileName, fileChanged);
if (!processingChange) {
processingChange = true;
callback(fileName);
setTimeout(function () {
processingChange = false;
}, 100);
}
}
firstRun = false;
_fs.watchFile(fileName, { persistent: true, interval: 500 }, fileChanged);
};
fileChanged();
return {
fileName: fileName,
close: function () {
_fs.unwatchFile(fileName, fileChanged);
}
};
},
run: function (source, fileName) {
require.main.fileName = fileName;
require.main.paths = _module._nodeModulePaths(_path.dirname(_fs.realpathSync(fileName)));
require.main._compile(source, fileName);
},
getExecutingFilePath: function () {
return process.mainModule.filename;
},
quit: function (code) {
var stderrFlushed = process.stderr.write('');
var stdoutFlushed = process.stdout.write('');
process.stderr.on('drain', function () {
stderrFlushed = true;
if (stdoutFlushed) {
process.exit(code);
}
});
process.stdout.on('drain', function () {
stdoutFlushed = true;
if (stderrFlushed) {
process.exit(code);
}
});
setTimeout(function () {
process.exit(code);
}, 5);
}
};
}
;
if (typeof WScript !== "undefined" && typeof ActiveXObject === "function")
return getWindowsScriptHostIO();
else if (typeof module !== 'undefined' && module.exports)
return getNodeIO();
else
return null;
})();
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var OptionsParser = (function () {
function OptionsParser(host, version) {
this.host = host;
this.version = version;
this.DEFAULT_SHORT_FLAG = "-";
this.DEFAULT_LONG_FLAG = "--";
this.printedVersion = false;
this.unnamed = [];
this.options = [];
}
OptionsParser.prototype.findOption = function (arg) {
var upperCaseArg = arg && arg.toUpperCase();
for (var i = 0; i < this.options.length; i++) {
var current = this.options[i];
if (upperCaseArg === (current.short && current.short.toUpperCase()) || upperCaseArg === (current.name && current.name.toUpperCase())) {
return current;
}
}
return null;
};
OptionsParser.prototype.printUsage = function () {
this.printVersion();
var optionsWord = TypeScript.getLocalizedText(TypeScript.DiagnosticCode.options, null);
var fileWord = TypeScript.getLocalizedText(TypeScript.DiagnosticCode.file1, null);
var tscSyntax = "tsc [" + optionsWord + "] [" + fileWord + " ..]";
var syntaxHelp = TypeScript.getLocalizedText(TypeScript.DiagnosticCode.Syntax_0, [tscSyntax]);
this.host.printLine(syntaxHelp);
this.host.printLine("");
this.host.printLine(TypeScript.getLocalizedText(TypeScript.DiagnosticCode.Examples, null) + " tsc hello.ts");
this.host.printLine(" tsc --out foo.js foo.ts");
this.host.printLine(" tsc @args.txt");
this.host.printLine("");
this.host.printLine(TypeScript.getLocalizedText(TypeScript.DiagnosticCode.Options, null));
var output = [];
var maxLength = 0;
var i = 0;
this.options = this.options.sort(function (a, b) {
var aName = a.name.toLowerCase();
var bName = b.name.toLowerCase();
if (aName > bName) {
return 1;
} else if (aName < bName) {
return -1;
} else {
return 0;
}
});
for (i = 0; i < this.options.length; i++) {
var option = this.options[i];
if (option.experimental) {
continue;
}
if (!option.usage) {
break;
}
var usageString = " ";
var type = option.type ? (" " + TypeScript.getLocalizedText(option.type, null)) : "";
if (option.short) {
usageString += this.DEFAULT_SHORT_FLAG + option.short + type + ", ";
}
usageString += this.DEFAULT_LONG_FLAG + option.name + type;
output.push([usageString, TypeScript.getLocalizedText(option.usage.locCode, option.usage.args)]);
if (usageString.length > maxLength) {
maxLength = usageString.length;
}
}
var fileDescription = TypeScript.getLocalizedText(TypeScript.DiagnosticCode.Insert_command_line_options_and_files_from_a_file, null);
output.push([" @<" + fileWord + ">", fileDescription]);
for (i = 0; i < output.length; i++) {
this.host.printLine(output[i][0] + (new Array(maxLength - output[i][0].length + 3)).join(" ") + output[i][1]);
}
};
OptionsParser.prototype.printVersion = function () {
if (!this.printedVersion) {
this.host.printLine(TypeScript.getLocalizedText(TypeScript.DiagnosticCode.Version_0, [this.version]));
this.printedVersion = true;
}
};
OptionsParser.prototype.option = function (name, config, short) {
if (!config) {
config = short;
short = null;
}
config.name = name;
config.short = short;
config.flag = false;
this.options.push(config);
};
OptionsParser.prototype.flag = function (name, config, short) {
if (!config) {
config = short;
short = null;
}
config.name = name;
config.short = short;
config.flag = true;
this.options.push(config);
};
OptionsParser.prototype.parseString = function (argString) {
var position = 0;
var tokens = argString.match(/\s+|"|[^\s"]+/g);
function peek() {
return tokens[position];
}
function consume() {
return tokens[position++];
}
function consumeQuotedString() {
var value = '';
consume();
var token = peek();
while (token && token !== '"') {
consume();
value += token;
token = peek();
}
consume();
return value;
}
var args = [];
var currentArg = '';
while (position < tokens.length) {
var token = peek();
if (token === '"') {
currentArg += consumeQuotedString();
} else if (token.match(/\s/)) {
if (currentArg.length > 0) {
args.push(currentArg);
currentArg = '';
}
consume();
} else {
consume();
currentArg += token;
}
}
if (currentArg.length > 0) {
args.push(currentArg);
}
this.parse(args);
};
OptionsParser.prototype.parse = function (args) {
var position = 0;
function consume() {
return args[position++];
}
while (position < args.length) {
var current = consume();
var match = current.match(/^(--?|@)(.*)/);
var value = null;
if (match) {
if (match[1] === '@') {
this.parseString(this.host.readFile(match[2], null).contents);
} else {
var arg = match[2];
var option = this.findOption(arg);
if (option === null) {
this.host.printLine(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Unknown_option_0, [arg]));
this.host.printLine(TypeScript.getLocalizedText(TypeScript.DiagnosticCode.Use_the_0_flag_to_see_options, ["--help"]));
} else {
if (!option.flag) {
value = consume();
if (value === undefined) {
this.host.printLine(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Option_0_specified_without_1, [arg, TypeScript.getLocalizedText(option.type, null)]));
this.host.printLine(TypeScript.getLocalizedText(TypeScript.DiagnosticCode.Use_the_0_flag_to_see_options, ["--help"]));
continue;
}
}
option.set(value);
}
}
} else {
this.unnamed.push(current);
}
}
};
return OptionsParser;
})();
TypeScript.OptionsParser = OptionsParser;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var SourceFile = (function () {
function SourceFile(scriptSnapshot, byteOrderMark) {
this.scriptSnapshot = scriptSnapshot;
this.byteOrderMark = byteOrderMark;
}
return SourceFile;
})();
var DiagnosticsLogger = (function () {
function DiagnosticsLogger(ioHost) {
this.ioHost = ioHost;
}
DiagnosticsLogger.prototype.information = function () {
return false;
};
DiagnosticsLogger.prototype.debug = function () {
return false;
};
DiagnosticsLogger.prototype.warning = function () {
return false;
};
DiagnosticsLogger.prototype.error = function () {
return false;
};
DiagnosticsLogger.prototype.fatal = function () {
return false;
};
DiagnosticsLogger.prototype.log = function (s) {
this.ioHost.stdout.WriteLine(s);
};
return DiagnosticsLogger;
})();
var FileLogger = (function () {
function FileLogger(ioHost) {
this.ioHost = ioHost;
var file = "tsc." + Date.now() + ".log";
this.fileName = this.ioHost.resolvePath(file);
}
FileLogger.prototype.information = function () {
return false;
};
FileLogger.prototype.debug = function () {
return false;
};
FileLogger.prototype.warning = function () {
return false;
};
FileLogger.prototype.error = function () {
return false;
};
FileLogger.prototype.fatal = function () {
return false;
};
FileLogger.prototype.log = function (s) {
this.ioHost.appendFile(this.fileName, s + '\r\n');
};
return FileLogger;
})();
var BatchCompiler = (function () {
function BatchCompiler(ioHost) {
this.ioHost = ioHost;
this.compilerVersion = "0.9.7.0";
this.inputFiles = [];
this.resolvedFiles = [];
this.fileNameToSourceFile = new TypeScript.StringHashTable();
this.hasErrors = false;
this.logger = null;
this.fileExistsCache = TypeScript.createIntrinsicsObject();
this.resolvePathCache = TypeScript.createIntrinsicsObject();
}
BatchCompiler.prototype.batchCompile = function () {
var _this = this;
var start = new Date().getTime();
TypeScript.CompilerDiagnostics.diagnosticWriter = { Alert: function (s) {
_this.ioHost.printLine(s);
} };
if (this.parseOptions()) {
if (this.compilationSettings.createFileLog()) {
this.logger = new FileLogger(this.ioHost);
} else if (this.compilationSettings.gatherDiagnostics()) {
this.logger = new DiagnosticsLogger(this.ioHost);
} else {
this.logger = new TypeScript.NullLogger();
}
if (this.compilationSettings.watch()) {
this.watchFiles();
return;
}
this.resolve();
this.compile();
if (this.compilationSettings.createFileLog()) {
this.logger.log("Compilation settings:");
this.logger.log(" propagateEnumConstants " + this.compilationSettings.propagateEnumConstants());
this.logger.log(" removeComments " + this.compilationSettings.removeComments());
this.logger.log(" watch " + this.compilationSettings.watch());
this.logger.log(" noResolve " + this.compilationSettings.noResolve());
this.logger.log(" noImplicitAny " + this.compilationSettings.noImplicitAny());
this.logger.log(" nolib " + this.compilationSettings.noLib());
this.logger.log(" target " + this.compilationSettings.codeGenTarget());
this.logger.log(" module " + this.compilationSettings.moduleGenTarget());
this.logger.log(" out " + this.compilationSettings.outFileOption());
this.logger.log(" outDir " + this.compilationSettings.outDirOption());
this.logger.log(" sourcemap " + this.compilationSettings.mapSourceFiles());
this.logger.log(" mapRoot " + this.compilationSettings.mapRoot());
this.logger.log(" sourceroot " + this.compilationSettings.sourceRoot());
this.logger.log(" declaration " + this.compilationSettings.generateDeclarationFiles());
this.logger.log(" useCaseSensitiveFileResolution " + this.compilationSettings.useCaseSensitiveFileResolution());
this.logger.log(" diagnostics " + this.compilationSettings.gatherDiagnostics());
this.logger.log(" codepage " + this.compilationSettings.codepage());
this.logger.log("");
this.logger.log("Input files:");
this.inputFiles.forEach(function (file) {
_this.logger.log(" " + file);
});
this.logger.log("");
this.logger.log("Resolved Files:");
this.resolvedFiles.forEach(function (file) {
file.importedFiles.forEach(function (file) {
_this.logger.log(" " + file);
});
file.referencedFiles.forEach(function (file) {
_this.logger.log(" " + file);
});
});
}
if (this.compilationSettings.gatherDiagnostics()) {
this.logger.log("");
this.logger.log("File resolution time: " + TypeScript.fileResolutionTime);
this.logger.log(" file read: " + TypeScript.fileResolutionIOTime);
this.logger.log(" scan imports: " + TypeScript.fileResolutionScanImportsTime);
this.logger.log(" import search: " + TypeScript.fileResolutionImportFileSearchTime);
this.logger.log(" get lib.d.ts: " + TypeScript.fileResolutionGetDefaultLibraryTime);
this.logger.log("SyntaxTree parse time: " + TypeScript.syntaxTreeParseTime);
this.logger.log("Syntax Diagnostics time: " + TypeScript.syntaxDiagnosticsTime);
this.logger.log("AST translation time: " + TypeScript.astTranslationTime);
this.logger.log("");
this.logger.log("Type check time: " + TypeScript.typeCheckTime);
this.logger.log("");
this.logger.log("Emit time: " + TypeScript.emitTime);
this.logger.log("Declaration emit time: " + TypeScript.declarationEmitTime);
this.logger.log("Total number of symbols created: " + TypeScript.pullSymbolID);
this.logger.log("Specialized types created: " + TypeScript.nSpecializationsCreated);
this.logger.log("Specialized signatures created: " + TypeScript.nSpecializedSignaturesCreated);
this.logger.log(" IsExternallyVisibleTime: " + TypeScript.declarationEmitIsExternallyVisibleTime);
this.logger.log(" TypeSignatureTime: " + TypeScript.declarationEmitTypeSignatureTime);
this.logger.log(" GetBoundDeclTypeTime: " + TypeScript.declarationEmitGetBoundDeclTypeTime);
this.logger.log(" IsOverloadedCallSignatureTime: " + TypeScript.declarationEmitIsOverloadedCallSignatureTime);
this.logger.log(" FunctionDeclarationGetSymbolTime: " + TypeScript.declarationEmitFunctionDeclarationGetSymbolTime);
this.logger.log(" GetBaseTypeTime: " + TypeScript.declarationEmitGetBaseTypeTime);
this.logger.log(" GetAccessorFunctionTime: " + TypeScript.declarationEmitGetAccessorFunctionTime);
this.logger.log(" GetTypeParameterSymbolTime: " + TypeScript.declarationEmitGetTypeParameterSymbolTime);
this.logger.log(" GetImportDeclarationSymbolTime: " + TypeScript.declarationEmitGetImportDeclarationSymbolTime);
this.logger.log("Emit write file time: " + TypeScript.emitWriteFileTime);
this.logger.log("Compiler resolve path time: " + TypeScript.compilerResolvePathTime);
this.logger.log("Compiler directory name time: " + TypeScript.compilerDirectoryNameTime);
this.logger.log("Compiler directory exists time: " + TypeScript.compilerDirectoryExistsTime);
this.logger.log("Compiler file exists time: " + TypeScript.compilerFileExistsTime);
this.logger.log("IO host resolve path time: " + TypeScript.ioHostResolvePathTime);
this.logger.log("IO host directory name time: " + TypeScript.ioHostDirectoryNameTime);
this.logger.log("IO host create directory structure time: " + TypeScript.ioHostCreateDirectoryStructureTime);
this.logger.log("IO host write file time: " + TypeScript.ioHostWriteFileTime);
this.logger.log("Node make directory time: " + TypeScript.nodeMakeDirectoryTime);
this.logger.log("Node writeFileSync time: " + TypeScript.nodeWriteFileSyncTime);
this.logger.log("Node createBuffer time: " + TypeScript.nodeCreateBufferTime);
}
}
this.ioHost.quit(this.hasErrors ? 1 : 0);
};
BatchCompiler.prototype.resolve = function () {
var _this = this;
var includeDefaultLibrary = !this.compilationSettings.noLib();
var resolvedFiles = [];
var start = new Date().getTime();
if (!this.compilationSettings.noResolve()) {
var resolutionResults = TypeScript.ReferenceResolver.resolve(this.inputFiles, this, this.compilationSettings.useCaseSensitiveFileResolution());
resolvedFiles = resolutionResults.resolvedFiles;
includeDefaultLibrary = !this.compilationSettings.noLib() && !resolutionResults.seenNoDefaultLibTag;
resolutionResults.diagnostics.forEach(function (d) {
return _this.addDiagnostic(d);
});
} else {
for (var i = 0, n = this.inputFiles.length; i < n; i++) {
var inputFile = this.inputFiles[i];
var referencedFiles = [];
var importedFiles = [];
if (this.compilationSettings.generateDeclarationFiles()) {
var references = TypeScript.getReferencedFiles(inputFile, this.getScriptSnapshot(inputFile));
for (var j = 0; j < references.length; j++) {
referencedFiles.push(references[j].path);
}
inputFile = this.resolvePath(inputFile);
}
resolvedFiles.push({
path: inputFile,
referencedFiles: referencedFiles,
importedFiles: importedFiles
});
}
}
var defaultLibStart = new Date().getTime();
if (includeDefaultLibrary) {
var libraryResolvedFile = {
path: this.getDefaultLibraryFilePath(),
referencedFiles: [],
importedFiles: []
};
resolvedFiles = [libraryResolvedFile].concat(resolvedFiles);
}
TypeScript.fileResolutionGetDefaultLibraryTime += new Date().getTime() - defaultLibStart;
this.resolvedFiles = resolvedFiles;
TypeScript.fileResolutionTime = new Date().getTime() - start;
};
BatchCompiler.prototype.compile = function () {
var _this = this;
var compiler = new TypeScript.TypeScriptCompiler(this.logger, this.compilationSettings);
this.resolvedFiles.forEach(function (resolvedFile) {
var sourceFile = _this.getSourceFile(resolvedFile.path);
compiler.addFile(resolvedFile.path, sourceFile.scriptSnapshot, sourceFile.byteOrderMark, 0, false, resolvedFile.referencedFiles);
});
for (var it = compiler.compile(function (path) {
return _this.resolvePath(path);
}); it.moveNext();) {
var result = it.current();
result.diagnostics.forEach(function (d) {
return _this.addDiagnostic(d);
});
if (!this.tryWriteOutputFiles(result.outputFiles)) {
return;
}
}
};
BatchCompiler.prototype.parseOptions = function () {
var _this = this;
var opts = new TypeScript.OptionsParser(this.ioHost, this.compilerVersion);
var mutableSettings = new TypeScript.CompilationSettings();
opts.option('out', {
usage: {
locCode: TypeScript.DiagnosticCode.Concatenate_and_emit_output_to_single_file,
args: null
},
type: TypeScript.DiagnosticCode.file2,
set: function (str) {
mutableSettings.outFileOption = str;
}
});
opts.option('outDir', {
usage: {
locCode: TypeScript.DiagnosticCode.Redirect_output_structure_to_the_directory,
args: null
},
type: TypeScript.DiagnosticCode.DIRECTORY,
set: function (str) {
mutableSettings.outDirOption = str;
}
});
opts.flag('sourcemap', {
usage: {
locCode: TypeScript.DiagnosticCode.Generates_corresponding_0_file,
args: ['.map']
},
set: function () {
mutableSettings.mapSourceFiles = true;
}
});
opts.option('mapRoot', {
usage: {
locCode: TypeScript.DiagnosticCode.Specifies_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations,
args: null
},
type: TypeScript.DiagnosticCode.LOCATION,
set: function (str) {
mutableSettings.mapRoot = str;
}
});
opts.option('sourceRoot', {
usage: {
locCode: TypeScript.DiagnosticCode.Specifies_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations,
args: null
},
type: TypeScript.DiagnosticCode.LOCATION,
set: function (str) {
mutableSettings.sourceRoot = str;
}
});
opts.flag('declaration', {
usage: {
locCode: TypeScript.DiagnosticCode.Generates_corresponding_0_file,
args: ['.d.ts']
},
set: function () {
mutableSettings.generateDeclarationFiles = true;
}
}, 'd');
if (this.ioHost.watchFile) {
opts.flag('watch', {
usage: {
locCode: TypeScript.DiagnosticCode.Watch_input_files,
args: null
},
set: function () {
mutableSettings.watch = true;
}
}, 'w');
}
opts.flag('propagateEnumConstants', {
experimental: true,
set: function () {
mutableSettings.propagateEnumConstants = true;
}
});
opts.flag('removeComments', {
usage: {
locCode: TypeScript.DiagnosticCode.Do_not_emit_comments_to_output,
args: null
},
set: function () {
mutableSettings.removeComments = true;
}
});
opts.flag('noResolve', {
experimental: true,
usage: {
locCode: TypeScript.DiagnosticCode.Skip_resolution_and_preprocessing,
args: null
},
set: function () {
mutableSettings.noResolve = true;
}
});
opts.flag('noLib', {
experimental: true,
set: function () {
mutableSettings.noLib = true;
}
});
opts.flag('diagnostics', {
experimental: true,
set: function () {
mutableSettings.gatherDiagnostics = true;
}
});
opts.flag('logFile', {
experimental: true,
set: function () {
mutableSettings.createFileLog = true;
}
});
opts.option('target', {
usage: {
locCode: TypeScript.DiagnosticCode.Specify_ECMAScript_target_version_0_default_or_1,
args: ['ES3', 'ES5']
},
type: TypeScript.DiagnosticCode.VERSION,
set: function (type) {
type = type.toLowerCase();
if (type === 'es3') {
mutableSettings.codeGenTarget = 0 /* EcmaScript3 */;
} else if (type === 'es5') {
mutableSettings.codeGenTarget = 1 /* EcmaScript5 */;
} else {
_this.addDiagnostic(new TypeScript.Diagnostic(null, null, 0, 0, TypeScript.DiagnosticCode.ECMAScript_target_version_0_not_supported_Specify_a_valid_target_version_1_default_or_2, [type, "ES3", "ES5"]));
}
}
}, 't');
opts.option('module', {
usage: {
locCode: TypeScript.DiagnosticCode.Specify_module_code_generation_0_or_1,
args: ['commonjs', 'amd']
},
type: TypeScript.DiagnosticCode.KIND,
set: function (type) {
type = type.toLowerCase();
if (type === 'commonjs') {
mutableSettings.moduleGenTarget = 1 /* Synchronous */;
} else if (type === 'amd') {
mutableSettings.moduleGenTarget = 2 /* Asynchronous */;
} else {
_this.addDiagnostic(new TypeScript.Diagnostic(null, null, 0, 0, TypeScript.DiagnosticCode.Module_code_generation_0_not_supported, [type]));
}
}
}, 'm');
var needsHelp = false;
opts.flag('help', {
usage: {
locCode: TypeScript.DiagnosticCode.Print_this_message,
args: null
},
set: function () {
needsHelp = true;
}
}, 'h');
opts.flag('useCaseSensitiveFileResolution', {
experimental: true,
set: function () {
mutableSettings.useCaseSensitiveFileResolution = true;
}
});
var shouldPrintVersionOnly = false;
opts.flag('version', {
usage: {
locCode: TypeScript.DiagnosticCode.Print_the_compiler_s_version_0,
args: [this.compilerVersion]
},
set: function () {
shouldPrintVersionOnly = true;
}
}, 'v');
var locale = null;
opts.option('locale', {
experimental: true,
usage: {
locCode: TypeScript.DiagnosticCode.Specify_locale_for_errors_and_messages_For_example_0_or_1,
args: ['en', 'ja-jp']
},
type: TypeScript.DiagnosticCode.STRING,
set: function (value) {
locale = value;
}
});
opts.flag('noImplicitAny', {
usage: {
locCode: TypeScript.DiagnosticCode.Warn_on_expressions_and_declarations_with_an_implied_any_type,
args: null
},
set: function () {
mutableSettings.noImplicitAny = true;
}
});
if (TypeScript.Environment.supportsCodePage()) {
opts.option('codepage', {
usage: {
locCode: TypeScript.DiagnosticCode.Specify_the_codepage_to_use_when_opening_source_files,
args: null
},
type: TypeScript.DiagnosticCode.NUMBER,
set: function (arg) {
mutableSettings.codepage = parseInt(arg, 10);
}
});
}
opts.parse(this.ioHost.arguments);
this.compilationSettings = TypeScript.ImmutableCompilationSettings.fromCompilationSettings(mutableSettings);
if (locale) {
if (!this.setLocale(locale)) {
return false;
}
}
this.inputFiles.push.apply(this.inputFiles, opts.unnamed);
if (shouldPrintVersionOnly) {
opts.printVersion();
return false;
} else if (this.inputFiles.length === 0 || needsHelp) {
opts.printUsage();
return false;
}
return !this.hasErrors;
};
BatchCompiler.prototype.setLocale = function (locale) {
var matchResult = /^([a-z]+)([_\-]([a-z]+))?$/.exec(locale.toLowerCase());
if (!matchResult) {
this.addDiagnostic(new TypeScript.Diagnostic(null, null, 0, 0, TypeScript.DiagnosticCode.Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1, ['en', 'ja-jp']));
return false;
}
var language = matchResult[1];
var territory = matchResult[3];
if (!this.setLanguageAndTerritory(language, territory) && !this.setLanguageAndTerritory(language, null)) {
this.addDiagnostic(new TypeScript.Diagnostic(null, null, 0, 0, TypeScript.DiagnosticCode.Unsupported_locale_0, [locale]));
return false;
}
return true;
};
BatchCompiler.prototype.setLanguageAndTerritory = function (language, territory) {
var compilerFilePath = this.ioHost.getExecutingFilePath();
var containingDirectoryPath = this.ioHost.dirName(compilerFilePath);
var filePath = TypeScript.IOUtils.combine(containingDirectoryPath, language);
if (territory) {
filePath = filePath + "-" + territory;
}
filePath = this.resolvePath(TypeScript.IOUtils.combine(filePath, "diagnosticMessages.generated.json"));
if (!this.fileExists(filePath)) {
return false;
}
var fileContents = this.ioHost.readFile(filePath, this.compilationSettings.codepage());
TypeScript.LocalizedDiagnosticMessages = JSON.parse(fileContents.contents);
return true;
};
BatchCompiler.prototype.watchFiles = function () {
var _this = this;
if (!this.ioHost.watchFile) {
this.addDiagnostic(new TypeScript.Diagnostic(null, null, 0, 0, TypeScript.DiagnosticCode.Current_host_does_not_support_0_option, ['-w[atch]']));
return;
}
var lastResolvedFileSet = [];
var watchers = {};
var firstTime = true;
var addWatcher = function (fileName) {
if (!watchers[fileName]) {
var watcher = _this.ioHost.watchFile(fileName, onWatchedFileChange);
watchers[fileName] = watcher;
} else {
TypeScript.CompilerDiagnostics.debugPrint("Cannot watch file, it is already watched.");
}
};
var removeWatcher = function (fileName) {
if (watchers[fileName]) {
watchers[fileName].close();
delete watchers[fileName];
} else {
TypeScript.CompilerDiagnostics.debugPrint("Cannot stop watching file, it is not being watched.");
}
};
var onWatchedFileChange = function () {
_this.hasErrors = false;
_this.fileNameToSourceFile = new TypeScript.StringHashTable();
_this.resolve();
var oldFiles = lastResolvedFileSet;
var newFiles = _this.resolvedFiles.map(function (resolvedFile) {
return resolvedFile.path;
}).sort();
var i = 0, j = 0;
while (i < oldFiles.length && j < newFiles.length) {
var compareResult = oldFiles[i].localeCompare(newFiles[j]);
if (compareResult === 0) {
i++;
j++;
} else if (compareResult < 0) {
removeWatcher(oldFiles[i]);
i++;
} else {
addWatcher(newFiles[j]);
j++;
}
}
for (var k = i; k < oldFiles.length; k++) {
removeWatcher(oldFiles[k]);
}
for (k = j; k < newFiles.length; k++) {
addWatcher(newFiles[k]);
}
lastResolvedFileSet = newFiles;
if (!firstTime) {
var fileNames = "";
for (var k = 0; k < lastResolvedFileSet.length; k++) {
fileNames += TypeScript.Environment.newLine + " " + lastResolvedFileSet[k];
}
_this.ioHost.printLine(TypeScript.getLocalizedText(TypeScript.DiagnosticCode.NL_Recompiling_0, [fileNames]));
} else {
firstTime = false;
}
_this.compile();
};
this.ioHost.stderr = this.ioHost.stdout;
onWatchedFileChange();
};
BatchCompiler.prototype.getSourceFile = function (fileName) {
var sourceFile = this.fileNameToSourceFile.lookup(fileName);
if (!sourceFile) {
var fileInformation;
try {
fileInformation = this.ioHost.readFile(fileName, this.compilationSettings.codepage());
} catch (e) {
this.addDiagnostic(new TypeScript.Diagnostic(null, null, 0, 0, TypeScript.DiagnosticCode.Cannot_read_file_0_1, [fileName, e.message]));
fileInformation = new TypeScript.FileInformation("", 0 /* None */);
}
var snapshot = TypeScript.ScriptSnapshot.fromString(fileInformation.contents);
var sourceFile = new SourceFile(snapshot, fileInformation.byteOrderMark);
this.fileNameToSourceFile.add(fileName, sourceFile);
}
return sourceFile;
};
BatchCompiler.prototype.getDefaultLibraryFilePath = function () {
var compilerFilePath = this.ioHost.getExecutingFilePath();
var containingDirectoryPath = this.ioHost.dirName(compilerFilePath);
var libraryFilePath = this.resolvePath(TypeScript.IOUtils.combine(containingDirectoryPath, "lib.d.ts"));
return libraryFilePath;
};
BatchCompiler.prototype.getScriptSnapshot = function (fileName) {
return this.getSourceFile(fileName).scriptSnapshot;
};
BatchCompiler.prototype.resolveRelativePath = function (path, directory) {
var start = new Date().getTime();
var unQuotedPath = TypeScript.stripStartAndEndQuotes(path);
var normalizedPath;
if (TypeScript.isRooted(unQuotedPath) || !directory) {
normalizedPath = unQuotedPath;
} else {
normalizedPath = TypeScript.IOUtils.combine(directory, unQuotedPath);
}
normalizedPath = this.resolvePath(normalizedPath);
normalizedPath = TypeScript.switchToForwardSlashes(normalizedPath);
return normalizedPath;
};
BatchCompiler.prototype.fileExists = function (path) {
var exists = this.fileExistsCache[path];
if (exists === undefined) {
var start = new Date().getTime();
exists = this.ioHost.fileExists(path);
this.fileExistsCache[path] = exists;
TypeScript.compilerFileExistsTime += new Date().getTime() - start;
}
return exists;
};
BatchCompiler.prototype.getParentDirectory = function (path) {
var start = new Date().getTime();
var result = this.ioHost.dirName(path);
TypeScript.compilerDirectoryNameTime += new Date().getTime() - start;
return result;
};
BatchCompiler.prototype.addDiagnostic = function (diagnostic) {
var diagnosticInfo = diagnostic.info();
if (diagnosticInfo.category === 1 /* Error */) {
this.hasErrors = true;
}
this.ioHost.stderr.Write(TypeScript.TypeScriptCompiler.getFullDiagnosticText(diagnostic));
};
BatchCompiler.prototype.tryWriteOutputFiles = function (outputFiles) {
for (var i = 0, n = outputFiles.length; i < n; i++) {
var outputFile = outputFiles[i];
try {
this.writeFile(outputFile.name, outputFile.text, outputFile.writeByteOrderMark);
} catch (e) {
this.addDiagnostic(new TypeScript.Diagnostic(outputFile.name, null, 0, 0, TypeScript.DiagnosticCode.Emit_Error_0, [e.message]));
return false;
}
}
return true;
};
BatchCompiler.prototype.writeFile = function (fileName, contents, writeByteOrderMark) {
var start = new Date().getTime();
TypeScript.IOUtils.writeFileAndFolderStructure(this.ioHost, fileName, contents, writeByteOrderMark);
TypeScript.emitWriteFileTime += new Date().getTime() - start;
};
BatchCompiler.prototype.directoryExists = function (path) {
var start = new Date().getTime();
var result = this.ioHost.directoryExists(path);
TypeScript.compilerDirectoryExistsTime += new Date().getTime() - start;
return result;
};
BatchCompiler.prototype.resolvePath = function (path) {
var cachedValue = this.resolvePathCache[path];
if (!cachedValue) {
var start = new Date().getTime();
cachedValue = this.ioHost.resolvePath(path);
this.resolvePathCache[path] = cachedValue;
TypeScript.compilerResolvePathTime += new Date().getTime() - start;
}
return cachedValue;
};
return BatchCompiler;
})();
TypeScript.BatchCompiler = BatchCompiler;
var batch = new TypeScript.BatchCompiler(TypeScript.IO);
batch.batchCompile();
})(TypeScript || (TypeScript = {}));