gitextract_tmng50ms/ ├── .gitignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── FORMATTING.md ├── LICENSE ├── README.md ├── spec/ │ ├── 00-specification-for-hack.md │ ├── 01-introduction.md │ ├── 02-conformance.md │ ├── 03-terms-and-definitions.md │ ├── 04-basic-concepts.md │ ├── 05-types.md │ ├── 06-constants.md │ ├── 07-variables.md │ ├── 08-conversions.md │ ├── 09-lexical-structure.md │ ├── 10-expressions.md │ ├── 11-statements.md │ ├── 12-script-inclusion.md │ ├── 13-enums.md │ ├── 14-generic-types-methods-and-functions.md │ ├── 15-functions.md │ ├── 16-classes.md │ ├── 17-interfaces.md │ ├── 18-traits.md │ ├── 19-exception-handling.md │ ├── 20-namespaces.md │ ├── 21-attributes.md │ ├── 22-grammar.md │ ├── 23-differences-from-php.md │ ├── 24-bibliography.md │ └── hack-spec-draft.md ├── tests/ │ ├── .hhconfig │ ├── Attributes/ │ │ ├── .hhconfig │ │ ├── __ConsistentConstruct.php │ │ ├── __ConsistentConstruct.php.expect │ │ ├── __Memoize.php │ │ ├── __Memoize.php.expect │ │ ├── __Override.php │ │ ├── __Override.php.expect │ │ ├── attributes.php │ │ └── attributes.php.expect │ ├── Basic_Concepts/ │ │ ├── .hhconfig │ │ ├── program_structure.php │ │ ├── program_structure.php.expectf │ │ ├── top_level_stuff.php │ │ └── top_level_stuff.php.expect │ ├── Classes/ │ │ ├── .hhconfig │ │ ├── Aircraft.php │ │ ├── Aircraft.php.expect │ │ ├── Closure_call.php │ │ ├── Closure_call.php.expectf │ │ ├── Generator_getReturn.php │ │ ├── Generator_getReturn.php.expectf │ │ ├── MathLibrary.php │ │ ├── MathLibrary.php.expect │ │ ├── MathLibrary_test1.php │ │ ├── MathLibrary_test1.php.expect │ │ ├── MyCollection.php │ │ ├── MyCollection.php.expect │ │ ├── MyList.php │ │ ├── MyList.php.expect │ │ ├── PassengerJet.php │ │ ├── PassengerJet.php.expect │ │ ├── Point.php │ │ ├── Point.php.expect │ │ ├── Point2.php │ │ ├── Point2.php.expect │ │ ├── Point_test1.php │ │ ├── Point_test1.php.expect │ │ ├── Serializable.php │ │ ├── Serializable.php.expectf │ │ ├── Serializable_with_untrusted_data.php │ │ ├── Serializable_with_untrusted_data.php.expectf │ │ ├── Vehicle.php │ │ ├── Vehicle.php.expect │ │ ├── Vehicle_test1.php │ │ ├── Vehicle_test1.php.expect │ │ ├── __PHP_Incomplete_Class.php │ │ ├── __PHP_Incomplete_Class.php.expect │ │ ├── abstract_constants.php │ │ ├── abstract_constants.php.expect │ │ ├── cc.php │ │ ├── cc.php.expectf │ │ ├── classes.php │ │ ├── classes.php.expect │ │ ├── cloning.php │ │ ├── cloning.php.expect │ │ ├── constructors.php │ │ ├── constructors.php.expect │ │ ├── destructors.php │ │ ├── destructors.php.expect │ │ ├── dynamic_methods.php │ │ ├── dynamic_methods.php.expect │ │ ├── invoke.php │ │ ├── invoke.php.expect │ │ ├── property_initializer.php │ │ ├── property_initializer.php.expect │ │ ├── require_extends_implements.php │ │ ├── require_extends_implements.php.expectf │ │ ├── sleep_and_wakeup.php │ │ ├── sleep_and_wakeup.php.expectf │ │ ├── test_for_new_types.php │ │ ├── test_for_new_types.php.expectf │ │ ├── type_constants.php │ │ ├── type_constants.php.expect │ │ ├── visibility.php │ │ └── visibility.php.expect │ ├── Collections/ │ │ ├── .hhconfig │ │ ├── collections_intrinsics_list.php │ │ ├── collections_intrinsics_list.php.expect │ │ ├── collections_operations.php │ │ ├── collections_operations.php.expect │ │ ├── vector.php │ │ └── vector.php.expect │ ├── Constants/ │ │ ├── .hhconfig │ │ ├── Testfile.txt │ │ ├── constants.php │ │ ├── constants.php.expect │ │ ├── context_dependent_constants.php │ │ ├── context_dependent_constants.php.expectf │ │ ├── core_predefined_constants.php │ │ └── core_predefined_constants.php.expect │ ├── Enums/ │ │ ├── .hhconfig │ │ ├── enum_constraints.php │ │ ├── enum_constraints.php.expect │ │ ├── enums.php │ │ ├── enums.php.expect │ │ ├── enums_ops.php │ │ ├── enums_ops.php.expect │ │ ├── string_int_equality_problem.php │ │ └── string_int_equality_problem.php.expectf │ ├── Exception_Handling/ │ │ ├── .hhconfig │ │ ├── Exception_class.php │ │ ├── Exception_class.php.expectf │ │ ├── MyRangeException.php │ │ ├── MyRangeException.php.expect │ │ ├── MyRangeException_test1.php │ │ ├── MyRangeException_test1.php.expectf │ │ ├── hierarchy_of_exception_classes.php │ │ ├── hierarchy_of_exception_classes.php.expect │ │ ├── jump_from_catch_or_finally_clause.php │ │ ├── jump_from_catch_or_finally_clause.php.expect │ │ ├── odds_and_ends.php │ │ ├── odds_and_ends.php.expect │ │ ├── set_exception_handler.php │ │ └── set_exception_handler.php.expectf │ ├── Expressions/ │ │ ├── .hhconfig │ │ ├── Additive_Operators/ │ │ │ ├── .hhconfig │ │ │ ├── addition_subtraction_concatenation.php │ │ │ ├── addition_subtraction_concatenation.php.expect │ │ │ ├── array_concatenation.php │ │ │ └── array_concatenation.php.expect │ │ ├── Binary_Logical_Operators/ │ │ │ ├── .hhconfig │ │ │ ├── binary_logical_operators.php │ │ │ └── binary_logical_operators.php.expect │ │ ├── Bitwise_Shift_Operators/ │ │ │ ├── .hhconfig │ │ │ ├── bitwise_shift.php │ │ │ └── bitwise_shift.php.expect │ │ ├── Bitwise_and_or_xor_Operators/ │ │ │ ├── .hhconfig │ │ │ ├── bitwise_and_or_xor.php │ │ │ └── bitwise_and_or_xor.php.expect │ │ ├── Coalesce Operator/ │ │ │ ├── coalesce.php │ │ │ └── coalesce.php.expect │ │ ├── Conditional_Operator/ │ │ │ ├── .hhconfig │ │ │ ├── conditional.php │ │ │ └── conditional.php.expect │ │ ├── Equality_Operators/ │ │ │ ├── .hhconfig │ │ │ ├── Testfile1.txt │ │ │ ├── Testfile2.txt │ │ │ ├── comparisons.php │ │ │ ├── comparisons.php.expect │ │ │ ├── equality_comparison_of_objects.php │ │ │ └── equality_comparison_of_objects.php.expect │ │ ├── Instanceof_Operator/ │ │ │ ├── .hhconfig │ │ │ ├── instanceof.php │ │ │ └── instanceof.php.expect │ │ ├── Lambda_Expressions/ │ │ │ ├── .hhconfig │ │ │ ├── lambdas.php │ │ │ └── lambdas.php.expectf │ │ ├── Multiplicative_Operators/ │ │ │ ├── .hhconfig │ │ │ ├── multiplication_division_modulus.php │ │ │ └── multiplication_division_modulus.php.expect │ │ ├── Null_safe_method_call/ │ │ │ ├── .hhconfig │ │ │ ├── null_safe_calls.php │ │ │ └── null_safe_calls.php.expect │ │ ├── Pipe_Operator/ │ │ │ ├── pipe.php │ │ │ └── pipe.php.expect │ │ ├── Postfix_Operators/ │ │ │ ├── .hhconfig │ │ │ ├── array_creation.php │ │ │ ├── array_creation.php.expect │ │ │ ├── exponentiation.php │ │ │ ├── exponentiation.php.expect │ │ │ ├── function_call.php │ │ │ ├── function_call.php.expect │ │ │ ├── function_call_with_strict_checking.php │ │ │ ├── function_call_with_strict_checking.php.expectf │ │ │ ├── member_selection_operator.php │ │ │ ├── member_selection_operator.php.expect │ │ │ ├── new.php │ │ │ ├── new.php.expect │ │ │ ├── new_anonymous_classes.php │ │ │ ├── new_anonymous_classes.php.expectf │ │ │ ├── nullable_and_arithmetic.php │ │ │ ├── nullable_and_arithmetic.php.expect │ │ │ ├── nullsafe_member_selection.php │ │ │ ├── nullsafe_member_selection.php.expect │ │ │ ├── post-increment_and_decrement_integer_edge_cases.php │ │ │ ├── post-increment_and_decrement_integer_edge_cases.php.expect │ │ │ ├── post_increment_and_decrement.php │ │ │ ├── post_increment_and_decrement.php.expect │ │ │ ├── scope_resolution_operator.php │ │ │ ├── scope_resolution_operator.php.expectf │ │ │ ├── subscripting.php │ │ │ ├── subscripting.php.expect │ │ │ ├── subscripting_2.php │ │ │ ├── subscripting_2.php.expect │ │ │ └── subscripting_2.php.expectf │ │ ├── Primary_Expressions/ │ │ │ ├── .hhconfig │ │ │ ├── Point.php │ │ │ ├── Point.php.expect │ │ │ ├── Point2.php │ │ │ ├── Point2.php.expect │ │ │ ├── intrinsics_echo.php │ │ │ ├── intrinsics_echo.php.expect │ │ │ ├── intrinsics_exit.php │ │ │ ├── intrinsics_exit.php.expect │ │ │ ├── intrinsics_invariant.php │ │ │ ├── intrinsics_invariant.php.expect │ │ │ ├── intrinsics_list.php │ │ │ ├── intrinsics_list.php.expect │ │ │ ├── listPHP.php │ │ │ ├── listPHP.php.expect │ │ │ ├── primary.php │ │ │ └── primary.php.expect │ │ ├── Relational_Operators/ │ │ │ ├── .hhconfig │ │ │ ├── Testfile1.txt │ │ │ ├── Testfile2.txt │ │ │ ├── combined_comparison.php │ │ │ ├── combined_comparison.php.expectf │ │ │ ├── comparisons.php │ │ │ ├── comparisons.php.expect │ │ │ ├── relational_comparison_of_objects.php │ │ │ └── relational_comparison_of_objects.php.expect │ │ ├── Testfile.txt │ │ ├── Unary_Operators/ │ │ │ ├── .hhconfig │ │ │ ├── cast.php │ │ │ ├── cast.php.expect │ │ │ ├── error_control.php │ │ │ ├── error_control.php.expectf │ │ │ ├── pre-increment_and_decrement.php │ │ │ ├── pre-increment_and_decrement.php.expect │ │ │ ├── pre-increment_and_decrement_integer_edge_cases.php │ │ │ ├── pre-increment_and_decrement_integer_edge_cases.php.expect │ │ │ ├── unary_arithmetic_operators.php │ │ │ └── unary_arithmetic_operators.php.expect │ │ ├── Yield_Operator/ │ │ │ ├── .hhconfig │ │ │ ├── yield.php │ │ │ ├── yield.php.expectf │ │ │ ├── yield_from.php │ │ │ └── yield_from.php.expectf │ │ ├── conversions.php │ │ ├── conversions.php.expectf │ │ ├── limits_on_types_in_arithmetic.php │ │ ├── limits_on_types_in_arithmetic.php.expect │ │ ├── yield.php │ │ └── yield.php.expectf │ ├── Functions/ │ │ ├── .hhconfig │ │ ├── TestInc.php │ │ ├── TestInc.php.expect │ │ ├── anonymous_function_name.php │ │ ├── anonymous_function_name.php.expect │ │ ├── anonymous_functions.php │ │ ├── anonymous_functions.php.expectf │ │ ├── anonymous_functions2.php │ │ ├── anonymous_functions2.php.expect │ │ ├── async_functions.php │ │ ├── async_functions.php.expectf │ │ ├── async_functions2.php │ │ ├── async_functions2.php.expect │ │ ├── basics.php │ │ ├── basics.php.expectf │ │ ├── callable_typehint.php │ │ ├── callable_typehint.php.expect │ │ ├── conditionally_defined_function.php │ │ ├── conditionally_defined_function.php.expectf │ │ ├── default_arguments.php │ │ ├── default_arguments.php.expect │ │ ├── noreturn.php │ │ ├── noreturn.php.expect │ │ ├── override_on_return_type.php │ │ ├── override_on_return_type.php.expect │ │ ├── recursion.php │ │ ├── recursion.php.expect │ │ ├── this_play.php │ │ ├── this_play.php.expect │ │ ├── variable_functions.php │ │ └── variable_functions.php.expect │ ├── Generics/ │ │ ├── .hhconfig │ │ ├── Complex.php │ │ ├── Complex.php.expect │ │ ├── Complex_test.php │ │ ├── Complex_test.php.expect │ │ ├── Interface_Support.php │ │ ├── Interface_Support.php.expect │ │ ├── MyVector.php │ │ ├── MyVector.php.expect │ │ ├── MyVector_test.php │ │ ├── MyVector_test.php.expect │ │ ├── Stack.php │ │ ├── Stack.php.expect │ │ ├── Stack_test.php │ │ ├── Stack_test.php.expect │ │ ├── constraints.php │ │ ├── constraints.php.expect │ │ ├── contravariance_example.php │ │ ├── contravariance_example.php.expect │ │ ├── covariance_example.php │ │ ├── covariance_example.php.expect │ │ ├── generic_function.php │ │ ├── generic_function.php.expect │ │ ├── generics.php │ │ └── generics.php.expect │ ├── Interfaces/ │ │ ├── .hhconfig │ │ ├── MyCollection.php │ │ ├── MyCollection.php.expect │ │ ├── MyList.php │ │ ├── MyList.php.expect │ │ ├── MyQueue.php │ │ ├── MyQueue.php.expect │ │ ├── interface_requirements.php │ │ ├── interface_requirements.php.expect │ │ ├── interfaces.php │ │ ├── interfaces.php.expect │ │ ├── qq.php │ │ └── qq.php.expect │ ├── Lexical_Structure/ │ │ ├── .hhconfig │ │ ├── Tokens/ │ │ │ ├── .hhconfig │ │ │ ├── array_literals.php │ │ │ ├── array_literals.php.expect │ │ │ ├── heredoc_string_literals.php │ │ │ ├── heredoc_string_literals.php.expect │ │ │ ├── integer_literals_edge_cases.php │ │ │ ├── integer_literals_edge_cases.php.expect │ │ │ ├── name_case_sensitivity.php │ │ │ ├── name_case_sensitivity.php.expectf │ │ │ ├── names.php │ │ │ ├── names.php.expect │ │ │ ├── nowdoc_string_literals.php │ │ │ ├── nowdoc_string_literals.php.expect │ │ │ ├── string_literals.php │ │ │ ├── string_literals.php.expect │ │ │ ├── unicode_escape_sequences.php │ │ │ └── unicode_escape_sequences.php.expect │ │ ├── comments.php │ │ ├── comments.php.expect │ │ ├── keywords.php │ │ └── keywords.php.expect │ ├── Namespaces/ │ │ ├── .hhconfig │ │ ├── Circle.php │ │ ├── Circle.php.expect │ │ ├── Point.php │ │ ├── Point.php.expect │ │ ├── namespaces1.php │ │ ├── namespaces1.php.expect │ │ ├── namespaces2.php │ │ ├── namespaces2.php.expectf │ │ ├── namespaces2_test.php │ │ ├── namespaces2_test.php.expectf │ │ ├── use_groups.php │ │ ├── use_groups.php.expectf │ │ ├── use_groups_require_file.php │ │ ├── use_groups_require_file.php.expect │ │ ├── using_namespaces_1.php │ │ ├── using_namespaces_1.php.expect │ │ ├── using_namespaces_3.php │ │ ├── using_namespaces_3.php.expect │ │ ├── using_namespaces_3_test.php │ │ └── using_namespaces_3_test.php.expect │ ├── Nullable_Types/ │ │ ├── .hhconfig │ │ ├── conversions.php │ │ ├── conversions.php.expectf │ │ ├── nullables.php │ │ └── nullables.php.expect │ ├── Script_Inclusion/ │ │ ├── .hhconfig │ │ ├── Circle.php │ │ ├── Circle.php.expect │ │ ├── Point.php │ │ ├── Point.php.expect │ │ ├── Positions.php │ │ ├── Positions.php.expect │ │ ├── limits.php │ │ ├── limits.php.expect │ │ ├── mycolors.php │ │ ├── mycolors.php.expect │ │ ├── require.php │ │ ├── require.php.expectf │ │ ├── require_once.php │ │ ├── require_once.php.expectf │ │ ├── return_none.php │ │ ├── return_none.php.expect │ │ ├── return_with_value.php │ │ └── return_with_value.php.expect │ ├── Serialization/ │ │ ├── .hhconfig │ │ ├── Point.php │ │ ├── Point.php.expectf │ │ ├── serialize.php │ │ └── serialize.php.expectf │ ├── Shapes/ │ │ ├── .hhconfig │ │ ├── shapes.php │ │ ├── shapes.php.expect │ │ ├── shapes_rf.php │ │ └── shapes_rf.php.expect │ ├── Statements/ │ │ ├── .hhconfig │ │ ├── Iteration/ │ │ │ ├── .hhconfig │ │ │ ├── do.php │ │ │ ├── do.php.expect │ │ │ ├── for.php │ │ │ ├── for.php.expect │ │ │ ├── foreach.php │ │ │ ├── foreach.php.expect │ │ │ ├── while.php │ │ │ └── while.php.expect │ │ ├── Jump/ │ │ │ ├── .hhconfig │ │ │ ├── break.php │ │ │ ├── break.php.expect │ │ │ ├── continue.php │ │ │ └── continue.php.expect │ │ ├── Selection/ │ │ │ ├── .hhconfig │ │ │ ├── if.php │ │ │ ├── if.php.expectf │ │ │ ├── switch.php │ │ │ └── switch.php.expect │ │ ├── expression_statement.php │ │ └── expression_statement.php.expect │ ├── Traits/ │ │ ├── .hhconfig │ │ ├── trait_implements_interface.php │ │ ├── trait_implements_interface.php.expect │ │ ├── trait_requirements.php │ │ ├── trait_requirements.php.expect │ │ ├── traits.php │ │ └── traits.php.expect │ ├── Tuples/ │ │ ├── .hhconfig │ │ ├── tuples.php │ │ └── tuples.php.expect │ ├── Types/ │ │ ├── .hhconfig │ │ ├── Issue_109.php │ │ ├── Issue_109.php.expectf │ │ ├── Issue_110.php │ │ ├── Issue_110.php.expect │ │ ├── Testfile.txt │ │ ├── arraykey.php │ │ ├── arraykey.php.expect │ │ ├── arrays.php │ │ ├── arrays.php.expectf │ │ ├── arrays2.php │ │ ├── arrays2.php.expectf │ │ ├── bool.php │ │ ├── bool.php.expect │ │ ├── classname.php │ │ ├── classname.php.expect │ │ ├── closure.php │ │ ├── closure.php.expect │ │ ├── determined_type.php │ │ ├── determined_type.php.expect │ │ ├── enum.php │ │ ├── enum.php.expect │ │ ├── float.php │ │ ├── float.php.expect │ │ ├── int.php │ │ ├── int.php.expect │ │ ├── mixed.php │ │ ├── mixed.php.expect │ │ ├── nullables.php │ │ ├── nullables.php.expect │ │ ├── num.php │ │ ├── num.php.expect │ │ ├── numeric_like_strings.php │ │ ├── numeric_like_strings.php.expect │ │ ├── numeric_strings.php │ │ ├── numeric_strings.php.expect │ │ ├── resources.php │ │ ├── resources.php.expectf │ │ ├── scalar_general.php │ │ ├── scalar_general.php.expectf │ │ ├── shape_specific_functions.php │ │ ├── shape_specific_functions.php.expect │ │ ├── shape_subtyping.php │ │ ├── shape_subtyping.php.expect │ │ ├── shapes.php │ │ ├── shapes.php.expect │ │ ├── shapes.php.expectf │ │ ├── shapes2.php │ │ ├── shapes2.php.expectf │ │ ├── shapes_rf.php │ │ ├── shapes_rf.php.expect │ │ ├── string.php │ │ ├── string.php.expect │ │ ├── this.php │ │ ├── this.php.expectf │ │ ├── tuple.php │ │ ├── tuple.php.expect │ │ ├── type_aliases.php │ │ ├── type_aliases.php.expectf │ │ ├── type_aliases_rf.php │ │ ├── type_aliases_rf.php.expectf │ │ ├── type_inferencing.php │ │ ├── type_inferencing.php.expect │ │ ├── type_side_effects.php │ │ ├── type_side_effects.php.expect │ │ ├── void.php │ │ └── void.php.expect │ └── Variables/ │ ├── .hhconfig │ ├── placeholder_variable.php │ ├── placeholder_variable.php.expect │ ├── predefined_variables.php │ ├── predefined_variables.php.expect │ ├── variable_kinds.php │ └── variable_kinds.php.expect └── tools/ ├── README.md ├── add_hh_fixme_to_tests.php ├── add_language_to_code_blocks.php ├── create_test_expect_files.php ├── split.php ├── toc.php └── xreference/ ├── README.md ├── section_map.csv └── xreference.php