Copy disabled (too large)
Download .txt
Showing preview only (98,892K chars total). Download the full file to get everything.
Repository: swoole/swoole-cli
Branch: main
Commit: 758b48d93fce
Files: 22009
Total size: 106.2 MB
Directory structure:
gitextract_r7u7qvcd/
├── .clang-format
├── .dockerignore
├── .editorconfig
├── .gdbinit
├── .gitattributes
├── .github/
│ └── workflows/
│ ├── artifact-hash.yml
│ ├── auto-cache-pool-tarball.yml
│ ├── build-alpine-builder-container.sh
│ ├── linux-aarch64.yml
│ ├── linux-glibc.yml
│ ├── linux-x86_64.yml
│ ├── macos-aarch64.yml
│ ├── macos-x86_64.yml
│ ├── runner-images.md
│ ├── windows-cygwin.yml
│ └── windows-msys2.yml
├── .gitignore
├── .gitmodules
├── README.md
├── TSRM/
│ ├── LICENSE
│ ├── TSRM.c
│ ├── TSRM.h
│ ├── config.w32
│ ├── threads.m4
│ ├── tsrm.m4
│ ├── tsrm_win32.c
│ └── tsrm_win32.h
├── Zend/
│ ├── LICENSE
│ ├── Makefile.frag
│ ├── Optimizer/
│ │ ├── block_pass.c
│ │ ├── compact_literals.c
│ │ ├── compact_vars.c
│ │ ├── dce.c
│ │ ├── dfa_pass.c
│ │ ├── escape_analysis.c
│ │ ├── nop_removal.c
│ │ ├── optimize_func_calls.c
│ │ ├── optimize_temp_vars_5.c
│ │ ├── pass1.c
│ │ ├── pass3.c
│ │ ├── sccp.c
│ │ ├── scdf.c
│ │ ├── scdf.h
│ │ ├── ssa_integrity.c
│ │ ├── zend_call_graph.c
│ │ ├── zend_call_graph.h
│ │ ├── zend_cfg.c
│ │ ├── zend_cfg.h
│ │ ├── zend_dfg.c
│ │ ├── zend_dfg.h
│ │ ├── zend_dump.c
│ │ ├── zend_dump.h
│ │ ├── zend_func_info.c
│ │ ├── zend_func_info.h
│ │ ├── zend_func_infos.h
│ │ ├── zend_inference.c
│ │ ├── zend_inference.h
│ │ ├── zend_optimizer.c
│ │ ├── zend_optimizer.h
│ │ ├── zend_optimizer_internal.h
│ │ ├── zend_ssa.c
│ │ ├── zend_ssa.h
│ │ └── zend_worklist.h
│ ├── README.md
│ ├── Zend.m4
│ ├── asm/
│ │ ├── LICENSE
│ │ ├── jump_arm64_aapcs_elf_gas.S
│ │ ├── jump_arm64_aapcs_macho_gas.S
│ │ ├── jump_arm64_aapcs_pe_armasm.asm
│ │ ├── jump_arm_aapcs_elf_gas.S
│ │ ├── jump_arm_aapcs_macho_gas.S
│ │ ├── jump_combined_sysv_macho_gas.S
│ │ ├── jump_i386_ms_pe_masm.asm
│ │ ├── jump_i386_sysv_elf_gas.S
│ │ ├── jump_i386_sysv_macho_gas.S
│ │ ├── jump_loongarch64_sysv_elf_gas.S
│ │ ├── jump_mips32_o32_elf_gas.S
│ │ ├── jump_mips64_n64_elf_gas.S
│ │ ├── jump_ppc32_sysv_elf_gas.S
│ │ ├── jump_ppc32_sysv_macho_gas.S
│ │ ├── jump_ppc32_sysv_xcoff_gas.S
│ │ ├── jump_ppc64_sysv_elf_gas.S
│ │ ├── jump_ppc64_sysv_macho_gas.S
│ │ ├── jump_ppc64_sysv_xcoff_gas.S
│ │ ├── jump_riscv64_sysv_elf_gas.S
│ │ ├── jump_s390x_sysv_elf_gas.S
│ │ ├── jump_sparc64_sysv_elf_gas.S
│ │ ├── jump_x86_64_ms_pe_gas.S
│ │ ├── jump_x86_64_ms_pe_masm.asm
│ │ ├── jump_x86_64_sysv_elf_gas.S
│ │ ├── jump_x86_64_sysv_macho_gas.S
│ │ ├── make_arm64_aapcs_elf_gas.S
│ │ ├── make_arm64_aapcs_macho_gas.S
│ │ ├── make_arm64_aapcs_pe_armasm.asm
│ │ ├── make_arm_aapcs_elf_gas.S
│ │ ├── make_arm_aapcs_macho_gas.S
│ │ ├── make_combined_sysv_macho_gas.S
│ │ ├── make_i386_ms_pe_masm.asm
│ │ ├── make_i386_sysv_elf_gas.S
│ │ ├── make_i386_sysv_macho_gas.S
│ │ ├── make_loongarch64_sysv_elf_gas.S
│ │ ├── make_mips32_o32_elf_gas.S
│ │ ├── make_mips64_n64_elf_gas.S
│ │ ├── make_ppc32_sysv_elf_gas.S
│ │ ├── make_ppc32_sysv_macho_gas.S
│ │ ├── make_ppc32_sysv_xcoff_gas.S
│ │ ├── make_ppc64_sysv_elf_gas.S
│ │ ├── make_ppc64_sysv_macho_gas.S
│ │ ├── make_ppc64_sysv_xcoff_gas.S
│ │ ├── make_riscv64_sysv_elf_gas.S
│ │ ├── make_s390x_sysv_elf_gas.S
│ │ ├── make_sparc64_sysv_elf_gas.S
│ │ ├── make_x86_64_ms_pe_gas.S
│ │ ├── make_x86_64_ms_pe_masm.asm
│ │ ├── make_x86_64_sysv_elf_gas.S
│ │ ├── make_x86_64_sysv_macho_gas.S
│ │ └── save_xmm_x86_64_ms_masm.asm
│ ├── bench.php
│ ├── micro_bench.php
│ ├── tests/
│ │ ├── 001.phpt
│ │ ├── 002.phpt
│ │ ├── 003.phpt
│ │ ├── 004.phpt
│ │ ├── 005.phpt
│ │ ├── 006.phpt
│ │ ├── 008.phpt
│ │ ├── 009.phpt
│ │ ├── 010.phpt
│ │ ├── 011.phpt
│ │ ├── 012.phpt
│ │ ├── 013.phpt
│ │ ├── 014.inc
│ │ ├── 014.phpt
│ │ ├── 015.phpt
│ │ ├── 016.phpt
│ │ ├── 017.phpt
│ │ ├── 018.phpt
│ │ ├── 019.phpt
│ │ ├── 020.phpt
│ │ ├── 021.phpt
│ │ ├── 022.phpt
│ │ ├── 023.phpt
│ │ ├── 024.phpt
│ │ ├── 025.phpt
│ │ ├── 026.phpt
│ │ ├── 027.phpt
│ │ ├── 028.phpt
│ │ ├── 029.phpt
│ │ ├── 030.phpt
│ │ ├── 031.phpt
│ │ ├── 032.phpt
│ │ ├── 033.phpt
│ │ ├── 034.phpt
│ │ ├── 035.phpt
│ │ ├── 036.phpt
│ │ ├── 037.phpt
│ │ ├── 038.phpt
│ │ ├── 67468.phpt
│ │ ├── ArrayAccess_indirect_append.phpt
│ │ ├── ErrorException_construct.phpt
│ │ ├── ErrorException_getSeverity.phpt
│ │ ├── abstract-static.phpt
│ │ ├── abstract_inheritance_001.phpt
│ │ ├── abstract_inheritance_002.phpt
│ │ ├── abstract_inheritance_003.phpt
│ │ ├── access_modifiers_001.phpt
│ │ ├── access_modifiers_002.phpt
│ │ ├── access_modifiers_003.phpt
│ │ ├── access_modifiers_004.phpt
│ │ ├── access_modifiers_005.phpt
│ │ ├── access_modifiers_006.phpt
│ │ ├── access_modifiers_007.phpt
│ │ ├── access_modifiers_008.phpt
│ │ ├── access_modifiers_009.phpt
│ │ ├── access_modifiers_010.phpt
│ │ ├── access_modifiers_011.phpt
│ │ ├── access_modifiers_012.phpt
│ │ ├── access_modifiers_013.phpt
│ │ ├── add_001.phpt
│ │ ├── add_002.phpt
│ │ ├── add_003.phpt
│ │ ├── add_004.phpt
│ │ ├── add_005.phpt
│ │ ├── add_006.phpt
│ │ ├── add_007.phpt
│ │ ├── add_optional_by_ref_arg.phpt
│ │ ├── allow_dynamic_properties_on_enum.phpt
│ │ ├── allow_dynamic_properties_on_interface.phpt
│ │ ├── allow_dynamic_properties_on_trait.phpt
│ │ ├── alternative_offset_syntax_compile_error_in_const_expr.phpt
│ │ ├── alternative_offset_syntax_compile_error_outside_const_expr.phpt
│ │ ├── alternative_offset_syntax_in_encaps_string.phpt
│ │ ├── and_001.phpt
│ │ ├── anon/
│ │ │ ├── 001.phpt
│ │ │ ├── 002.phpt
│ │ │ ├── 003.phpt
│ │ │ ├── 004.phpt
│ │ │ ├── 005.phpt
│ │ │ ├── 006.phpt
│ │ │ ├── 007.phpt
│ │ │ ├── 008.phpt
│ │ │ ├── 009.phpt
│ │ │ ├── 010.phpt
│ │ │ ├── 011.phpt
│ │ │ ├── 012.phpt
│ │ │ ├── 013.phpt
│ │ │ ├── 014.phpt
│ │ │ ├── 015.phpt
│ │ │ └── 016.phpt
│ │ ├── anon_class_name.phpt
│ │ ├── arg_unpack/
│ │ │ ├── basic.phpt
│ │ │ ├── by_ref.phpt
│ │ │ ├── by_ref_separation.phpt
│ │ │ ├── dynamic.phpt
│ │ │ ├── internal.phpt
│ │ │ ├── invalid_type.phpt
│ │ │ ├── many_args.phpt
│ │ │ ├── method.phpt
│ │ │ ├── new.phpt
│ │ │ ├── non_integer_keys.phpt
│ │ │ ├── positional_arg_after_unpack_error.phpt
│ │ │ ├── string_keys.phpt
│ │ │ ├── traversable_throwing_exception.phpt
│ │ │ └── traversable_with_by_ref_parameters.phpt
│ │ ├── arginfo_zpp_mismatch.inc
│ │ ├── arginfo_zpp_mismatch.phpt
│ │ ├── arginfo_zpp_mismatch_strict.phpt
│ │ ├── argument_restriction_001.phpt
│ │ ├── argument_restriction_002.phpt
│ │ ├── argument_restriction_003.phpt
│ │ ├── argument_restriction_004.phpt
│ │ ├── argument_restriction_005.phpt
│ │ ├── argument_restriction_006.phpt
│ │ ├── array_add_indirect.phpt
│ │ ├── array_addition_not_commutative.phpt
│ │ ├── array_append_COW.phpt
│ │ ├── array_hash_zero.phpt
│ │ ├── array_literal_next_element_error.phpt
│ │ ├── array_merge_recursive_next_key_overflow.phpt
│ │ ├── array_multisort_exception.phpt
│ │ ├── array_offset.phpt
│ │ ├── array_offset_002.phpt
│ │ ├── array_self_add_globals.phpt
│ │ ├── array_splice_empty_ht_iter_removal.phpt
│ │ ├── array_unpack/
│ │ │ ├── already_occupied.phpt
│ │ │ ├── basic.phpt
│ │ │ ├── classes.phpt
│ │ │ ├── gh19303.phpt
│ │ │ ├── gh9769.phpt
│ │ │ ├── in_destructuring.phpt
│ │ │ ├── in_destructuring_2.phpt
│ │ │ ├── non_integer_keys.phpt
│ │ │ ├── ref1.phpt
│ │ │ ├── string_keys.phpt
│ │ │ ├── undef_var.phpt
│ │ │ ├── unpack_invalid_type_compile_time.phpt
│ │ │ └── unpack_string_keys_compile_time.phpt
│ │ ├── array_unpack_string_keys.phpt
│ │ ├── array_unshift_COW.phpt
│ │ ├── array_with_refs_identical.phpt
│ │ ├── arrow_functions/
│ │ │ ├── 001.phpt
│ │ │ ├── 002.phpt
│ │ │ ├── 003.phpt
│ │ │ ├── 004.phpt
│ │ │ ├── 005.phpt
│ │ │ ├── 006.phpt
│ │ │ ├── 007.phpt
│ │ │ └── 008.phpt
│ │ ├── assert/
│ │ │ ├── bug70528.phpt
│ │ │ ├── disable_assert_function.phpt
│ │ │ ├── expect_001.phpt
│ │ │ ├── expect_002.phpt
│ │ │ ├── expect_003.phpt
│ │ │ ├── expect_004.phpt
│ │ │ ├── expect_005.phpt
│ │ │ ├── expect_006.phpt
│ │ │ ├── expect_007.phpt
│ │ │ ├── expect_008.phpt
│ │ │ ├── expect_009.phpt
│ │ │ ├── expect_010.phpt
│ │ │ ├── expect_011.phpt
│ │ │ ├── expect_012.phpt
│ │ │ ├── expect_013.phpt
│ │ │ ├── expect_014.phpt
│ │ │ ├── expect_015.phpt
│ │ │ ├── expect_016.phpt
│ │ │ ├── expect_017.phpt
│ │ │ ├── expect_018.phpt
│ │ │ ├── expect_019.phpt
│ │ │ ├── expect_020.phpt
│ │ │ └── expect_empty_stmt_bug.phpt
│ │ ├── assign_by_val_function_by_ref_return_value.phpt
│ │ ├── assign_coalesce_001.phpt
│ │ ├── assign_coalesce_002.phpt
│ │ ├── assign_coalesce_003.phpt
│ │ ├── assign_coalesce_004.phpt
│ │ ├── assign_coalesce_005.phpt
│ │ ├── assign_coalesce_006.phpt
│ │ ├── assign_coalesce_007.phpt
│ │ ├── assign_coalesce_008.phpt
│ │ ├── assign_coalesce_009.phpt
│ │ ├── assign_concat_array_empty_string.phpt
│ │ ├── assign_dim_obj_null_return.phpt
│ │ ├── assign_dim_op_same_var.phpt
│ │ ├── assign_dim_op_undef.phpt
│ │ ├── assign_dim_ref_free.phpt
│ │ ├── assign_obj_op_cache_slot.phpt
│ │ ├── assign_obj_ref_byval_function.phpt
│ │ ├── assign_obj_ref_return.phpt
│ │ ├── assign_obj_to_ref_inference.phpt
│ │ ├── assign_op_type_error.phpt
│ │ ├── assign_ref_error_var_handling.phpt
│ │ ├── assign_ref_func_leak.phpt
│ │ ├── assign_ref_to_overloaded_prop.phpt
│ │ ├── assign_to_obj_001.phpt
│ │ ├── assign_to_obj_002.phpt
│ │ ├── assign_to_var_001.phpt
│ │ ├── assign_to_var_002.phpt
│ │ ├── assign_to_var_003.phpt
│ │ ├── assign_to_var_004.phpt
│ │ ├── assign_typed_ref_result.phpt
│ │ ├── ast/
│ │ │ ├── ast_serialize_backtick_literal.phpt
│ │ │ ├── ast_serialize_floats.phpt
│ │ │ └── zend-pow-assign.phpt
│ │ ├── ast_serialize_backtick_literal.phpt
│ │ ├── asymmetric_visibility/
│ │ │ ├── __set.phpt
│ │ │ ├── __unset.phpt
│ │ │ ├── ast_printing.phpt
│ │ │ ├── bug001.phpt
│ │ │ ├── bug002.phpt
│ │ │ ├── bug003.phpt
│ │ │ ├── bug004.phpt
│ │ │ ├── cpp_no_type.phpt
│ │ │ ├── cpp_private.phpt
│ │ │ ├── cpp_protected.phpt
│ │ │ ├── cpp_wider_set_scope.phpt
│ │ │ ├── decrease_scope_private_private.phpt
│ │ │ ├── decrease_scope_private_protected.phpt
│ │ │ ├── decrease_scope_protected_protected.phpt
│ │ │ ├── dim_add.phpt
│ │ │ ├── duplicate_modifier.phpt
│ │ │ ├── duplicate_modifier_2.phpt
│ │ │ ├── gh19044.phpt
│ │ │ ├── nested_write.phpt
│ │ │ ├── no_type.phpt
│ │ │ ├── object_reference.phpt
│ │ │ ├── override_private_public.phpt
│ │ │ ├── override_protected_private.phpt
│ │ │ ├── override_protected_public.phpt
│ │ │ ├── override_public_private.phpt
│ │ │ ├── override_public_protected.phpt
│ │ │ ├── private.phpt
│ │ │ ├── protected.phpt
│ │ │ ├── readonly.phpt
│ │ │ ├── reference.phpt
│ │ │ ├── reference_2.phpt
│ │ │ ├── scope_rebinding.phpt
│ │ │ ├── static_props.phpt
│ │ │ ├── unset.phpt
│ │ │ ├── unshared_rw_cache_slot.phpt
│ │ │ ├── variation.phpt
│ │ │ ├── variation_nested.phpt
│ │ │ ├── virtual_get_only.phpt
│ │ │ └── virtual_set_only.phpt
│ │ ├── attributes/
│ │ │ ├── 001_placement.phpt
│ │ │ ├── 002_rfcexample.phpt
│ │ │ ├── 003_ast_nodes.phpt
│ │ │ ├── 004_name_resolution.phpt
│ │ │ ├── 005_objects.phpt
│ │ │ ├── 006_filter.phpt
│ │ │ ├── 007_self_reflect_attribute.phpt
│ │ │ ├── 008_wrong_attribution.phpt
│ │ │ ├── 009_doctrine_annotations_example.phpt
│ │ │ ├── 010_unsupported_const_expression.phpt
│ │ │ ├── 011_inheritance.phpt
│ │ │ ├── 012_ast_export.phpt
│ │ │ ├── 013_class_scope.phpt
│ │ │ ├── 014_class_const_group.phpt
│ │ │ ├── 015_property_group.phpt
│ │ │ ├── 016_custom_attribute_validation.phpt
│ │ │ ├── 017_closure_scope.phpt
│ │ │ ├── 018_fatal_error_in_argument.phpt
│ │ │ ├── 019_variable_attribute_name.phpt
│ │ │ ├── 020_userland_attribute_validation.phpt
│ │ │ ├── 021_attribute_flags_type_is_validated.phpt
│ │ │ ├── 022_attribute_flags_value_is_validated.phpt
│ │ │ ├── 023_ast_node_in_validation.phpt
│ │ │ ├── 024_internal_target_validation.phpt
│ │ │ ├── 025_internal_repeatable_validation.phpt
│ │ │ ├── 026_unpack_in_args.phpt
│ │ │ ├── 027_trailing_comma_args.phpt
│ │ │ ├── 028_grouped.phpt
│ │ │ ├── 029_reflect_internal_symbols.phpt
│ │ │ ├── 030_strict_types.inc
│ │ │ ├── 030_strict_types.phpt
│ │ │ ├── 031_backtrace.phpt
│ │ │ ├── 032_attribute_validation_scope.phpt
│ │ │ ├── 033_attribute_flags_type_is_not_validated_at_comp_time.phpt
│ │ │ ├── deprecated/
│ │ │ │ ├── class_constants/
│ │ │ │ │ ├── 001.phpt
│ │ │ │ │ ├── 101.phpt
│ │ │ │ │ ├── deprecated_constant_as_message_001.phpt
│ │ │ │ │ ├── deprecated_constant_as_message_002.phpt
│ │ │ │ │ ├── deprecated_constant_as_message_003.phpt
│ │ │ │ │ ├── error_code_001.phpt
│ │ │ │ │ ├── gh17711.phpt
│ │ │ │ │ └── value_unknown_at_compile_time_001.phpt
│ │ │ │ ├── functions/
│ │ │ │ │ ├── 001.phpt
│ │ │ │ │ ├── deprecated_handler_001.phpt
│ │ │ │ │ ├── deprecated_handler_002.phpt
│ │ │ │ │ ├── deprecated_handler_003.phpt
│ │ │ │ │ ├── error_code_001.phpt
│ │ │ │ │ ├── gh17866.phpt
│ │ │ │ │ ├── magic_call.phpt
│ │ │ │ │ ├── message_004.phpt
│ │ │ │ │ ├── message_005.phpt
│ │ │ │ │ ├── throwing_error_handler_001.phpt
│ │ │ │ │ ├── throwing_error_handler_002.phpt
│ │ │ │ │ └── throwing_error_handler_003.phpt
│ │ │ │ ├── message_001.phpt
│ │ │ │ ├── message_002.phpt
│ │ │ │ ├── message_003.phpt
│ │ │ │ ├── message_004.phpt
│ │ │ │ ├── property_readonly_001.phpt
│ │ │ │ ├── property_readonly_002.phpt
│ │ │ │ ├── property_readonly_003.phpt
│ │ │ │ ├── type_validation_001.phpt
│ │ │ │ ├── type_validation_002.phpt
│ │ │ │ ├── type_validation_003.phpt
│ │ │ │ └── type_validation_004.phpt
│ │ │ ├── gh8421.phpt
│ │ │ ├── ossfuzz371445205.phpt
│ │ │ └── override/
│ │ │ ├── 001.phpt
│ │ │ ├── 002.phpt
│ │ │ ├── 003.phpt
│ │ │ ├── 004.phpt
│ │ │ ├── 005.phpt
│ │ │ ├── 006.phpt
│ │ │ ├── 007.phpt
│ │ │ ├── 008.phpt
│ │ │ ├── 009.phpt
│ │ │ ├── 010.phpt
│ │ │ ├── 011.phpt
│ │ │ ├── 012.phpt
│ │ │ ├── 013.phpt
│ │ │ ├── 014.phpt
│ │ │ ├── 015.phpt
│ │ │ ├── 016.phpt
│ │ │ ├── 017.phpt
│ │ │ ├── 018.phpt
│ │ │ ├── 019.phpt
│ │ │ ├── 020.phpt
│ │ │ ├── 021.phpt
│ │ │ ├── 022.phpt
│ │ │ ├── 023.phpt
│ │ │ ├── 024.phpt
│ │ │ ├── gh12189.phpt
│ │ │ ├── gh12189_2.phpt
│ │ │ ├── gh12189_3.phpt
│ │ │ ├── gh12189_4.phpt
│ │ │ ├── gh12189_5.phpt
│ │ │ └── gh12189_6.phpt
│ │ ├── binary-32bit.phpt
│ │ ├── binary.phpt
│ │ ├── bind_static_exception.phpt
│ │ ├── bitwise_not_precision_exception.phpt
│ │ ├── break_error_001.phpt
│ │ ├── break_error_002.phpt
│ │ ├── break_error_003.phpt
│ │ ├── break_error_004.phpt
│ │ ├── bug18556.phpt
│ │ ├── bug19859.phpt
│ │ ├── bug20240.phpt
│ │ ├── bug20242.phpt
│ │ ├── bug21478.phpt
│ │ ├── bug21888.phpt
│ │ ├── bug22725.phpt
│ │ ├── bug22836.phpt
│ │ ├── bug23104.phpt
│ │ ├── bug24436.phpt
│ │ ├── bug24635.phpt
│ │ ├── bug24699.phpt
│ │ ├── bug24773.phpt
│ │ ├── bug24884.phpt
│ │ ├── bug26010.phpt
│ │ ├── bug26077.phpt
│ │ ├── bug26166.phpt
│ │ ├── bug26229.phpt
│ │ ├── bug26281.phpt
│ │ ├── bug26696.phpt
│ │ ├── bug26697.phpt
│ │ ├── bug26698.phpt
│ │ ├── bug26801.phpt
│ │ ├── bug26802.phpt
│ │ ├── bug27268.phpt
│ │ ├── bug27304.phpt
│ │ ├── bug27598.phpt
│ │ ├── bug27669.phpt
│ │ ├── bug27731.phpt
│ │ ├── bug27798.phpt
│ │ ├── bug28072.phpt
│ │ ├── bug28377.phpt
│ │ ├── bug28442.phpt
│ │ ├── bug28444.phpt
│ │ ├── bug29015.phpt
│ │ ├── bug29104.phpt
│ │ ├── bug29210.phpt
│ │ ├── bug29368.phpt
│ │ ├── bug29368_1.phpt
│ │ ├── bug29368_2.phpt
│ │ ├── bug29368_3.phpt
│ │ ├── bug29505.phpt
│ │ ├── bug29674.phpt
│ │ ├── bug29689.phpt
│ │ ├── bug29883.phpt
│ │ ├── bug29890.phpt
│ │ ├── bug29896.phpt
│ │ ├── bug29944.phpt
│ │ ├── bug30080.phpt
│ │ ├── bug30140.phpt
│ │ ├── bug30161.phpt
│ │ ├── bug30162.phpt
│ │ ├── bug30346.phpt
│ │ ├── bug30394.phpt
│ │ ├── bug30407.phpt
│ │ ├── bug30451.phpt
│ │ ├── bug30519.phpt
│ │ ├── bug30702.phpt
│ │ ├── bug30707.phpt
│ │ ├── bug30725.phpt
│ │ ├── bug30791.phpt
│ │ ├── bug30820.phpt
│ │ ├── bug30828.phpt
│ │ ├── bug30889.phpt
│ │ ├── bug30922.phpt
│ │ ├── bug30998.phpt
│ │ ├── bug31098.phpt
│ │ ├── bug31102.phpt
│ │ ├── bug31177-2.phpt
│ │ ├── bug31177.phpt
│ │ ├── bug31341.phpt
│ │ ├── bug31525.phpt
│ │ ├── bug31683.phpt
│ │ ├── bug31720.phpt
│ │ ├── bug32226.phpt
│ │ ├── bug32252.phpt
│ │ ├── bug32290.phpt
│ │ ├── bug32296.phpt
│ │ ├── bug32322.phpt
│ │ ├── bug32427.phpt
│ │ ├── bug32428.phpt
│ │ ├── bug32429.phpt
│ │ ├── bug32596.phpt
│ │ ├── bug32660.phpt
│ │ ├── bug32674.phpt
│ │ ├── bug32799.phpt
│ │ ├── bug32833.phpt
│ │ ├── bug32993.phpt
│ │ ├── bug33116.phpt
│ │ ├── bug33171.phpt
│ │ ├── bug33257.phpt
│ │ ├── bug33277.phpt
│ │ ├── bug33282.phpt
│ │ ├── bug33318.phpt
│ │ ├── bug33512.phpt
│ │ ├── bug33558.phpt
│ │ ├── bug33710.phpt
│ │ ├── bug33732.phpt
│ │ ├── bug33771.phpt
│ │ ├── bug33802.phpt
│ │ ├── bug33996.phpt
│ │ ├── bug33999.phpt
│ │ ├── bug34045.phpt
│ │ ├── bug34062.phpt
│ │ ├── bug34064.phpt
│ │ ├── bug34065.phpt
│ │ ├── bug34137.phpt
│ │ ├── bug34199.phpt
│ │ ├── bug34260.phpt
│ │ ├── bug34310.phpt
│ │ ├── bug34358.phpt
│ │ ├── bug34467.phpt
│ │ ├── bug34518.phpt
│ │ ├── bug34617.phpt
│ │ ├── bug34678.phpt
│ │ ├── bug34786.phpt
│ │ ├── bug34873.phpt
│ │ ├── bug34879.phpt
│ │ ├── bug34893.phpt
│ │ ├── bug35017.phpt
│ │ ├── bug35106.phpt
│ │ ├── bug35163.phpt
│ │ ├── bug35163_2.phpt
│ │ ├── bug35163_3.phpt
│ │ ├── bug35239.phpt
│ │ ├── bug35393.phpt
│ │ ├── bug35411.phpt
│ │ ├── bug35470.phpt
│ │ ├── bug35509.phpt
│ │ ├── bug35634.phpt
│ │ ├── bug35655.phpt
│ │ ├── bug36006.phpt
│ │ ├── bug36037.phpt
│ │ ├── bug36071.phpt
│ │ ├── bug36214.phpt
│ │ ├── bug36268.phpt
│ │ ├── bug36513.phpt
│ │ ├── bug36568.phpt
│ │ ├── bug36759.phpt
│ │ ├── bug37046.phpt
│ │ ├── bug37138.phpt
│ │ ├── bug37144.phpt
│ │ ├── bug37212.phpt
│ │ ├── bug37251.phpt
│ │ ├── bug37632.phpt
│ │ ├── bug37667.phpt
│ │ ├── bug37707.phpt
│ │ ├── bug37715.phpt
│ │ ├── bug37811.phpt
│ │ ├── bug38146.phpt
│ │ ├── bug38211.phpt
│ │ ├── bug38220.phpt
│ │ ├── bug38234.phpt
│ │ ├── bug38287.phpt
│ │ ├── bug38461.phpt
│ │ ├── bug38469.phpt
│ │ ├── bug38623.phpt
│ │ ├── bug38624.phpt
│ │ ├── bug38772.phpt
│ │ ├── bug38779.phpt
│ │ ├── bug38779_1.phpt
│ │ ├── bug38808.phpt
│ │ ├── bug39003.phpt
│ │ ├── bug39017.phpt
│ │ ├── bug39018.phpt
│ │ ├── bug39018_2.phpt
│ │ ├── bug39036.phpt
│ │ ├── bug39297.phpt
│ │ ├── bug39304.phpt
│ │ ├── bug39346.phpt
│ │ ├── bug39438.phpt
│ │ ├── bug39445.phpt
│ │ ├── bug39449.phpt
│ │ ├── bug39542/
│ │ │ └── bug39542.inc
│ │ ├── bug39542.phpt
│ │ ├── bug39602.phpt
│ │ ├── bug39721.phpt
│ │ ├── bug39775.phpt
│ │ ├── bug39825.phpt
│ │ ├── bug39944.phpt
│ │ ├── bug39990.phpt
│ │ ├── bug40236.inc
│ │ ├── bug40236.phpt
│ │ ├── bug40261.phpt
│ │ ├── bug40509.phpt
│ │ ├── bug40621.phpt
│ │ ├── bug40705.phpt
│ │ ├── bug40757.phpt
│ │ ├── bug40770.phpt
│ │ ├── bug40809.phpt
│ │ ├── bug40815.phpt
│ │ ├── bug40833.phpt
│ │ ├── bug40899.phpt
│ │ ├── bug41026.phpt
│ │ ├── bug41117_1.phpt
│ │ ├── bug41209.phpt
│ │ ├── bug41351.phpt
│ │ ├── bug41351_2.phpt
│ │ ├── bug41351_3.phpt
│ │ ├── bug41372.phpt
│ │ ├── bug41401.phpt
│ │ ├── bug41421.phpt
│ │ ├── bug41633_1.phpt
│ │ ├── bug41633_2.phpt
│ │ ├── bug41633_3.phpt
│ │ ├── bug41633_4.phpt
│ │ ├── bug41640.phpt
│ │ ├── bug41813.phpt
│ │ ├── bug41919.phpt
│ │ ├── bug41929.phpt
│ │ ├── bug41961.phpt
│ │ ├── bug42143.phpt
│ │ ├── bug42211.phpt
│ │ ├── bug42767.phpt
│ │ ├── bug42772.phpt
│ │ ├── bug42798.phpt
│ │ ├── bug42802.phpt
│ │ ├── bug42817.phpt
│ │ ├── bug42818.phpt
│ │ ├── bug42819.phpt
│ │ ├── bug42820.phpt
│ │ ├── bug42859.phpt
│ │ ├── bug42937.phpt
│ │ ├── bug43027.phpt
│ │ ├── bug43053.phpt
│ │ ├── bug43128.phpt
│ │ ├── bug43175.phpt
│ │ ├── bug43183.phpt
│ │ ├── bug43200.phpt
│ │ ├── bug43200_2.phpt
│ │ ├── bug43201.phpt
│ │ ├── bug43332_1.phpt
│ │ ├── bug43332_2.phpt
│ │ ├── bug43343.phpt
│ │ ├── bug43344_1.phpt
│ │ ├── bug43344_10.phpt
│ │ ├── bug43344_11.phpt
│ │ ├── bug43344_12.phpt
│ │ ├── bug43344_13.phpt
│ │ ├── bug43344_2.phpt
│ │ ├── bug43344_3.phpt
│ │ ├── bug43344_4.phpt
│ │ ├── bug43344_5.phpt
│ │ ├── bug43344_6.phpt
│ │ ├── bug43344_7.phpt
│ │ ├── bug43344_8.phpt
│ │ ├── bug43344_9.phpt
│ │ ├── bug43426.phpt
│ │ ├── bug43450.phpt
│ │ ├── bug43483.phpt
│ │ ├── bug43651.phpt
│ │ ├── bug43703.phpt
│ │ ├── bug43851.phpt
│ │ ├── bug43918.phpt
│ │ ├── bug44069.phpt
│ │ ├── bug44141.phpt
│ │ ├── bug44184.phpt
│ │ ├── bug44414.phpt
│ │ ├── bug44653.phpt
│ │ ├── bug44660.phpt
│ │ ├── bug44827.phpt
│ │ ├── bug44830.phpt
│ │ ├── bug44899.phpt
│ │ ├── bug44899_2.phpt
│ │ ├── bug44913.phpt
│ │ ├── bug45147.phpt
│ │ ├── bug45180.phpt
│ │ ├── bug45186.phpt
│ │ ├── bug45186_2.phpt
│ │ ├── bug45742.phpt
│ │ ├── bug45744.phpt
│ │ ├── bug45805.phpt
│ │ ├── bug45862.phpt
│ │ ├── bug45877.phpt
│ │ ├── bug45910.phpt
│ │ ├── bug45910_2.phpt
│ │ ├── bug46106.phpt
│ │ ├── bug46196.phpt
│ │ ├── bug46238.phpt
│ │ ├── bug46241.phpt
│ │ ├── bug46246.phpt
│ │ ├── bug46304.phpt
│ │ ├── bug46308.phpt
│ │ ├── bug46381.phpt
│ │ ├── bug46409.phpt
│ │ ├── bug46665.phpt
│ │ ├── bug46665_autoload.inc
│ │ ├── bug46701.phpt
│ │ ├── bug46811.phpt
│ │ ├── bug46813.phpt
│ │ ├── bug47054.phpt
│ │ ├── bug47109.phpt
│ │ ├── bug47165.phpt
│ │ ├── bug47343.phpt
│ │ ├── bug47353.phpt
│ │ ├── bug47516.phpt
│ │ ├── bug47572.phpt
│ │ ├── bug47593.phpt
│ │ ├── bug47596.phpt
│ │ ├── bug47699.phpt
│ │ ├── bug47704.phpt
│ │ ├── bug47714.phpt
│ │ ├── bug47771.phpt
│ │ ├── bug47801.phpt
│ │ ├── bug47836.phpt
│ │ ├── bug47880.phpt
│ │ ├── bug48215.phpt
│ │ ├── bug48215_2.phpt
│ │ ├── bug48228.phpt
│ │ ├── bug48248.phpt
│ │ ├── bug48408.phpt
│ │ ├── bug48409.phpt
│ │ ├── bug48428.phpt
│ │ ├── bug48533.phpt
│ │ ├── bug48667_1.phpt
│ │ ├── bug48667_2.phpt
│ │ ├── bug48770.phpt
│ │ ├── bug48770_2.phpt
│ │ ├── bug48770_3.phpt
│ │ ├── bug48899-deprecated.phpt
│ │ ├── bug48899.phpt
│ │ ├── bug48912.phpt
│ │ ├── bug48930.phpt
│ │ ├── bug49269.phpt
│ │ ├── bug49472.phpt
│ │ ├── bug49866.phpt
│ │ ├── bug49893.phpt
│ │ ├── bug49908.phpt
│ │ ├── bug50005.phpt
│ │ ├── bug50146.phpt
│ │ ├── bug50174.phpt
│ │ ├── bug50255.phpt
│ │ ├── bug50383.phpt
│ │ ├── bug50394.phpt
│ │ ├── bug50810.phpt
│ │ ├── bug50816.phpt
│ │ ├── bug51176.phpt
│ │ ├── bug51394.phpt
│ │ ├── bug51421.phpt
│ │ ├── bug51791.phpt
│ │ ├── bug51822.phpt
│ │ ├── bug51827.phpt
│ │ ├── bug52001.phpt
│ │ ├── bug52041.phpt
│ │ ├── bug52060.phpt
│ │ ├── bug52193.phpt
│ │ ├── bug52355.phpt
│ │ ├── bug52361.phpt
│ │ ├── bug52484.phpt
│ │ ├── bug52484_2.phpt
│ │ ├── bug52484_3.phpt
│ │ ├── bug52508.phpt
│ │ ├── bug52614.phpt
│ │ ├── bug52879.phpt
│ │ ├── bug52939.phpt
│ │ ├── bug52940.phpt
│ │ ├── bug53305.phpt
│ │ ├── bug53347.phpt
│ │ ├── bug53432.phpt
│ │ ├── bug53511.phpt
│ │ ├── bug53629.phpt
│ │ ├── bug53632.phpt
│ │ ├── bug53727.phpt
│ │ ├── bug53748.phpt
│ │ ├── bug53826.phpt
│ │ ├── bug53958.phpt
│ │ ├── bug53971.phpt
│ │ ├── bug54013.phpt
│ │ ├── bug54039.phpt
│ │ ├── bug54043.phpt
│ │ ├── bug54268.phpt
│ │ ├── bug54305.phpt
│ │ ├── bug54358.phpt
│ │ ├── bug54367.phpt
│ │ ├── bug54372.phpt
│ │ ├── bug54547.phpt
│ │ ├── bug54624.phpt
│ │ ├── bug54804.inc
│ │ ├── bug54804.phpt
│ │ ├── bug54910.phpt
│ │ ├── bug55007.phpt
│ │ ├── bug55086.phpt
│ │ ├── bug55135.phpt
│ │ ├── bug55156.phpt
│ │ ├── bug55247.phpt
│ │ ├── bug55305.phpt
│ │ ├── bug55445.phpt
│ │ ├── bug55509.phpt
│ │ ├── bug55578.phpt
│ │ ├── bug55705.phpt
│ │ ├── bug55825.phpt
│ │ ├── bug60099.phpt
│ │ ├── bug60138.phpt
│ │ ├── bug60139.phpt
│ │ ├── bug60161.phpt
│ │ ├── bug60169.phpt
│ │ ├── bug60350.phpt
│ │ ├── bug60362.phpt
│ │ ├── bug60444.phpt
│ │ ├── bug60536_001.phpt
│ │ ├── bug60536_002.phpt
│ │ ├── bug60536_003.phpt
│ │ ├── bug60536_004.phpt
│ │ ├── bug60536_005.phpt
│ │ ├── bug60569.phpt
│ │ ├── bug60573.phpt
│ │ ├── bug60573_2.phpt
│ │ ├── bug60598.phpt
│ │ ├── bug60611.phpt
│ │ ├── bug60613.phpt
│ │ ├── bug60738.phpt
│ │ ├── bug60738_variation.phpt
│ │ ├── bug60771.phpt
│ │ ├── bug60825.phpt
│ │ ├── bug60833.phpt
│ │ ├── bug60909_1.phpt
│ │ ├── bug60909_2.phpt
│ │ ├── bug60978.phpt
│ │ ├── bug61011.phpt
│ │ ├── bug61025.phpt
│ │ ├── bug61087.phpt
│ │ ├── bug61095.phpt
│ │ ├── bug61165.phpt
│ │ ├── bug61225.phpt
│ │ ├── bug61273.phpt
│ │ ├── bug61362.phpt
│ │ ├── bug61681.phpt
│ │ ├── bug61761.phpt
│ │ ├── bug61767.phpt
│ │ ├── bug61782.phpt
│ │ ├── bug61970.phpt
│ │ ├── bug61970_1.phpt
│ │ ├── bug61970_2.phpt
│ │ ├── bug62069.phpt
│ │ ├── bug62069_2.phpt
│ │ ├── bug62097.phpt
│ │ ├── bug62343.phpt
│ │ ├── bug62358.phpt
│ │ ├── bug62441.phpt
│ │ ├── bug62609.phpt
│ │ ├── bug62609_2.phpt
│ │ ├── bug62653.phpt
│ │ ├── bug62680.phpt
│ │ ├── bug62763.phpt
│ │ ├── bug62814.phpt
│ │ ├── bug62892.phpt
│ │ ├── bug62907.phpt
│ │ ├── bug62956.phpt
│ │ ├── bug62991.phpt
│ │ ├── bug63055.phpt
│ │ ├── bug63111.phpt
│ │ ├── bug63173.phpt
│ │ ├── bug63206.phpt
│ │ ├── bug63206_1.phpt
│ │ ├── bug63206_2.phpt
│ │ ├── bug63217.phpt
│ │ ├── bug63219.phpt
│ │ ├── bug63305.phpt
│ │ ├── bug63462.phpt
│ │ ├── bug63468.phpt
│ │ ├── bug63635.phpt
│ │ ├── bug63734.phpt
│ │ ├── bug63741.phpt
│ │ ├── bug63762.phpt
│ │ ├── bug63816.phpt
│ │ ├── bug63882.phpt
│ │ ├── bug63882_2.phpt
│ │ ├── bug63976.phpt
│ │ ├── bug63982.phpt
│ │ ├── bug64135.phpt
│ │ ├── bug64239_1.phpt
│ │ ├── bug64239_2.phpt
│ │ ├── bug64239_3.phpt
│ │ ├── bug64239_4.phpt
│ │ ├── bug64354.phpt
│ │ ├── bug64417.phpt
│ │ ├── bug64515.phpt
│ │ ├── bug64555.phpt
│ │ ├── bug64578.phpt
│ │ ├── bug64660.phpt
│ │ ├── bug64677.phpt
│ │ ├── bug64720.phpt
│ │ ├── bug64821.1.phpt
│ │ ├── bug64821.2.phpt
│ │ ├── bug64821.3.phpt
│ │ ├── bug64896.phpt
│ │ ├── bug64960.phpt
│ │ ├── bug64966.phpt
│ │ ├── bug64979.phpt
│ │ ├── bug64988.phpt
│ │ ├── bug65051.phpt
│ │ ├── bug65108.phpt
│ │ ├── bug65254.phpt
│ │ ├── bug65291.phpt
│ │ ├── bug65322.phpt
│ │ ├── bug65372.phpt
│ │ ├── bug65419.phpt
│ │ ├── bug65579.phpt
│ │ ├── bug65784.phpt
│ │ ├── bug65911.phpt
│ │ ├── bug65969.phpt
│ │ ├── bug66015.phpt
│ │ ├── bug66218.phpt
│ │ ├── bug66252.phpt
│ │ ├── bug66286.phpt
│ │ ├── bug66608.phpt
│ │ ├── bug66609.phpt
│ │ ├── bug66660.phpt
│ │ ├── bug66719.phpt
│ │ ├── bug66811.phpt
│ │ ├── bug67111.phpt
│ │ ├── bug67169.phpt
│ │ ├── bug67314.phpt
│ │ ├── bug67368.phpt
│ │ ├── bug67436/
│ │ │ ├── a.inc
│ │ │ ├── b.inc
│ │ │ ├── bug67436.phpt
│ │ │ ├── bug67436_nohandler.phpt
│ │ │ └── c.inc
│ │ ├── bug67633.phpt
│ │ ├── bug67856.phpt
│ │ ├── bug67874.phpt
│ │ ├── bug67922.phpt
│ │ ├── bug67938.phpt
│ │ ├── bug67985.phpt
│ │ ├── bug68118.phpt
│ │ ├── bug68148.phpt
│ │ ├── bug68162.phpt
│ │ ├── bug68163.phpt
│ │ ├── bug68191.phpt
│ │ ├── bug68215.phpt
│ │ ├── bug68262.phpt
│ │ ├── bug68370.phpt
│ │ ├── bug68412.phpt
│ │ ├── bug68446.phpt
│ │ ├── bug68475.phpt
│ │ ├── bug68652.phpt
│ │ ├── bug68775.phpt
│ │ ├── bug68797.phpt
│ │ ├── bug68887.phpt
│ │ ├── bug68896.phpt
│ │ ├── bug69017.phpt
│ │ ├── bug69025.phpt
│ │ ├── bug69084.phpt
│ │ ├── bug69092.2.phpt
│ │ ├── bug69092.phpt
│ │ ├── bug69124.phpt
│ │ ├── bug69167.phpt
│ │ ├── bug69174.phpt
│ │ ├── bug69180-backtrace.phpt
│ │ ├── bug69201.phpt
│ │ ├── bug69212.phpt
│ │ ├── bug69221.phpt
│ │ ├── bug69221_2.phpt
│ │ ├── bug69315.phpt
│ │ ├── bug69376.phpt
│ │ ├── bug69376_2.phpt
│ │ ├── bug69388.phpt
│ │ ├── bug69388_2.phpt
│ │ ├── bug69420.phpt
│ │ ├── bug69427.phpt
│ │ ├── bug69446.phpt
│ │ ├── bug69446_2.phpt
│ │ ├── bug69467.phpt
│ │ ├── bug69532.phpt
│ │ ├── bug69534.phpt
│ │ ├── bug69537.phpt
│ │ ├── bug69551.phpt
│ │ ├── bug69568.phpt
│ │ ├── bug69599.phpt
│ │ ├── bug69640.phpt
│ │ ├── bug69676.phpt
│ │ ├── bug69676_2.phpt
│ │ ├── bug69676_3.phpt
│ │ ├── bug69732.phpt
│ │ ├── bug69740.phpt
│ │ ├── bug69754.phpt
│ │ ├── bug69755.phpt
│ │ ├── bug69756.phpt
│ │ ├── bug69758.phpt
│ │ ├── bug69761.phpt
│ │ ├── bug69767.phpt
│ │ ├── bug69788.phpt
│ │ ├── bug69802_2.phpt
│ │ ├── bug69805.phpt
│ │ ├── bug69825.phpt
│ │ ├── bug69832.phpt
│ │ ├── bug69871.phpt
│ │ ├── bug69889.phpt
│ │ ├── bug69891.phpt
│ │ ├── bug69892.phpt
│ │ ├── bug69893.phpt
│ │ ├── bug69905.phpt
│ │ ├── bug69955.phpt
│ │ ├── bug69957.phpt
│ │ ├── bug69989_1.phpt
│ │ ├── bug69989_2.phpt
│ │ ├── bug69989_3.phpt
│ │ ├── bug69996.phpt
│ │ ├── bug70012.phpt
│ │ ├── bug70083.phpt
│ │ ├── bug70089.phpt
│ │ ├── bug70117.phpt
│ │ ├── bug70121.phpt
│ │ ├── bug70124.phpt
│ │ ├── bug70156.phpt
│ │ ├── bug70164.phpt
│ │ ├── bug70173.phpt
│ │ ├── bug70179.phpt
│ │ ├── bug70182.phpt
│ │ ├── bug70183.phpt
│ │ ├── bug70187.phpt
│ │ ├── bug70187_2.phpt
│ │ ├── bug70215.phpt
│ │ ├── bug70223.phpt
│ │ ├── bug70240.phpt
│ │ ├── bug70241.phpt
│ │ ├── bug70253.phpt
│ │ ├── bug70258.phpt
│ │ ├── bug70262.phpt
│ │ ├── bug70288.phpt
│ │ ├── bug70293.phpt
│ │ ├── bug70321.phpt
│ │ ├── bug70332.phpt
│ │ ├── bug70397.phpt
│ │ ├── bug70398.phpt
│ │ ├── bug70430.phpt
│ │ ├── bug70478.phpt
│ │ ├── bug70547.phpt
│ │ ├── bug70630.phpt
│ │ ├── bug70662.phpt
│ │ ├── bug70681.phpt
│ │ ├── bug70685.phpt
│ │ ├── bug70689.phpt
│ │ ├── bug70748.phpt
│ │ ├── bug70782.phpt
│ │ ├── bug70785.phpt
│ │ ├── bug70804.phpt
│ │ ├── bug70805.phpt
│ │ ├── bug70805_1.phpt
│ │ ├── bug70805_2.phpt
│ │ ├── bug70873.phpt
│ │ ├── bug70895.phpt
│ │ ├── bug70898.phpt
│ │ ├── bug70912.phpt
│ │ ├── bug70914.phpt
│ │ ├── bug70918.phpt
│ │ ├── bug70944.phpt
│ │ ├── bug70957.phpt
│ │ ├── bug70958.phpt
│ │ ├── bug70967.phpt
│ │ ├── bug70987.phpt
│ │ ├── bug70997.phpt
│ │ ├── bug71030.phpt
│ │ ├── bug71067.phpt
│ │ ├── bug71086.phpt
│ │ ├── bug71154.phpt
│ │ ├── bug71163.phpt
│ │ ├── bug71196.phpt
│ │ ├── bug71221.phpt
│ │ ├── bug71248.phpt
│ │ ├── bug71266.phpt
│ │ ├── bug71275.phpt
│ │ ├── bug71300.phpt
│ │ ├── bug71336.phpt
│ │ ├── bug71359.phpt
│ │ ├── bug71414.phpt
│ │ ├── bug71428.1.phpt
│ │ ├── bug71428.2.phpt
│ │ ├── bug71428.3.phpt
│ │ ├── bug71470.phpt
│ │ ├── bug71474.phpt
│ │ ├── bug71529.phpt
│ │ ├── bug71539.phpt
│ │ ├── bug71539_1.phpt
│ │ ├── bug71539_2.phpt
│ │ ├── bug71539_3.phpt
│ │ ├── bug71539_4.phpt
│ │ ├── bug71539_5.phpt
│ │ ├── bug71572.phpt
│ │ ├── bug71622.phpt
│ │ ├── bug71724.phpt
│ │ ├── bug71731.phpt
│ │ ├── bug71737.phpt
│ │ ├── bug71756.phpt
│ │ ├── bug71818.phpt
│ │ ├── bug71841.phpt
│ │ ├── bug71859.phpt
│ │ ├── bug71871.phpt
│ │ ├── bug71871_2.phpt
│ │ ├── bug71914.phpt
│ │ ├── bug71922.phpt
│ │ ├── bug71930.phpt
│ │ ├── bug71980.phpt
│ │ ├── bug72038.phpt
│ │ ├── bug72101.phpt
│ │ ├── bug72107.phpt
│ │ ├── bug72119.phpt
│ │ ├── bug72162.phpt
│ │ ├── bug72177.phpt
│ │ ├── bug72177_2.phpt
│ │ ├── bug72188.phpt
│ │ ├── bug72215.phpt
│ │ ├── bug72215_1.phpt
│ │ ├── bug72215_2.phpt
│ │ ├── bug72215_3.phpt
│ │ ├── bug72216.phpt
│ │ ├── bug72335.phpt
│ │ ├── bug72347.phpt
│ │ ├── bug72373.phpt
│ │ ├── bug72395.phpt
│ │ ├── bug72441.phpt
│ │ ├── bug72496.phpt
│ │ ├── bug72508.phpt
│ │ ├── bug72530.phpt
│ │ ├── bug72543.phpt
│ │ ├── bug72543_1.phpt
│ │ ├── bug72543_2.phpt
│ │ ├── bug72543_3.phpt
│ │ ├── bug72543_4.phpt
│ │ ├── bug72543_5.phpt
│ │ ├── bug72581.phpt
│ │ ├── bug72594.phpt
│ │ ├── bug72598.phpt
│ │ ├── bug72598_2.phpt
│ │ ├── bug72767.phpt
│ │ ├── bug72813.phpt
│ │ ├── bug72854.phpt
│ │ ├── bug72918.phpt
│ │ ├── bug72943.phpt
│ │ ├── bug72944.phpt
│ │ ├── bug73156.phpt
│ │ ├── bug73288.phpt
│ │ ├── bug73337.phpt
│ │ ├── bug73338.phpt
│ │ ├── bug73350.phpt
│ │ ├── bug73663.phpt
│ │ ├── bug73663_2.phpt
│ │ ├── bug73753.phpt
│ │ ├── bug73792.phpt
│ │ ├── bug73816.phpt
│ │ ├── bug73900.phpt
│ │ ├── bug73916.phpt
│ │ ├── bug73954.phpt
│ │ ├── bug73960.phpt
│ │ ├── bug73987.phpt
│ │ ├── bug73987_1.phpt
│ │ ├── bug73987_2.phpt
│ │ ├── bug73987_3.phpt
│ │ ├── bug73989.phpt
│ │ ├── bug73998.phpt
│ │ ├── bug74053.phpt
│ │ ├── bug74084.phpt
│ │ ├── bug74093.phpt
│ │ ├── bug74164.phpt
│ │ ├── bug74269.phpt
│ │ ├── bug74340.phpt
│ │ ├── bug74546.phpt
│ │ ├── bug74603.ini
│ │ ├── bug74603.phpt
│ │ ├── bug74657.phpt
│ │ ├── bug74810.phpt
│ │ ├── bug74836.phpt
│ │ ├── bug74840.phpt
│ │ ├── bug74862.phpt
│ │ ├── bug74862_2.phpt
│ │ ├── bug74947.phpt
│ │ ├── bug75079.phpt
│ │ ├── bug75079_2.phpt
│ │ ├── bug75218.phpt
│ │ ├── bug75241.phpt
│ │ ├── bug75252.phpt
│ │ ├── bug75290.phpt
│ │ ├── bug75420.1.phpt
│ │ ├── bug75420.10.phpt
│ │ ├── bug75420.11.phpt
│ │ ├── bug75420.12.phpt
│ │ ├── bug75420.13.phpt
│ │ ├── bug75420.14.phpt
│ │ ├── bug75420.15.phpt
│ │ ├── bug75420.16.phpt
│ │ ├── bug75420.2.phpt
│ │ ├── bug75420.3.phpt
│ │ ├── bug75420.4.phpt
│ │ ├── bug75420.5.phpt
│ │ ├── bug75420.6.phpt
│ │ ├── bug75420.7.phpt
│ │ ├── bug75420.8.phpt
│ │ ├── bug75420.9.phpt
│ │ ├── bug75420.phpt
│ │ ├── bug75426.phpt
│ │ ├── bug75474.phpt
│ │ ├── bug75573.phpt
│ │ ├── bug75786.phpt
│ │ ├── bug75921.phpt
│ │ ├── bug76025.phpt
│ │ ├── bug76047.phpt
│ │ ├── bug76383.phpt
│ │ ├── bug76430.phpt
│ │ ├── bug76439.phpt
│ │ ├── bug76439_2.phpt
│ │ ├── bug76451.inc
│ │ ├── bug76451.phpt
│ │ ├── bug76451_2.inc
│ │ ├── bug76451_2.phpt
│ │ ├── bug76502.phpt
│ │ ├── bug76534.phpt
│ │ ├── bug76667.phpt
│ │ ├── bug76752.phpt
│ │ ├── bug76754.phpt
│ │ ├── bug76800.phpt
│ │ ├── bug76846.phpt
│ │ ├── bug76860.phpt
│ │ ├── bug76860_2.phpt
│ │ ├── bug76869.phpt
│ │ ├── bug76901.phpt
│ │ ├── bug76946.phpt
│ │ ├── bug76965.phpt
│ │ ├── bug77291.phpt
│ │ ├── bug77339.phpt
│ │ ├── bug77345_gc_1.phpt
│ │ ├── bug77345_gc_2.phpt
│ │ ├── bug77376.phpt
│ │ ├── bug77494.phpt
│ │ ├── bug77530.phpt
│ │ ├── bug77589.phpt
│ │ ├── bug77613.phpt
│ │ ├── bug77627.phpt
│ │ ├── bug77652.inc
│ │ ├── bug77652.phpt
│ │ ├── bug77660.phpt
│ │ ├── bug77738.phpt
│ │ ├── bug77877.phpt
│ │ ├── bug77922.phpt
│ │ ├── bug77966.phpt
│ │ ├── bug77993.phpt
│ │ ├── bug78010.phpt
│ │ ├── bug78151.phpt
│ │ ├── bug78154.phpt
│ │ ├── bug78182.phpt
│ │ ├── bug78239.phpt
│ │ ├── bug78271.phpt
│ │ ├── bug78335.phpt
│ │ ├── bug78335_2.phpt
│ │ ├── bug78340.phpt
│ │ ├── bug78344.phpt
│ │ ├── bug78356.phpt
│ │ ├── bug78363.phpt
│ │ ├── bug78379.phpt
│ │ ├── bug78379_2.phpt
│ │ ├── bug78396.phpt
│ │ ├── bug78406.phpt
│ │ ├── bug78454_1.phpt
│ │ ├── bug78454_2.phpt
│ │ ├── bug78502.phpt
│ │ ├── bug78531.phpt
│ │ ├── bug78589.phpt
│ │ ├── bug78598.phpt
│ │ ├── bug78644.phpt
│ │ ├── bug78658.phpt
│ │ ├── bug78689.phpt
│ │ ├── bug78752.phpt
│ │ ├── bug78770.phpt
│ │ ├── bug78776.phpt
│ │ ├── bug78787.phpt
│ │ ├── bug78810.phpt
│ │ ├── bug78868.phpt
│ │ ├── bug78898.phpt
│ │ ├── bug78921.phpt
│ │ ├── bug78926.phpt
│ │ ├── bug78973.phpt
│ │ ├── bug78999.phpt
│ │ ├── bug79022.phpt
│ │ ├── bug79108.phpt
│ │ ├── bug79155.phpt
│ │ ├── bug79364.phpt
│ │ ├── bug79382.phpt
│ │ ├── bug79477.phpt
│ │ ├── bug79514.phpt
│ │ ├── bug79599.phpt
│ │ ├── bug79657.phpt
│ │ ├── bug79668.phpt
│ │ ├── bug79778.phpt
│ │ ├── bug79779.phpt
│ │ ├── bug79783.phpt
│ │ ├── bug79784.phpt
│ │ ├── bug79790.phpt
│ │ ├── bug79791.phpt
│ │ ├── bug79792.phpt
│ │ ├── bug79793.phpt
│ │ ├── bug79818.phpt
│ │ ├── bug79828.phpt
│ │ ├── bug79836.phpt
│ │ ├── bug79836_1.phpt
│ │ ├── bug79836_2.phpt
│ │ ├── bug79836_3.phpt
│ │ ├── bug79836_4.phpt
│ │ ├── bug79862.phpt
│ │ ├── bug79897.phpt
│ │ ├── bug79900.phpt
│ │ ├── bug79919.phpt
│ │ ├── bug79927.phpt
│ │ ├── bug79934.phpt
│ │ ├── bug79947.phpt
│ │ ├── bug79948.inc
│ │ ├── bug79948.phpt
│ │ ├── bug79979.phpt
│ │ ├── bug80030.phpt
│ │ ├── bug80037.phpt
│ │ ├── bug80045.phpt
│ │ ├── bug80046.phpt
│ │ ├── bug80049.phpt
│ │ ├── bug80055.phpt
│ │ ├── bug80072.phpt
│ │ ├── bug80096.phpt
│ │ ├── bug80126.phpt
│ │ ├── bug80126_2.phpt
│ │ ├── bug80184.phpt
│ │ ├── bug80194.phpt
│ │ ├── bug80255.phpt
│ │ ├── bug80391.phpt
│ │ ├── bug80404.phpt
│ │ ├── bug80781.phpt
│ │ ├── bug80811.phpt
│ │ ├── bug80972.phpt
│ │ ├── bug81070.phpt
│ │ ├── bug81076.phpt
│ │ ├── bug81104.phpt
│ │ ├── bug81159.phpt
│ │ ├── bug81192.phpt
│ │ ├── bug81192_trait.inc
│ │ ├── bug81216.phpt
│ │ ├── bug81216_2.phpt
│ │ ├── bug81377.phpt
│ │ ├── bug81626.phpt
│ │ ├── bug81631.phpt
│ │ ├── bug81652.phpt
│ │ ├── bug81684.phpt
│ │ ├── bug81705.phpt
│ │ ├── bugGH-8655.phpt
│ │ ├── bug_debug_backtrace.phpt
│ │ ├── bug_debug_backtrace_replace_zend_execute_ex.phpt
│ │ ├── builtin_in_write_context_error1.phpt
│ │ ├── builtin_in_write_context_error2.phpt
│ │ ├── bw_or_assign_with_ref.phpt
│ │ ├── by_ref_optimization.phpt
│ │ ├── call_static.phpt
│ │ ├── call_static_002.phpt
│ │ ├── call_static_003.phpt
│ │ ├── call_static_004.phpt
│ │ ├── call_static_006.phpt
│ │ ├── call_static_007.phpt
│ │ ├── call_to_abstract_method_args.phpt
│ │ ├── call_to_deprecated_function_args.phpt
│ │ ├── call_user_func_001.phpt
│ │ ├── call_user_func_002.phpt
│ │ ├── call_user_func_003.phpt
│ │ ├── call_user_func_005.phpt
│ │ ├── call_user_func_006.phpt
│ │ ├── call_user_func_007.phpt
│ │ ├── call_user_func_008.phpt
│ │ ├── call_user_func_009.phpt
│ │ ├── call_user_func_array_array_slice_named_args.phpt
│ │ ├── call_user_func_array_array_slice_type.phpt
│ │ ├── call_user_func_array_array_slice_type_strict.phpt
│ │ ├── call_user_func_array_invalid_type.phpt
│ │ ├── call_user_func_array_prefer_ref.phpt
│ │ ├── call_user_func_by_ref.phpt
│ │ ├── call_user_func_closure_from_static_method.phpt
│ │ ├── call_user_func_strict_arginfo_check.phpt
│ │ ├── call_with_refs.phpt
│ │ ├── callable_param_exception_leak.phpt
│ │ ├── callable_self_parent_static_deprecation.phpt
│ │ ├── cast_to_array.phpt
│ │ ├── cast_to_bool.phpt
│ │ ├── cast_to_double.phpt
│ │ ├── cast_to_int.phpt
│ │ ├── cast_to_object.phpt
│ │ ├── cast_to_string.phpt
│ │ ├── catch.phpt
│ │ ├── catch_static.phpt
│ │ ├── class_alias_001.phpt
│ │ ├── class_alias_002.phpt
│ │ ├── class_alias_004.phpt
│ │ ├── class_alias_005.phpt
│ │ ├── class_alias_006.phpt
│ │ ├── class_alias_007.phpt
│ │ ├── class_alias_008.phpt
│ │ ├── class_alias_009.phpt
│ │ ├── class_alias_010.phpt
│ │ ├── class_alias_011.phpt
│ │ ├── class_alias_012.phpt
│ │ ├── class_alias_013.phpt
│ │ ├── class_alias_014.phpt
│ │ ├── class_alias_016.phpt
│ │ ├── class_alias_017.phpt
│ │ ├── class_alias_018.phpt
│ │ ├── class_alias_019.phpt
│ │ ├── class_alias_020.phpt
│ │ ├── class_alias_021.phpt
│ │ ├── class_constant_inheritance_mutable_data.phpt
│ │ ├── class_constant_to_reference_cached.phpt
│ │ ├── class_constants_001.phpt
│ │ ├── class_constants_002.phpt
│ │ ├── class_constants_003.phpt
│ │ ├── class_constants_004.phpt
│ │ ├── class_constants_005.phpt
│ │ ├── class_constants_006.phpt
│ │ ├── class_constants_007.phpt
│ │ ├── class_exists_001.phpt
│ │ ├── class_exists_002.phpt
│ │ ├── class_exists_003.phpt
│ │ ├── class_name_as_scalar.phpt
│ │ ├── class_name_as_scalar_error_001.phpt
│ │ ├── class_name_as_scalar_error_002.phpt
│ │ ├── class_name_as_scalar_error_003.phpt
│ │ ├── class_name_as_scalar_error_004.phpt
│ │ ├── class_name_as_scalar_error_005.phpt
│ │ ├── class_name_as_scalar_error_006.phpt
│ │ ├── class_name_as_scalar_error_007.phpt
│ │ ├── class_on_constant_evaluated_expression.phpt
│ │ ├── class_on_expression_in_constant_expression.phpt
│ │ ├── class_on_object.phpt
│ │ ├── class_properties_const.phpt
│ │ ├── class_properties_dynamic.phpt
│ │ ├── class_properties_static.phpt
│ │ ├── class_toString_concat_non_interned_with_itself.phpt
│ │ ├── class_toString_concat_with_itself.phpt
│ │ ├── class_underscore_as_name.phpt
│ │ ├── class_uses_static.phpt
│ │ ├── clone_001.phpt
│ │ ├── clone_002.phpt
│ │ ├── clone_003.phpt
│ │ ├── clone_004.phpt
│ │ ├── closure_001.phpt
│ │ ├── closure_002.phpt
│ │ ├── closure_003.phpt
│ │ ├── closure_004.phpt
│ │ ├── closure_005.phpt
│ │ ├── closure_006.phpt
│ │ ├── closure_007.phpt
│ │ ├── closure_008.phpt
│ │ ├── closure_009.phpt
│ │ ├── closure_010.phpt
│ │ ├── closure_011.phpt
│ │ ├── closure_012.phpt
│ │ ├── closure_013.phpt
│ │ ├── closure_014.phpt
│ │ ├── closure_015.phpt
│ │ ├── closure_016.phpt
│ │ ├── closure_017.phpt
│ │ ├── closure_018.phpt
│ │ ├── closure_019.phpt
│ │ ├── closure_020.phpt
│ │ ├── closure_021.phpt
│ │ ├── closure_022.phpt
│ │ ├── closure_023.phpt
│ │ ├── closure_024.phpt
│ │ ├── closure_026.phpt
│ │ ├── closure_027.phpt
│ │ ├── closure_028.phpt
│ │ ├── closure_029.phpt
│ │ ├── closure_030.phpt
│ │ ├── closure_031.phpt
│ │ ├── closure_032.phpt
│ │ ├── closure_033.phpt
│ │ ├── closure_034.phpt
│ │ ├── closure_035.phpt
│ │ ├── closure_036.phpt
│ │ ├── closure_037.phpt
│ │ ├── closure_038.phpt
│ │ ├── closure_039.phpt
│ │ ├── closure_040.phpt
│ │ ├── closure_041.phpt
│ │ ├── closure_042.phpt
│ │ ├── closure_043.phpt
│ │ ├── closure_044.phpt
│ │ ├── closure_045.phpt
│ │ ├── closure_046.phpt
│ │ ├── closure_047.phpt
│ │ ├── closure_048.phpt
│ │ ├── closure_049.phpt
│ │ ├── closure_050.phpt
│ │ ├── closure_051.phpt
│ │ ├── closure_052.phpt
│ │ ├── closure_053.phpt
│ │ ├── closure_054.phpt
│ │ ├── closure_055.phpt
│ │ ├── closure_056.phpt
│ │ ├── closure_057.phpt
│ │ ├── closure_058.phpt
│ │ ├── closure_059.phpt
│ │ ├── closure_060.phpt
│ │ ├── closure_061.phpt
│ │ ├── closure_062.phpt
│ │ ├── closure_063.phpt
│ │ ├── closure_064.phpt
│ │ ├── closure_065.phpt
│ │ ├── closure_066.phpt
│ │ ├── closure_067.phpt
│ │ ├── closure_068.phpt
│ │ ├── closure_bindTo_preserves_used_variables.phpt
│ │ ├── closure_bug66622.phpt
│ │ ├── closure_call.phpt
│ │ ├── closure_call_bind.phpt
│ │ ├── closure_call_internal.phpt
│ │ ├── closure_call_leak_with_exception.phpt
│ │ ├── closure_compare.phpt
│ │ ├── closure_extra_args.phpt
│ │ ├── closure_invoke_case_insensitive.phpt
│ │ ├── closure_invoke_ref_warning.phpt
│ │ ├── closure_use_auto_global.phpt
│ │ ├── closure_use_parameter_name.phpt
│ │ ├── closure_use_trailing_comma.phpt
│ │ ├── closure_use_variable_twice.phpt
│ │ ├── closure_write_prop.phpt
│ │ ├── closures/
│ │ │ ├── bug80929.phpt
│ │ │ ├── closure_from_callable.inc
│ │ │ ├── closure_from_callable_basic.phpt
│ │ │ ├── closure_from_callable_error.phpt
│ │ │ ├── closure_from_callable_gc.phpt
│ │ │ ├── closure_from_callable_lsb.phpt
│ │ │ ├── closure_from_callable_non_static_statically.phpt
│ │ │ ├── closure_from_callable_rebinding.phpt
│ │ │ ├── closure_from_callable_reflection.phpt
│ │ │ ├── closure_instantiate.phpt
│ │ │ ├── gh19653_1.phpt
│ │ │ └── gh19653_2.phpt
│ │ ├── coalesce_assign_optimization.phpt
│ │ ├── code_before_loop_var_free.phpt
│ │ ├── compare_001.phpt
│ │ ├── compare_001_64bit.phpt
│ │ ├── compare_002.phpt
│ │ ├── compare_002_64bit.phpt
│ │ ├── compare_003.phpt
│ │ ├── compare_003_64bit.phpt
│ │ ├── compare_004.phpt
│ │ ├── compare_004_64bit.phpt
│ │ ├── compare_005.phpt
│ │ ├── compare_005_64bit.phpt
│ │ ├── compare_006.phpt
│ │ ├── compare_006_64bit.phpt
│ │ ├── compound_assign_failure.phpt
│ │ ├── compound_assign_with_numeric_strings.phpt
│ │ ├── concat_001.phpt
│ │ ├── concat_002.phpt
│ │ ├── concat_003.phpt
│ │ ├── const_array_with_resource_key.phpt
│ │ ├── const_deprecation.phpt
│ │ ├── const_dereference_001.phpt
│ │ ├── const_dereference_002.phpt
│ │ ├── const_dereference_003.phpt
│ │ ├── const_eval_and.phpt
│ │ ├── const_expr_dim_on_null_warning.phpt
│ │ ├── constant_arrays.phpt
│ │ ├── constant_expressions.phpt
│ │ ├── constant_expressions_arrays.phpt
│ │ ├── constant_expressions_classes.phpt
│ │ ├── constant_expressions_coalesce.phpt
│ │ ├── constant_expressions_coalesce_empty_dim.phpt
│ │ ├── constant_expressions_dynamic.phpt
│ │ ├── constant_expressions_dynamic_class_name_error.phpt
│ │ ├── constant_expressions_exceptions.inc
│ │ ├── constant_expressions_exceptions_001.phpt
│ │ ├── constant_expressions_exceptions_002.phpt
│ │ ├── constant_expressions_invalid_offset_type_error.phpt
│ │ ├── constant_expressions_self_referencing_array.phpt
│ │ ├── constant_expressions_static_class_name_error.phpt
│ │ ├── constants/
│ │ │ ├── dir-constant-eval.phpt
│ │ │ ├── dir-constant-includes.phpt
│ │ │ ├── dir-constant-nested_includes.phpt
│ │ │ ├── dir-constant-normal.phpt
│ │ │ ├── final_constants/
│ │ │ │ ├── final_const1.phpt
│ │ │ │ ├── final_const10.phpt
│ │ │ │ ├── final_const11.phpt
│ │ │ │ ├── final_const12.phpt
│ │ │ │ ├── final_const13.phpt
│ │ │ │ ├── final_const2.phpt
│ │ │ │ ├── final_const3.phpt
│ │ │ │ ├── final_const4.phpt
│ │ │ │ ├── final_const5.phpt
│ │ │ │ ├── final_const6.phpt
│ │ │ │ ├── final_const7.phpt
│ │ │ │ ├── final_const8.phpt
│ │ │ │ └── final_const9.phpt
│ │ │ ├── fixtures/
│ │ │ │ ├── folder1/
│ │ │ │ │ ├── fixture.inc
│ │ │ │ │ ├── subfolder1/
│ │ │ │ │ │ └── fixture.inc
│ │ │ │ │ ├── subfolder2/
│ │ │ │ │ │ └── fixture.inc
│ │ │ │ │ ├── subfolder3/
│ │ │ │ │ │ └── fixture.inc
│ │ │ │ │ └── subfolder4/
│ │ │ │ │ └── fixture.inc
│ │ │ │ ├── folder2/
│ │ │ │ │ ├── fixture.inc
│ │ │ │ │ ├── subfolder1/
│ │ │ │ │ │ └── fixture.inc
│ │ │ │ │ ├── subfolder2/
│ │ │ │ │ │ └── fixture.inc
│ │ │ │ │ ├── subfolder3/
│ │ │ │ │ │ └── fixture.inc
│ │ │ │ │ └── subfolder4/
│ │ │ │ │ └── fixture.inc
│ │ │ │ ├── folder3/
│ │ │ │ │ ├── fixture.inc
│ │ │ │ │ ├── subfolder1/
│ │ │ │ │ │ └── fixture.inc
│ │ │ │ │ ├── subfolder2/
│ │ │ │ │ │ └── fixture.inc
│ │ │ │ │ ├── subfolder3/
│ │ │ │ │ │ └── fixture.inc
│ │ │ │ │ └── subfolder4/
│ │ │ │ │ └── fixture.inc
│ │ │ │ └── folder4/
│ │ │ │ ├── fixture.inc
│ │ │ │ ├── subfolder1/
│ │ │ │ │ └── fixture.inc
│ │ │ │ ├── subfolder2/
│ │ │ │ │ └── fixture.inc
│ │ │ │ ├── subfolder3/
│ │ │ │ │ └── fixture.inc
│ │ │ │ └── subfolder4/
│ │ │ │ └── fixture.inc
│ │ │ ├── gh18463-class-constant.phpt
│ │ │ ├── gh18850.inc
│ │ │ └── gh18850.phpt
│ │ ├── constants_001.phpt
│ │ ├── constants_002.phpt
│ │ ├── constants_003.phpt
│ │ ├── constants_004.phpt
│ │ ├── constants_005.phpt
│ │ ├── constants_006.phpt
│ │ ├── constants_007.phpt
│ │ ├── constants_008.phpt
│ │ ├── constants_009.phpt
│ │ ├── constexpr/
│ │ │ ├── new.phpt
│ │ │ ├── new_allowed.phpt
│ │ │ ├── new_anon_class.phpt
│ │ │ ├── new_arg_eval.phpt
│ │ │ ├── new_arg_unpack.phpt
│ │ │ ├── new_dynamic_class_name.phpt
│ │ │ ├── new_invalid_operation_in_arg.phpt
│ │ │ ├── new_named_params.phpt
│ │ │ ├── new_not_allowed_class_constant.phpt
│ │ │ ├── new_not_allowed_property.phpt
│ │ │ ├── new_positional_after_named.phpt
│ │ │ ├── new_self_parent.phpt
│ │ │ └── new_static.phpt
│ │ ├── constructor_abstract_grantparent.phpt
│ │ ├── constructor_args.phpt
│ │ ├── continue_targeting_switch_warning.phpt
│ │ ├── ctor_promotion_abstract.phpt
│ │ ├── ctor_promotion_additional_modifiers.phpt
│ │ ├── ctor_promotion_attributes.phpt
│ │ ├── ctor_promotion_basic.phpt
│ │ ├── ctor_promotion_by_ref.phpt
│ │ ├── ctor_promotion_callable_type.phpt
│ │ ├── ctor_promotion_defaults.phpt
│ │ ├── ctor_promotion_free_function.phpt
│ │ ├── ctor_promotion_interface.phpt
│ │ ├── ctor_promotion_mixing.phpt
│ │ ├── ctor_promotion_not_a_ctor.phpt
│ │ ├── ctor_promotion_null_default.phpt
│ │ ├── ctor_promotion_repeated_prop.phpt
│ │ ├── ctor_promotion_trait.phpt
│ │ ├── ctor_promotion_untyped_default.phpt
│ │ ├── ctor_promotion_variadic.phpt
│ │ ├── custom_assert_forbidden.phpt
│ │ ├── dead_array_type_inference.phpt
│ │ ├── debug_backtrace_limit.phpt
│ │ ├── debug_backtrace_options.phpt
│ │ ├── debug_backtrace_with_include_and_this.phpt
│ │ ├── debug_info-error-0.0.phpt
│ │ ├── debug_info-error-0.phpt
│ │ ├── debug_info-error-1.0.phpt
│ │ ├── debug_info-error-1.phpt
│ │ ├── debug_info-error-empty_str.phpt
│ │ ├── debug_info-error-false.phpt
│ │ ├── debug_info-error-object.phpt
│ │ ├── debug_info-error-resource.phpt
│ │ ├── debug_info-error-str.phpt
│ │ ├── debug_info-error-true.phpt
│ │ ├── debug_info.phpt
│ │ ├── debug_print_backtrace_from_main.phpt
│ │ ├── debug_print_backtrace_limit.phpt
│ │ ├── declare_001.phpt
│ │ ├── declare_002.phpt
│ │ ├── declare_003.phpt
│ │ ├── declare_004.phpt
│ │ ├── declare_005.phpt
│ │ ├── declare_006.phpt
│ │ ├── declare_007.phpt
│ │ ├── declare_already_in_use.phpt
│ │ ├── decrement_001.phpt
│ │ ├── decrement_001_64bit.phpt
│ │ ├── defined_fn_no_ns_fallback.phpt
│ │ ├── delayed_early_binding_redeclaration-1.inc
│ │ ├── delayed_early_binding_redeclaration-2.inc
│ │ ├── delayed_early_binding_redeclaration.phpt
│ │ ├── deprecate_dollar_brace_string_interpolation_1.phpt
│ │ ├── deprecation_to_exception_during_inheritance.phpt
│ │ ├── dereference_001.phpt
│ │ ├── dereference_002.phpt
│ │ ├── dereference_003.phpt
│ │ ├── dereference_004.phpt
│ │ ├── dereference_005.phpt
│ │ ├── dereference_006.phpt
│ │ ├── dereference_007.phpt
│ │ ├── dereference_008.phpt
│ │ ├── dereference_009.phpt
│ │ ├── dereference_010.phpt
│ │ ├── dereference_011.phpt
│ │ ├── dereference_012.phpt
│ │ ├── dereference_013.phpt
│ │ ├── dereference_014.phpt
│ │ ├── die_string_cast_exception.phpt
│ │ ├── dim_assign_001.phpt
│ │ ├── dim_assign_001.txt
│ │ ├── div_001.phpt
│ │ ├── div_002.phpt
│ │ ├── div_by_zero_compound_refcounted.phpt
│ │ ├── div_by_zero_compound_with_conversion.phpt
│ │ ├── div_by_zero_in_static.phpt
│ │ ├── double_array_cast.phpt
│ │ ├── double_to_string.phpt
│ │ ├── double_to_string_64bit.phpt
│ │ ├── dtor_scope.phpt
│ │ ├── duplicate_label_error.phpt
│ │ ├── dval_to_lval_32.phpt
│ │ ├── dval_to_lval_64.phpt
│ │ ├── dynamic_call_002.phpt
│ │ ├── dynamic_call_003.phpt
│ │ ├── dynamic_call_004.phpt
│ │ ├── dynamic_call_005.phpt
│ │ ├── dynamic_call_006.phpt
│ │ ├── dynamic_call_007.phpt
│ │ ├── dynamic_call_008.phpt
│ │ ├── dynamic_call_freeing.phpt
│ │ ├── dynamic_call_non_static.phpt
│ │ ├── dynamic_call_to_ref_returning_function.phpt
│ │ ├── dynamic_class_const_fetch.phpt
│ │ ├── dynamic_class_const_fetch_cache_slot.phpt
│ │ ├── dynamic_class_const_fetch_const_expr.phpt
│ │ ├── dynamic_class_const_fetch_order.phpt
│ │ ├── dynamic_fully_qualified_call.phpt
│ │ ├── dynamic_prop_deprecation.phpt
│ │ ├── dynamic_prop_deprecation_002.phpt
│ │ ├── dynamic_prop_name_leak.phpt
│ │ ├── e_strict-deprecated.phpt
│ │ ├── early_binding_unreachable.inc
│ │ ├── early_binding_unreachable.phpt
│ │ ├── empty_str_offset.phpt
│ │ ├── empty_with_expr.phpt
│ │ ├── entry_block_with_predecessors.phpt
│ │ ├── enum/
│ │ │ ├── __call.phpt
│ │ │ ├── __callStatic.phpt
│ │ │ ├── __class__.phpt
│ │ │ ├── __clone.phpt
│ │ │ ├── __debugInfo.phpt
│ │ │ ├── __function__.phpt
│ │ │ ├── __get.phpt
│ │ │ ├── __invoke.phpt
│ │ │ ├── __isset.phpt
│ │ │ ├── __method__.phpt
│ │ │ ├── __serialize.phpt
│ │ │ ├── __set.phpt
│ │ │ ├── __set_state.phpt
│ │ │ ├── __sleep.phpt
│ │ │ ├── __toString.phpt
│ │ │ ├── __unserialize.phpt
│ │ │ ├── __unset.phpt
│ │ │ ├── __wakeup.phpt
│ │ │ ├── ast-dumper.phpt
│ │ │ ├── backed-cases-int.phpt
│ │ │ ├── backed-cases-string.phpt
│ │ │ ├── backed-duplicate-int.phpt
│ │ │ ├── backed-duplicate-string.phpt
│ │ │ ├── backed-from-invalid-int.phpt
│ │ │ ├── backed-from-invalid-string.phpt
│ │ │ ├── backed-from-invalid-type.phpt
│ │ │ ├── backed-from-unknown-hash.phpt
│ │ │ ├── backed-from.phpt
│ │ │ ├── backed-implements-multiple.phpt
│ │ │ ├── backed-implements.phpt
│ │ │ ├── backed-int-case-without-value.phpt
│ │ │ ├── backed-int-const-expr.phpt
│ │ │ ├── backed-int-const-invalid-expr.phpt
│ │ │ ├── backed-int.phpt
│ │ │ ├── backed-invalid.phpt
│ │ │ ├── backed-mismatch.phpt
│ │ │ ├── backed-negative-int.phpt
│ │ │ ├── backed-string-heredoc.phpt
│ │ │ ├── backed-string.phpt
│ │ │ ├── backed-tryFrom-casing.phpt
│ │ │ ├── backed-tryFrom-unknown-hash.phpt
│ │ │ ├── backed-tryFrom.phpt
│ │ │ ├── backed-type-no-union.phpt
│ │ │ ├── basic-methods.phpt
│ │ │ ├── case-attributes.phpt
│ │ │ ├── case-in-class.phpt
│ │ │ ├── cases-refcount.phpt
│ │ │ ├── comparison.phpt
│ │ │ ├── constant-aliases.phpt
│ │ │ ├── constants.phpt
│ │ │ ├── default-parameter.phpt
│ │ │ ├── empty-from.phpt
│ │ │ ├── enum-as-constant.phpt
│ │ │ ├── enum-as-params.phpt
│ │ │ ├── enum-attributes.phpt
│ │ │ ├── enum-in-constant.phpt
│ │ │ ├── enum-in-static-var.phpt
│ │ │ ├── enum-in-var-export.phpt
│ │ │ ├── enum-reserved-non-modifiers.phpt
│ │ │ ├── enum_exists.phpt
│ │ │ ├── enum_underscore_as_name.phpt
│ │ │ ├── final.phpt
│ │ │ ├── gh7821.phpt
│ │ │ ├── gh8176.phpt
│ │ │ ├── gh8418.phpt
│ │ │ ├── implements.phpt
│ │ │ ├── instanceof-backed-enum.phpt
│ │ │ ├── instanceof-unitenum.phpt
│ │ │ ├── instanceof.phpt
│ │ │ ├── internal_enums.phpt
│ │ │ ├── internal_enums_strict_types.phpt
│ │ │ ├── json_encode.phpt
│ │ │ ├── keyword-no-bc-break.phpt
│ │ │ ├── keyword-whitespace.phpt
│ │ │ ├── magic-constants.phpt
│ │ │ ├── name-property.phpt
│ │ │ ├── namespaces.phpt
│ │ │ ├── no-cases.phpt
│ │ │ ├── no-class-implements-backed-enum.phpt
│ │ │ ├── no-class-implements-unit-enum.phpt
│ │ │ ├── no-clone.phpt
│ │ │ ├── no-constructors.phpt
│ │ │ ├── no-destruct.phpt
│ │ │ ├── no-dynamic-properties.phpt
│ │ │ ├── no-enum-implements-backed-enum.phpt
│ │ │ ├── no-enum-implements-unit-enum.phpt
│ │ │ ├── no-from.phpt
│ │ │ ├── no-implement-serializable-indirect.phpt
│ │ │ ├── no-implement-serializable.phpt
│ │ │ ├── no-name-property.phpt
│ │ │ ├── no-new-through-reflection.phpt
│ │ │ ├── no-new.phpt
│ │ │ ├── no-non-backed-enum-implements-backed-enum.phpt
│ │ │ ├── no-pass-properties-by-ref.phpt
│ │ │ ├── no-properties.phpt
│ │ │ ├── no-return-properties-by-ref.phpt
│ │ │ ├── no-static-properties.phpt
│ │ │ ├── no-unsed-value.phpt
│ │ │ ├── no-unset-propertes.phpt
│ │ │ ├── no-value-property.phpt
│ │ │ ├── no-write-properties-cache-slot.phpt
│ │ │ ├── no-write-properties-through-foreach-reference.phpt
│ │ │ ├── no-write-properties-through-references.phpt
│ │ │ ├── no-write-properties.phpt
│ │ │ ├── non-backed-enum-with-expr-value.phpt
│ │ │ ├── non-backed-enum-with-int-value.phpt
│ │ │ ├── non-backed-enum-with-invalid-value.phpt
│ │ │ ├── non-backed-enum-with-string-value.phpt
│ │ │ ├── offsetGet-in-const-expr.phpt
│ │ │ ├── print_r.phpt
│ │ │ ├── reflectionclass.phpt
│ │ │ ├── serialization-round-trip.phpt
│ │ │ ├── serialize.phpt
│ │ │ ├── spl-object-storage.phpt
│ │ │ ├── static-methods.phpt
│ │ │ ├── traits-constants.phpt
│ │ │ ├── traits-no-__construct.phpt
│ │ │ ├── traits-no-cases-method.phpt
│ │ │ ├── traits-no-forbidden-methods.phpt
│ │ │ ├── traits-no-properties.phpt
│ │ │ ├── traits.phpt
│ │ │ ├── unit-cases.phpt
│ │ │ ├── unserialize-const.phpt
│ │ │ ├── unserialize-missing-colon.phpt
│ │ │ ├── unserialize-non-enum.phpt
│ │ │ ├── unserialize-non-existent-case.phpt
│ │ │ ├── unserialize-refcount.phpt
│ │ │ ├── unserialize.phpt
│ │ │ ├── update-class-constant-failure.phpt
│ │ │ ├── value-property-type.phpt
│ │ │ ├── var_dump-nested.phpt
│ │ │ ├── var_dump-reference.phpt
│ │ │ ├── var_export.phpt
│ │ │ └── weak-map.phpt
│ │ ├── enum_in_stack_trace.phpt
│ │ ├── errmsg_001.phpt
│ │ ├── errmsg_002.phpt
│ │ ├── errmsg_003.phpt
│ │ ├── errmsg_004.phpt
│ │ ├── errmsg_005.phpt
│ │ ├── errmsg_006.phpt
│ │ ├── errmsg_007.phpt
│ │ ├── errmsg_008.phpt
│ │ ├── errmsg_009.phpt
│ │ ├── errmsg_010.phpt
│ │ ├── errmsg_011.phpt
│ │ ├── errmsg_013.phpt
│ │ ├── errmsg_015.phpt
│ │ ├── errmsg_016.phpt
│ │ ├── errmsg_017.phpt
│ │ ├── errmsg_018.phpt
│ │ ├── errmsg_019.phpt
│ │ ├── errmsg_020.phpt
│ │ ├── errmsg_021.phpt
│ │ ├── errmsg_022.phpt
│ │ ├── errmsg_023.phpt
│ │ ├── errmsg_024.phpt
│ │ ├── errmsg_025.phpt
│ │ ├── errmsg_026.phpt
│ │ ├── errmsg_027.phpt
│ │ ├── errmsg_028.phpt
│ │ ├── errmsg_029.phpt
│ │ ├── errmsg_030.phpt
│ │ ├── errmsg_031.phpt
│ │ ├── errmsg_032.phpt
│ │ ├── errmsg_033.phpt
│ │ ├── errmsg_034.phpt
│ │ ├── errmsg_035.phpt
│ │ ├── errmsg_036.phpt
│ │ ├── errmsg_037.phpt
│ │ ├── errmsg_038.phpt
│ │ ├── errmsg_039.phpt
│ │ ├── errmsg_040.phpt
│ │ ├── errmsg_042.phpt
│ │ ├── errmsg_044.phpt
│ │ ├── errmsg_045.phpt
│ │ ├── error_reporting01.phpt
│ │ ├── error_reporting02.phpt
│ │ ├── error_reporting03.phpt
│ │ ├── error_reporting04.phpt
│ │ ├── error_reporting05.phpt
│ │ ├── error_reporting06.phpt
│ │ ├── error_reporting07.phpt
│ │ ├── error_reporting08.phpt
│ │ ├── error_reporting09.phpt
│ │ ├── error_reporting10.phpt
│ │ ├── eval_constant_resolution.phpt
│ │ ├── eval_parse_error_with_doc_comment.phpt
│ │ ├── ex_func_null_during_property_write.phpt
│ │ ├── exception_001.phpt
│ │ ├── exception_002.phpt
│ │ ├── exception_003.phpt
│ │ ├── exception_004.phpt
│ │ ├── exception_005.phpt
│ │ ├── exception_006.phpt
│ │ ├── exception_007.phpt
│ │ ├── exception_008.phpt
│ │ ├── exception_009.phpt
│ │ ├── exception_011.phpt
│ │ ├── exception_013.phpt
│ │ ├── exception_014.phpt
│ │ ├── exception_015.phpt
│ │ ├── exception_016.phpt
│ │ ├── exception_017.phpt
│ │ ├── exception_018.phpt
│ │ ├── exception_019.phpt
│ │ ├── exception_020.phpt
│ │ ├── exception_021.phpt
│ │ ├── exception_022.phpt
│ │ ├── exception_023.phpt
│ │ ├── exception_024.phpt
│ │ ├── exception_025.phpt
│ │ ├── exception_026.phpt
│ │ ├── exception_027.phpt
│ │ ├── exception_028.phpt
│ │ ├── exception_before_fatal.phpt
│ │ ├── exception_delayed_message.phpt
│ │ ├── exception_during_by_reference_magic_get.phpt
│ │ ├── exception_during_include_stat.phpt
│ │ ├── exception_during_property_assign_op.phpt
│ │ ├── exception_during_variance_autoload.phpt
│ │ ├── exception_during_variance_autoload_2.phpt
│ │ ├── exception_from_toString.phpt
│ │ ├── exception_getters_with_ref_props.phpt
│ │ ├── exception_handler_001.phpt
│ │ ├── exception_handler_002.phpt
│ │ ├── exception_handler_003.phpt
│ │ ├── exception_handler_004.phpt
│ │ ├── exception_handler_005.phpt
│ │ ├── exception_handler_006.phpt
│ │ ├── exception_handler_007.phpt
│ │ ├── exception_ignore_args.phpt
│ │ ├── exception_in_nested_rope.phpt
│ │ ├── exception_in_rope_end.phpt
│ │ ├── exception_set_previous_leak.phpt
│ │ ├── exception_stream_wrapper.phpt
│ │ ├── exception_with_by_ref_message.phpt
│ │ ├── exit/
│ │ │ ├── ast_print_assert_die_const.phpt
│ │ │ ├── ast_print_assert_die_function.phpt
│ │ │ ├── ast_print_assert_exit_const.phpt
│ │ │ ├── ast_print_assert_exit_function.phpt
│ │ │ ├── define_class_members_exit_die.phpt
│ │ │ ├── define_die_constant.phpt
│ │ │ ├── define_die_constant_namespace.phpt
│ │ │ ├── define_die_function.phpt
│ │ │ ├── define_die_function_namespace.phpt
│ │ │ ├── define_exit_constant.phpt
│ │ │ ├── define_exit_constant_namespace.phpt
│ │ │ ├── define_exit_function.phpt
│ │ │ ├── define_exit_function_namespace.phpt
│ │ │ ├── define_goto_label_die.phpt
│ │ │ ├── define_goto_label_die_with_jump.phpt
│ │ │ ├── define_goto_label_exit.phpt
│ │ │ ├── define_goto_label_exit_with_jump.phpt
│ │ │ ├── die_string_cast_exception.phpt
│ │ │ ├── disabling_die.phpt
│ │ │ ├── disabling_exit.phpt
│ │ │ ├── exit_as_function.phpt
│ │ │ ├── exit_named_arg.phpt
│ │ │ ├── exit_statements.phpt
│ │ │ ├── exit_string_with_buffer_output.phpt
│ │ │ └── exit_values.phpt
│ │ ├── exit_exception_handler.phpt
│ │ ├── exit_finally_1.phpt
│ │ ├── exit_finally_2.phpt
│ │ ├── exit_finally_3.phpt
│ │ ├── fake_closure_in_internal_func_leaks.phpt
│ │ ├── falsetoarray.phpt
│ │ ├── falsetoarray_002.phpt
│ │ ├── falsetoarray_003.phpt
│ │ ├── fe_fetch_dtor_exception.phpt
│ │ ├── fe_fetch_op2_live_range.phpt
│ │ ├── fibers/
│ │ │ ├── backtrace-deep-nesting.phpt
│ │ │ ├── backtrace-nested.phpt
│ │ │ ├── backtrace-object.phpt
│ │ │ ├── call-to-ctor-of-terminated-fiber.phpt
│ │ │ ├── catch-then-suspend.phpt
│ │ │ ├── catch.phpt
│ │ │ ├── debug-backtrace.phpt
│ │ │ ├── destructors_001.phpt
│ │ │ ├── destructors_002.phpt
│ │ │ ├── destructors_003.phpt
│ │ │ ├── destructors_004.phpt
│ │ │ ├── destructors_005.phpt
│ │ │ ├── destructors_006.phpt
│ │ │ ├── destructors_007.phpt
│ │ │ ├── destructors_008.phpt
│ │ │ ├── destructors_009.phpt
│ │ │ ├── destructors_010.phpt
│ │ │ ├── destructors_011.phpt
│ │ │ ├── double-start.phpt
│ │ │ ├── error-reporting.phpt
│ │ │ ├── exit-in-fiber.phpt
│ │ │ ├── failing-fiber.phpt
│ │ │ ├── failing-nested-fiber.phpt
│ │ │ ├── fast-finish-fiber.phpt
│ │ │ ├── fatal-error-in-fiber.phpt
│ │ │ ├── fatal-error-in-nested-fiber.phpt
│ │ │ ├── fatal-error-with-multiple-fibers.phpt
│ │ │ ├── fiber-error-construct.phpt
│ │ │ ├── fiber-get-current.phpt
│ │ │ ├── fiber-in-shutdown-function.phpt
│ │ │ ├── fiber-status.phpt
│ │ │ ├── gc-cycle-callback.phpt
│ │ │ ├── gc-cycle-result.phpt
│ │ │ ├── get-return-after-bailout.phpt
│ │ │ ├── get-return-after-throwing.phpt
│ │ │ ├── get-return-from-unstarted-fiber.phpt
│ │ │ ├── get-return-in-unfinished-fiber.phpt
│ │ │ ├── get-return.phpt
│ │ │ ├── gh10249.phpt
│ │ │ ├── gh10340-001.phpt
│ │ │ ├── gh10340-002.phpt
│ │ │ ├── gh10340-003.phpt
│ │ │ ├── gh10437.phpt
│ │ │ ├── gh10496-001.phpt
│ │ │ ├── gh10496-002.phpt
│ │ │ ├── gh9735-001.phpt
│ │ │ ├── gh9735-002.phpt
│ │ │ ├── gh9735-003.phpt
│ │ │ ├── gh9735-004.phpt
│ │ │ ├── gh9735-005.phpt
│ │ │ ├── gh9735-006.phpt
│ │ │ ├── gh9735-007.phpt
│ │ │ ├── gh9735-008.phpt
│ │ │ ├── gh9735-009.phpt
│ │ │ ├── invocable-class.phpt
│ │ │ ├── multiple-calls-to-ctor.phpt
│ │ │ ├── negative_stack_size.phpt
│ │ │ ├── no-switch-dtor-resume.phpt
│ │ │ ├── no-switch-dtor-start.phpt
│ │ │ ├── no-switch-dtor-suspend.phpt
│ │ │ ├── no-switch-dtor-throw.phpt
│ │ │ ├── no-switch-force-close-finally.phpt
│ │ │ ├── no-switch-gc.phpt
│ │ │ ├── out-of-memory-in-fiber.phpt
│ │ │ ├── out-of-memory-in-nested-fiber.phpt
│ │ │ ├── out-of-memory-in-recursive-fiber.phpt
│ │ │ ├── resume-non-running-fiber.phpt
│ │ │ ├── resume-previous-fiber.phpt
│ │ │ ├── resume-running-fiber.phpt
│ │ │ ├── resume-terminated-fiber.phpt
│ │ │ ├── resume.phpt
│ │ │ ├── return-by-ref.phpt
│ │ │ ├── signal-async.phpt
│ │ │ ├── signal-dispatch.phpt
│ │ │ ├── silence-operator-inside-fiber.phpt
│ │ │ ├── silence-operator-outside-fiber.phpt
│ │ │ ├── start-arguments.phpt
│ │ │ ├── suspend-in-force-close-fiber-after-shutdown.phpt
│ │ │ ├── suspend-in-force-close-fiber-catching-exception.phpt
│ │ │ ├── suspend-in-force-close-fiber.phpt
│ │ │ ├── suspend-in-nested-function.phpt
│ │ │ ├── suspend-outside-fiber.phpt
│ │ │ ├── throw-during-fiber-destruct.phpt
│ │ │ ├── throw-in-multiple-destroyed-fibers-after-shutdown.phpt
│ │ │ ├── throw-into-non-running-fiber.phpt
│ │ │ ├── throw.phpt
│ │ │ ├── ticks.phpt
│ │ │ ├── unfinished-fiber-with-finally.phpt
│ │ │ ├── unfinished-fiber-with-nested-try-catch.phpt
│ │ │ ├── unfinished-fiber-with-suspend-in-finally.phpt
│ │ │ ├── unfinished-fiber-with-throw-in-finally.phpt
│ │ │ ├── unfinished-fiber.phpt
│ │ │ └── unstarted-fiber.phpt
│ │ ├── first_class_callable_001.phpt
│ │ ├── first_class_callable_002.phpt
│ │ ├── first_class_callable_003.phpt
│ │ ├── first_class_callable_004.phpt
│ │ ├── first_class_callable_005.phpt
│ │ ├── first_class_callable_006.phpt
│ │ ├── first_class_callable_007.phpt
│ │ ├── first_class_callable_008.phpt
│ │ ├── first_class_callable_009.phpt
│ │ ├── first_class_callable_010.phpt
│ │ ├── first_class_callable_011.phpt
│ │ ├── first_class_callable_012.phpt
│ │ ├── first_class_callable_013.phpt
│ │ ├── first_class_callable_014.phpt
│ │ ├── first_class_callable_015.phpt
│ │ ├── first_class_callable_015_strict.inc
│ │ ├── first_class_callable_015_weak.inc
│ │ ├── first_class_callable_016.phpt
│ │ ├── first_class_callable_assert.phpt
│ │ ├── first_class_callable_assert2.phpt
│ │ ├── first_class_callable_assert3.phpt
│ │ ├── first_class_callable_dynamic.phpt
│ │ ├── first_class_callable_errors.phpt
│ │ ├── first_class_callable_optimization.phpt
│ │ ├── first_class_callable_refs.phpt
│ │ ├── first_class_callable_signature.phpt
│ │ ├── flexible-heredoc-complex-test1.phpt
│ │ ├── flexible-heredoc-complex-test2.phpt
│ │ ├── flexible-heredoc-complex-test3.phpt
│ │ ├── flexible-heredoc-complex-test4.phpt
│ │ ├── flexible-heredoc-error1.phpt
│ │ ├── flexible-heredoc-error10.phpt
│ │ ├── flexible-heredoc-error11.phpt
│ │ ├── flexible-heredoc-error12.phpt
│ │ ├── flexible-heredoc-error13.phpt
│ │ ├── flexible-heredoc-error2.phpt
│ │ ├── flexible-heredoc-error3.phpt
│ │ ├── flexible-heredoc-error4.phpt
│ │ ├── flexible-heredoc-error5.phpt
│ │ ├── flexible-heredoc-error6.phpt
│ │ ├── flexible-heredoc-error7.phpt
│ │ ├── flexible-heredoc-error8.phpt
│ │ ├── flexible-heredoc-error9.phpt
│ │ ├── flexible-heredoc-nowdoc-lineno.phpt
│ │ ├── flexible-heredoc-nowdoc.phpt
│ │ ├── flexible-nowdoc-error1.phpt
│ │ ├── flexible-nowdoc-error2.phpt
│ │ ├── flexible-nowdoc-error3.phpt
│ │ ├── flexible-nowdoc-error4.phpt
│ │ ├── flexible-nowdoc-error5.phpt
│ │ ├── flexible-nowdoc-error6.phpt
│ │ ├── flexible-nowdoc-error7.phpt
│ │ ├── flexible-nowdoc-error8.phpt
│ │ ├── float_prec_001.phpt
│ │ ├── float_to_int/
│ │ │ ├── explicit_casts_should_not_warn.phpt
│ │ │ ├── explicit_casts_should_not_warn_32bit.phpt
│ │ │ ├── negative_zero_check.phpt
│ │ │ ├── no_warning_compatible_float_literals.phpt
│ │ │ ├── no_warning_compatible_string_float_literals.phpt
│ │ │ ├── no_warnings_compatible_float_literals_assignment_ops.phpt
│ │ │ ├── no_warnings_compatible_float_vars.phpt
│ │ │ ├── no_warnings_compatible_string_float_vars.phpt
│ │ │ ├── union_int_string_type_arg.phpt
│ │ │ ├── union_int_string_type_arg_promote_exception.phpt
│ │ │ ├── warning_float_does_not_fit_zend_long_arrays.phpt
│ │ │ ├── warning_float_does_not_fit_zend_long_strings.phpt
│ │ │ ├── warning_float_does_not_fit_zend_long_strings_32bit.phpt
│ │ │ ├── warnings_float_literals.phpt
│ │ │ ├── warnings_float_literals_assignment_ops.phpt
│ │ │ ├── warnings_float_vars.phpt
│ │ │ ├── warnings_string_float_literals.phpt
│ │ │ ├── warnings_string_float_literals_assignment_ops.phpt
│ │ │ └── warnings_string_float_vars.phpt
│ │ ├── foreach.phpt
│ │ ├── foreach_002.phpt
│ │ ├── foreach_003.phpt
│ │ ├── foreach_004.phpt
│ │ ├── foreach_005.phpt
│ │ ├── foreach_006.phpt
│ │ ├── foreach_007.phpt
│ │ ├── foreach_008.phpt
│ │ ├── foreach_009.phpt
│ │ ├── foreach_010.phpt
│ │ ├── foreach_011.phpt
│ │ ├── foreach_012.phpt
│ │ ├── foreach_013.phpt
│ │ ├── foreach_014.phpt
│ │ ├── foreach_015.phpt
│ │ ├── foreach_016.phpt
│ │ ├── foreach_017.phpt
│ │ ├── foreach_018.phpt
│ │ ├── foreach_by_ref_repacking_insert.phpt
│ │ ├── foreach_by_ref_to_property.phpt
│ │ ├── foreach_empty_loop_leak.phpt
│ │ ├── foreach_list_001.phpt
│ │ ├── foreach_list_002.phpt
│ │ ├── foreach_list_003.phpt
│ │ ├── foreach_list_004.phpt
│ │ ├── foreach_list_keyed.phpt
│ │ ├── foreach_over_null.phpt
│ │ ├── foreach_reference.phpt
│ │ ├── foreach_shadowed_dyn_property.phpt
│ │ ├── foreach_shadowed_property.phpt
│ │ ├── foreach_temp_array_expr_with_refs.phpt
│ │ ├── foreach_undefined.phpt
│ │ ├── foreach_unset_globals.phpt
│ │ ├── fr47160.phpt
│ │ ├── frameless_bug_001.phpt
│ │ ├── frameless_jmp_001.phpt
│ │ ├── frameless_jmp_002.phpt
│ │ ├── frameless_jmp_003.phpt
│ │ ├── frameless_jmp_004.phpt
│ │ ├── frameless_jmp_005.phpt
│ │ ├── frameless_throwing_destructor.phpt
│ │ ├── frameless_undefined_var.phpt
│ │ ├── func_arg_fetch_optimization.phpt
│ │ ├── func_get_args.phpt
│ │ ├── func_sig_trailing_comma.phpt
│ │ ├── function_arguments/
│ │ │ ├── argument_count_correct.phpt
│ │ │ ├── argument_count_correct_strict.phpt
│ │ │ ├── argument_count_incorrect_internal.phpt
│ │ │ ├── argument_count_incorrect_internal_strict.phpt
│ │ │ ├── argument_count_incorrect_userland.phpt
│ │ │ ├── argument_count_incorrect_userland_strict.phpt
│ │ │ ├── call_with_leading_comma_error.phpt
│ │ │ ├── call_with_multi_inner_comma_error.phpt
│ │ │ ├── call_with_multi_trailing_comma_error.phpt
│ │ │ ├── call_with_only_comma_error.phpt
│ │ │ ├── call_with_trailing_comma_basic.phpt
│ │ │ ├── sensitive_parameter.phpt
│ │ │ ├── sensitive_parameter_arrow_function.phpt
│ │ │ ├── sensitive_parameter_closure.phpt
│ │ │ ├── sensitive_parameter_correctly_captures_original.phpt
│ │ │ ├── sensitive_parameter_eval_call.phpt
│ │ │ ├── sensitive_parameter_eval_define.phpt
│ │ │ ├── sensitive_parameter_extra_arguments.phpt
│ │ │ ├── sensitive_parameter_multiple_arguments.phpt
│ │ │ ├── sensitive_parameter_named_arguments.phpt
│ │ │ ├── sensitive_parameter_nested_calls.phpt
│ │ │ ├── sensitive_parameter_value.phpt
│ │ │ ├── sensitive_parameter_value_clone.phpt
│ │ │ ├── sensitive_parameter_value_keeps_object_alive.phpt
│ │ │ ├── sensitive_parameter_value_no_dynamic_property.phpt
│ │ │ ├── sensitive_parameter_value_reflection.phpt
│ │ │ ├── sensitive_parameter_value_serialize.phpt
│ │ │ ├── sensitive_parameter_value_to_string.phpt
│ │ │ ├── sensitive_parameter_variadic_arguments.phpt
│ │ │ └── variadic_argument_type_error.phpt
│ │ ├── function_arguments_001.phpt
│ │ ├── function_arguments_002.phpt
│ │ ├── function_arguments_003.phpt
│ │ ├── function_default_argument_cache.phpt
│ │ ├── function_exists_basic.phpt
│ │ ├── function_outside_namespace.phpt
│ │ ├── function_redecl.phpt
│ │ ├── gc_001.phpt
│ │ ├── gc_002.phpt
│ │ ├── gc_003.phpt
│ │ ├── gc_004.phpt
│ │ ├── gc_005.phpt
│ │ ├── gc_006.phpt
│ │ ├── gc_007.phpt
│ │ ├── gc_008.phpt
│ │ ├── gc_009.phpt
│ │ ├── gc_011.phpt
│ │ ├── gc_012.phpt
│ │ ├── gc_013.phpt
│ │ ├── gc_014.phpt
│ │ ├── gc_015.phpt
│ │ ├── gc_016.phpt
│ │ ├── gc_017.phpt
│ │ ├── gc_018.phpt
│ │ ├── gc_019.phpt
│ │ ├── gc_020.phpt
│ │ ├── gc_021.phpt
│ │ ├── gc_022.phpt
│ │ ├── gc_023.phpt
│ │ ├── gc_024.phpt
│ │ ├── gc_025.phpt
│ │ ├── gc_026.phpt
│ │ ├── gc_027.phpt
│ │ ├── gc_028.phpt
│ │ ├── gc_029.phpt
│ │ ├── gc_030.phpt
│ │ ├── gc_031.phpt
│ │ ├── gc_032.phpt
│ │ ├── gc_033.phpt
│ │ ├── gc_034.phpt
│ │ ├── gc_035.phpt
│ │ ├── gc_036.phpt
│ │ ├── gc_037.phpt
│ │ ├── gc_038.phpt
│ │ ├── gc_039.phpt
│ │ ├── gc_041.phpt
│ │ ├── gc_042.phpt
│ │ ├── gc_043.phpt
│ │ ├── gc_044.phpt
│ │ ├── gc_045.phpt
│ │ ├── gc_046.phpt
│ │ ├── gc_047.phpt
│ │ ├── gc_048.phpt
│ │ ├── gc_049.phpt
│ │ ├── gc_050.phpt
│ │ ├── generators/
│ │ │ ├── aborted_yield_during_nested_fcalls.phpt
│ │ │ ├── aborted_yield_during_new.phpt
│ │ │ ├── aborted_yield_during_switch.phpt
│ │ │ ├── auto_incrementing_keys.phpt
│ │ │ ├── backtrace.phpt
│ │ │ ├── backtrace_multi_yield_from.phpt
│ │ │ ├── basic_yield_from_exception_handling.phpt
│ │ │ ├── basic_yield_from_proxying.phpt
│ │ │ ├── bug63066.phpt
│ │ │ ├── bug65035.phpt
│ │ │ ├── bug65161.phpt
│ │ │ ├── bug66041.phpt
│ │ │ ├── bug67497.phpt
│ │ │ ├── bug69419.phpt
│ │ │ ├── bug70904.phpt
│ │ │ ├── bug70965.phpt
│ │ │ ├── bug71013.phpt
│ │ │ ├── bug71297.phpt
│ │ │ ├── bug71441.phpt
│ │ │ ├── bug71601.phpt
│ │ │ ├── bug72523.phpt
│ │ │ ├── bug74157.phpt
│ │ │ ├── bug74606.phpt
│ │ │ ├── bug74954.phpt
│ │ │ ├── bug75396.phpt
│ │ │ ├── bug76427.phpt
│ │ │ ├── bug78434.phpt
│ │ │ ├── bug79600.phpt
│ │ │ ├── bug80240.phpt
│ │ │ ├── clone.phpt
│ │ │ ├── dangling_send_target.phpt
│ │ │ ├── debugInfo_001.phpt
│ │ │ ├── dynamic_call.phpt
│ │ │ ├── dynamic_properties.phpt
│ │ │ ├── errors/
│ │ │ │ ├── count_error.phpt
│ │ │ │ ├── generator_extend_error.phpt
│ │ │ │ ├── generator_instantiate_error.phpt
│ │ │ │ ├── non_ref_generator_iterated_by_ref_error.phpt
│ │ │ │ ├── resume_running_generator_error.phpt
│ │ │ │ ├── resume_running_generator_error_002.phpt
│ │ │ │ ├── resume_running_generator_error_003.phpt
│ │ │ │ ├── serialize_unserialize_error.phpt
│ │ │ │ ├── yield_const_by_ref_error.phpt
│ │ │ │ ├── yield_in_force_closed_finally_error.phpt
│ │ │ │ ├── yield_non_ref_function_call_by_ref_error.phpt
│ │ │ │ └── yield_outside_function_error.phpt
│ │ │ ├── exception_during_shutdown.phpt
│ │ │ ├── fibonacci.phpt
│ │ │ ├── finally/
│ │ │ │ ├── finally_ran_on_close.phpt
│ │ │ │ ├── return_return.phpt
│ │ │ │ ├── return_yield.phpt
│ │ │ │ ├── run_on_dtor.phpt
│ │ │ │ ├── throw_yield.phpt
│ │ │ │ ├── yield_return.phpt
│ │ │ │ ├── yield_throw.phpt
│ │ │ │ └── yield_yield.phpt
│ │ │ ├── func_get_args.phpt
│ │ │ ├── gc_order.phpt
│ │ │ ├── gc_running_generator.phpt
│ │ │ ├── gc_with_iterator_in_foreach.phpt
│ │ │ ├── gc_with_root_parent_mismatch.phpt
│ │ │ ├── gc_with_yield_from.phpt
│ │ │ ├── generator_closure.phpt
│ │ │ ├── generator_closure_collection.phpt
│ │ │ ├── generator_closure_unused.phpt
│ │ │ ├── generator_closure_with_this.phpt
│ │ │ ├── generator_in_multipleiterator.phpt
│ │ │ ├── generator_method.phpt
│ │ │ ├── generator_method_by_ref.phpt
│ │ │ ├── generator_return_return_type.phpt
│ │ │ ├── generator_return_without_value.phpt
│ │ │ ├── generator_returns_generator.phpt
│ │ │ ├── generator_rewind.phpt
│ │ │ ├── generator_send.phpt
│ │ │ ├── generator_static_method.phpt
│ │ │ ├── generator_symtable_leak.phpt
│ │ │ ├── generator_throwing_during_function_call.phpt
│ │ │ ├── generator_throwing_exception.phpt
│ │ │ ├── generator_throwing_in_foreach.phpt
│ │ │ ├── generator_trampoline.phpt
│ │ │ ├── generator_with_arg_unpacking.phpt
│ │ │ ├── generator_with_keys.phpt
│ │ │ ├── generator_with_nonscalar_keys.phpt
│ │ │ ├── generator_with_type_check.phpt
│ │ │ ├── generator_with_type_check_2.phpt
│ │ │ ├── get_return.phpt
│ │ │ ├── get_return_and_finally.phpt
│ │ │ ├── get_return_errors.phpt
│ │ │ ├── get_return_types.phpt
│ │ │ ├── gh11028_1.phpt
│ │ │ ├── gh11028_2.phpt
│ │ │ ├── gh11028_3.phpt
│ │ │ ├── gh14387.phpt
│ │ │ ├── gh15851.phpt
│ │ │ ├── gh8289.phpt
│ │ │ ├── gh9750-001.phpt
│ │ │ ├── gh9750-002.phpt
│ │ │ ├── gh9750-003.phpt
│ │ │ ├── gh9750-004.phpt
│ │ │ ├── gh9750-005.phpt
│ │ │ ├── gh9750-006.phpt
│ │ │ ├── gh9750-007.phpt
│ │ │ ├── gh9750-008.phpt
│ │ │ ├── gh9750-009.phpt
│ │ │ ├── gh9750-010.phpt
│ │ │ ├── gh9750-011.phpt
│ │ │ ├── gh9752.phpt
│ │ │ ├── gh9801.phpt
│ │ │ ├── ignored_send_leak.phpt
│ │ │ ├── iterator_wrapper_leak.phpt
│ │ │ ├── multiple_yield_from_on_same_generator.phpt
│ │ │ ├── mutli_yield_from_with_exception.phpt
│ │ │ ├── nested_calls_with_die.phpt
│ │ │ ├── nested_method_calls.phpt
│ │ │ ├── no_foreach_var_leaks.phpt
│ │ │ ├── recursive_yield_from.phpt
│ │ │ ├── repeated_yield_from_with_immediate_release.phpt
│ │ │ ├── return_from_by_ref_generator.phpt
│ │ │ ├── send_after_close.phpt
│ │ │ ├── send_returns_current.phpt
│ │ │ ├── throw_already_closed.phpt
│ │ │ ├── throw_caught.phpt
│ │ │ ├── throw_into_yield_from_array.phpt
│ │ │ ├── throw_not_an_exception.phpt
│ │ │ ├── throw_rethrow.phpt
│ │ │ ├── throw_uncaught.phpt
│ │ │ ├── unused_return_value.phpt
│ │ │ ├── xrange.phpt
│ │ │ ├── yield_array_key.phpt
│ │ │ ├── yield_array_offset_by_ref.phpt
│ │ │ ├── yield_by_reference.phpt
│ │ │ ├── yield_by_reference_optimization.phpt
│ │ │ ├── yield_closure.phpt
│ │ │ ├── yield_during_function_call.phpt
│ │ │ ├── yield_during_method_call.phpt
│ │ │ ├── yield_from_aborted_generator_with_children.phpt
│ │ │ ├── yield_from_already_running.phpt
│ │ │ ├── yield_from_array.phpt
│ │ │ ├── yield_from_backtrace.phpt
│ │ │ ├── yield_from_by_reference.phpt
│ │ │ ├── yield_from_chain_dtor_order.phpt
│ │ │ ├── yield_from_deep_recursion.phpt
│ │ │ ├── yield_from_force_closed.phpt
│ │ │ ├── yield_from_greedy_parse.phpt
│ │ │ ├── yield_from_iterator.phpt
│ │ │ ├── yield_from_iterator_agregate.phpt
│ │ │ ├── yield_from_multi_tree.phpt
│ │ │ ├── yield_from_multi_tree_exception.phpt
│ │ │ ├── yield_from_multi_tree_single_nodes.phpt
│ │ │ ├── yield_from_non_iterable.phpt
│ │ │ ├── yield_from_throw_with_throwing_exception.phpt
│ │ │ ├── yield_from_valid_exception.phpt
│ │ │ ├── yield_in_finally.phpt
│ │ │ ├── yield_in_finally_cleanup.phpt
│ │ │ ├── yield_in_parenthesis.phpt
│ │ │ ├── yield_precedence.phpt
│ │ │ ├── yield_ref_function_call_by_reference.phpt
│ │ │ ├── yield_unary_precedence.phpt
│ │ │ └── yield_without_value.phpt
│ │ ├── get_called_class_001.phpt
│ │ ├── get_class_methods_001.phpt
│ │ ├── get_class_methods_002.phpt
│ │ ├── get_class_methods_003.phpt
│ │ ├── get_class_vars_001.phpt
│ │ ├── get_class_vars_002.phpt
│ │ ├── get_class_vars_003.phpt
│ │ ├── get_class_vars_004.phpt
│ │ ├── get_class_vars_005.phpt
│ │ ├── get_class_vars_006.phpt
│ │ ├── get_class_vars_007.phpt
│ │ ├── get_class_vars_typed_props.phpt
│ │ ├── get_defined_functions_basic.phpt
│ │ ├── get_defined_vars.phpt
│ │ ├── get_mangled_object_vars.phpt
│ │ ├── get_parent_class_001.phpt
│ │ ├── get_required_files.phpt
│ │ ├── get_resource_id.phpt
│ │ ├── gh10014.phpt
│ │ ├── gh10072-2.phpt
│ │ ├── gh10072.phpt
│ │ ├── gh10168/
│ │ │ ├── assign.phpt
│ │ │ ├── assign_dim.phpt
│ │ │ ├── assign_dim_ref.phpt
│ │ │ ├── assign_dim_ref_with_prop_ref.phpt
│ │ │ ├── assign_dim_with_prop_ref.phpt
│ │ │ ├── assign_prop.phpt
│ │ │ ├── assign_prop_ref.phpt
│ │ │ ├── assign_prop_ref_with_prop_ref.phpt
│ │ │ ├── assign_prop_with_prop_ref.phpt
│ │ │ ├── assign_ref.phpt
│ │ │ ├── assign_ref_with_prop_ref.phpt
│ │ │ ├── assign_static_prop.phpt
│ │ │ ├── assign_static_prop_ref.phpt
│ │ │ ├── assign_static_prop_ref_with_prop_ref.phpt
│ │ │ ├── assign_static_prop_with_prop_ref.phpt
│ │ │ ├── assign_static_untyped_prop.phpt
│ │ │ ├── assign_static_untyped_prop_ref.phpt
│ │ │ ├── assign_static_untyped_prop_ref_with_prop_ref.phpt
│ │ │ ├── assign_static_untyped_prop_with_prop_ref.phpt
│ │ │ ├── assign_untyped_prop.phpt
│ │ │ ├── assign_untyped_prop_ref.phpt
│ │ │ ├── assign_untyped_prop_ref_with_prop_ref.phpt
│ │ │ ├── assign_untyped_prop_with_prop_ref.phpt
│ │ │ ├── assign_with_prop_ref.phpt
│ │ │ └── wrong_assign_to_variable.phpt
│ │ ├── gh10169.phpt
│ │ ├── gh10232/
│ │ │ ├── constant_def.inc
│ │ │ └── required.inc
│ │ ├── gh10232.phpt
│ │ ├── gh10251.phpt
│ │ ├── gh10346.phpt
│ │ ├── gh10356.phpt
│ │ ├── gh10377.phpt
│ │ ├── gh10377_1.phpt
│ │ ├── gh10377_2.phpt
│ │ ├── gh10377_3.phpt
│ │ ├── gh10377_4.phpt
│ │ ├── gh10469.phpt
│ │ ├── gh10486.phpt
│ │ ├── gh10486_2.phpt
│ │ ├── gh10570.phpt
│ │ ├── gh10634.phpt
│ │ ├── gh10695_1.phpt
│ │ ├── gh10695_2.phpt
│ │ ├── gh10695_3.phpt
│ │ ├── gh10695_4.phpt
│ │ ├── gh10695_5.phpt
│ │ ├── gh10695_6.phpt
│ │ ├── gh10695_7.phpt
│ │ ├── gh10709.phpt
│ │ ├── gh10709_2.phpt
│ │ ├── gh10709_3.phpt
│ │ ├── gh10810.phpt
│ │ ├── gh10935.phpt
│ │ ├── gh11016.phpt
│ │ ├── gh11108.phpt
│ │ ├── gh11108_shutdown.inc
│ │ ├── gh11108_test.inc
│ │ ├── gh11138.phpt
│ │ ├── gh11152.phpt
│ │ ├── gh11171.phpt
│ │ ├── gh11189.phpt
│ │ ├── gh11189_1.phpt
│ │ ├── gh11222.phpt
│ │ ├── gh11244-001.phpt
│ │ ├── gh11244-002.phpt
│ │ ├── gh11244-003.phpt
│ │ ├── gh11244-004.phpt
│ │ ├── gh11244-005.phpt
│ │ ├── gh11320_1.phpt
│ │ ├── gh11320_2.phpt
│ │ ├── gh11320_3.phpt
│ │ ├── gh11488.phpt
│ │ ├── gh11580.phpt
│ │ ├── gh11735_1.phpt
│ │ ├── gh11735_2.phpt
│ │ ├── gh12073.phpt
│ │ ├── gh12102_1.phpt
│ │ ├── gh12102_2.phpt
│ │ ├── gh12102_3.phpt
│ │ ├── gh12366.inc
│ │ ├── gh12366.phpt
│ │ ├── gh12457.phpt
│ │ ├── gh12468_1.phpt
│ │ ├── gh12468_2.phpt
│ │ ├── gh12826.phpt
│ │ ├── gh13097_a.phpt
│ │ ├── gh13097_b.phpt
│ │ ├── gh13142.phpt
│ │ ├── gh13145.phpt
│ │ ├── gh13178_1.phpt
│ │ ├── gh13178_2.phpt
│ │ ├── gh13178_3.phpt
│ │ ├── gh13178_4.phpt
│ │ ├── gh13178_5.phpt
│ │ ├── gh13446_1.phpt
│ │ ├── gh13446_2.phpt
│ │ ├── gh13446_3.phpt
│ │ ├── gh13446_4.phpt
│ │ ├── gh13569.phpt
│ │ ├── gh13670_001.phpt
│ │ ├── gh13670_002.phpt
│ │ ├── gh13670_003.phpt
│ │ ├── gh13931.phpt
│ │ ├── gh14003.phpt
│ │ ├── gh14009_001.phpt
│ │ ├── gh14009_002.phpt
│ │ ├── gh14009_003.phpt
│ │ ├── gh14009_004.phpt
│ │ ├── gh14009_005.phpt
│ │ ├── gh14456.phpt
│ │ ├── gh14480.phpt
│ │ ├── gh14626.phpt
│ │ ├── gh14961.phpt
│ │ ├── gh14969.phpt
│ │ ├── gh15108-001.phpt
│ │ ├── gh15108-002.phpt
│ │ ├── gh15108-003.phpt
│ │ ├── gh15108-004.phpt
│ │ ├── gh15108-005.phpt
│ │ ├── gh15108-006.phpt
│ │ ├── gh15108-007.phpt
│ │ ├── gh15240.phpt
│ │ ├── gh15275-001.phpt
│ │ ├── gh15275-002.phpt
│ │ ├── gh15275-003.phpt
│ │ ├── gh15275-004.phpt
│ │ ├── gh15275-005.phpt
│ │ ├── gh15275-006.phpt
│ │ ├── gh15330-001.phpt
│ │ ├── gh15330-002.phpt
│ │ ├── gh15330-003.phpt
│ │ ├── gh15330-004.phpt
│ │ ├── gh15330-005.phpt
│ │ ├── gh15330-006.phpt
│ │ ├── gh15712.phpt
│ │ ├── gh15866.phpt
│ │ ├── gh15907.phpt
│ │ ├── gh15976/
│ │ │ ├── alias-names.phpt
│ │ │ ├── class-names.phpt
│ │ │ ├── enum-names.phpt
│ │ │ ├── interface-names.phpt
│ │ │ └── trait-names.phpt
│ │ ├── gh16188.phpt
│ │ ├── gh16293_001.phpt
│ │ ├── gh16293_002.phpt
│ │ ├── gh16371.phpt
│ │ ├── gh16408.phpt
│ │ ├── gh16508.phpt
│ │ ├── gh16509.inc
│ │ ├── gh16509.phpt
│ │ ├── gh16515.phpt
│ │ ├── gh16615_001.phpt
│ │ ├── gh16615_002.phpt
│ │ ├── gh16630.phpt
│ │ ├── gh16648.phpt
│ │ ├── gh16725.phpt
│ │ ├── gh16799.phpt
│ │ ├── gh17162.phpt
│ │ ├── gh17214.phpt
│ │ ├── gh17222.phpt
│ │ ├── gh18572.phpt
│ │ ├── gh18581.phpt
│ │ ├── gh18736.phpt
│ │ ├── gh18756.phpt
│ │ ├── gh18833.phpt
│ │ ├── gh18907.phpt
│ │ ├── gh19044.phpt
│ │ ├── gh19053.phpt
│ │ ├── gh19280.phpt
│ │ ├── gh19305-001.phpt
│ │ ├── gh19305-002.phpt
│ │ ├── gh19305-003.phpt
│ │ ├── gh19306.phpt
│ │ ├── gh19326.phpt
│ │ ├── gh19543-001.phpt
│ │ ├── gh19543-002.phpt
│ │ ├── gh19613.phpt
│ │ ├── gh19679.phpt
│ │ ├── gh19839.phpt
│ │ ├── gh418106144.phpt
│ │ ├── gh7771_1.phpt
│ │ ├── gh7771_1_definition.inc
│ │ ├── gh7771_2.phpt
│ │ ├── gh7771_2_definition.inc
│ │ ├── gh7771_3.phpt
│ │ ├── gh7792_1.phpt
│ │ ├── gh7792_2.phpt
│ │ ├── gh7792_3.phpt
│ │ ├── gh7792_4.phpt
│ │ ├── gh7792_5.phpt
│ │ ├── gh7900.phpt
│ │ ├── gh7958.phpt
│ │ ├── gh8083.phpt
│ │ ├── gh8548.phpt
│ │ ├── gh8548_2.phpt
│ │ ├── gh8810_1.phpt
│ │ ├── gh8810_2.phpt
│ │ ├── gh8810_3.phpt
│ │ ├── gh8810_4.phpt
│ │ ├── gh8810_5.phpt
│ │ ├── gh8810_6.phpt
│ │ ├── gh8810_7.phpt
│ │ ├── gh8821.phpt
│ │ ├── gh8841.phpt
│ │ ├── gh8962.phpt
│ │ ├── gh9136.phpt
│ │ ├── gh9136_2.phpt
│ │ ├── gh9138.phpt
│ │ ├── gh9138_2.phpt
│ │ ├── gh9407.phpt
│ │ ├── gh9500.phpt
│ │ ├── gh9775_1.phpt
│ │ ├── gh9775_2.phpt
│ │ ├── gh9916-001.phpt
│ │ ├── gh9916-002.phpt
│ │ ├── gh9916-003.phpt
│ │ ├── gh9916-004.phpt
│ │ ├── gh9916-005.phpt
│ │ ├── gh9916-006.phpt
│ │ ├── gh9916-007.phpt
│ │ ├── gh9916-008.phpt
│ │ ├── gh9916-009.phpt
│ │ ├── gh9916-010.phpt
│ │ ├── gh9916-011.phpt
│ │ ├── gh9916-012.phpt
│ │ ├── gh_17718_001.phpt
│ │ ├── gh_17718_002.phpt
│ │ ├── gh_17728.phpt
│ │ ├── ghsa-rwp7-7vc6-8477_001.phpt
│ │ ├── ghsa-rwp7-7vc6-8477_002.phpt
│ │ ├── ghsa-rwp7-7vc6-8477_003.phpt
│ │ ├── global_to_string_exception.phpt
│ │ ├── global_with_side_effect_name.phpt
│ │ ├── globals.inc
│ │ ├── globals_001.phpt
│ │ ├── globals_002.phpt
│ │ ├── globals_003.phpt
│ │ ├── globals_004.phpt
│ │ ├── globals_005.phpt
│ │ ├── goto_in_foreach.phpt
│ │ ├── grammar/
│ │ │ ├── bug78441.phpt
│ │ │ ├── regression_001.phpt
│ │ │ ├── regression_002.phpt
│ │ │ ├── regression_003.phpt
│ │ │ ├── regression_004.phpt
│ │ │ ├── regression_005.phpt
│ │ │ ├── regression_006.phpt
│ │ │ ├── regression_007.phpt
│ │ │ ├── regression_008.phpt
│ │ │ ├── regression_009.phpt
│ │ │ ├── regression_010.phpt
│ │ │ ├── regression_011.phpt
│ │ │ ├── regression_012.phpt
│ │ │ ├── regression_013.phpt
│ │ │ ├── semi_reserved_001.phpt
│ │ │ ├── semi_reserved_002.phpt
│ │ │ ├── semi_reserved_003.phpt
│ │ │ ├── semi_reserved_004.phpt
│ │ │ ├── semi_reserved_005.phpt
│ │ │ ├── semi_reserved_006.phpt
│ │ │ ├── semi_reserved_007.phpt
│ │ │ ├── semi_reserved_008.phpt
│ │ │ ├── semi_reserved_009.phpt
│ │ │ └── semi_reserved_010.phpt
│ │ ├── grandparent_prototype.phpt
│ │ ├── halt01.phpt
│ │ ├── halt02.phpt
│ │ ├── halt03.phpt
│ │ ├── halt_compiler1.phpt
│ │ ├── halt_compiler2.phpt
│ │ ├── halt_compiler3.phpt
│ │ ├── halt_compiler4.phpt
│ │ ├── halt_compiler5.phpt
│ │ ├── heredoc_001.phpt
│ │ ├── heredoc_002.phpt
│ │ ├── heredoc_003.phpt
│ │ ├── heredoc_004.phpt
│ │ ├── heredoc_005.phpt
│ │ ├── heredoc_006.phpt
│ │ ├── heredoc_007.phpt
│ │ ├── heredoc_008.phpt
│ │ ├── heredoc_011.phpt
│ │ ├── heredoc_012.phpt
│ │ ├── heredoc_013.phpt
│ │ ├── heredoc_014.phpt
│ │ ├── heredoc_015.phpt
│ │ ├── heredoc_016.phpt
│ │ ├── hex_overflow_32bit.phpt
│ │ ├── iap_on_object_deprecated.phpt
│ │ ├── iface_constant_visibility_variance.phpt
│ │ ├── ignore_repeated_errors.phpt
│ │ ├── ignore_repeated_source.phpt
│ │ ├── illegal_offset_unset_isset_empty.phpt
│ │ ├── in-de-crement/
│ │ │ ├── decrement_001.phpt
│ │ │ ├── decrement_001_64bit.phpt
│ │ │ ├── decrement_diagnostic_change_type.phpt
│ │ │ ├── decrement_with_castable_objects_no_subtraction.phpt
│ │ │ ├── incdec_bool_exception.phpt
│ │ │ ├── incdec_ref_property.phpt
│ │ │ ├── incdec_strings.phpt
│ │ │ ├── incdec_strings_exception.phpt
│ │ │ ├── incdec_types.phpt
│ │ │ ├── incdec_undef.phpt
│ │ │ ├── increment_001.phpt
│ │ │ ├── increment_001_64bit.phpt
│ │ │ ├── increment_diagnostic_change_type.phpt
│ │ │ ├── increment_diagnostic_change_type_do_operator.phpt
│ │ │ ├── increment_function_return_error.phpt
│ │ │ ├── increment_with_castable_objects_no_addition.phpt
│ │ │ ├── object_cannot_incdec.phpt
│ │ │ ├── object_cannot_incdec_use_result_op.phpt
│ │ │ ├── oss-fuzz-60709_globals_unset_after_undef_warning.phpt
│ │ │ ├── oss-fuzz-60734_predec-object.phpt
│ │ │ ├── oss-fuzz-60734_preinc-object.phpt
│ │ │ ├── oss-fuzz-61469_binop_dynamic_property_unset_error_handler.phpt
│ │ │ ├── oss-fuzz-61469_postdec_dynamic_property_unset_error_handler.phpt
│ │ │ ├── oss-fuzz-61469_postinc_dynamic_property_unset_error_handler.phpt
│ │ │ ├── oss-fuzz-61469_predec_dynamic_property_unset_error_handler.phpt
│ │ │ ├── oss-fuzz-61469_preinc_dynamic_property_unset_error_handler.phpt
│ │ │ ├── oss-fuzz-61865_binop_declared_property_unset_error_handler.phpt
│ │ │ ├── oss-fuzz-61865_postdec_declared_property_unset_error_handler.phpt
│ │ │ ├── oss-fuzz-61865_postinc_declared_property_unset_error_handler.phpt
│ │ │ ├── oss-fuzz-61865_predec_declared_property_unset_error_handler.phpt
│ │ │ ├── oss-fuzz-61865_preinc_declared_property_unset_error_handler.phpt
│ │ │ ├── oss-fuzz-62294_globals_unset_after_string_warning.phpt
│ │ │ ├── overloaded_access.phpt
│ │ │ ├── string_increment_various.phpt
│ │ │ ├── unset_globals_in_error_handler.phpt
│ │ │ ├── unset_object_property_in_error_handler.phpt
│ │ │ └── unset_property_converted_to_obj_in_error_handler.phpt
│ │ ├── incdec_ref_property.phpt
│ │ ├── incdec_undef.phpt
│ │ ├── include_fail_during_read.phpt
│ │ ├── include_stat_is_quiet.phpt
│ │ ├── incompat_ctx_user.phpt
│ │ ├── increment_001.phpt
│ │ ├── increment_function_return_error.phpt
│ │ ├── indexing_001.phpt
│ │ ├── indirect_call_array_001.phpt
│ │ ├── indirect_call_array_002.phpt
│ │ ├── indirect_call_array_003.phpt
│ │ ├── indirect_call_array_004.phpt
│ │ ├── indirect_call_array_005.phpt
│ │ ├── indirect_call_from_constant.phpt
│ │ ├── indirect_call_string_001.phpt
│ │ ├── indirect_call_string_002.phpt
│ │ ├── indirect_call_string_003.phpt
│ │ ├── indirect_method_call_001.phpt
│ │ ├── indirect_method_call_002.phpt
│ │ ├── indirect_method_call_003.phpt
│ │ ├── indirect_method_call_004.phpt
│ │ ├── indirect_method_call_005.phpt
│ │ ├── indirect_property_access.phpt
│ │ ├── indirect_reference_this.phpt
│ │ ├── inference_infinite_loop.phpt
│ │ ├── inherit_internal_static.phpt
│ │ ├── init_array_illegal_offset_type.phpt
│ │ ├── instanceof.phpt
│ │ ├── instanceof_001.phpt
│ │ ├── instanceof_002.phpt
│ │ ├── instanceof_const.phpt
│ │ ├── instantiate_all_classes.phpt
│ │ ├── int_conversion_exponents.phpt
│ │ ├── int_overflow_32bit.phpt
│ │ ├── int_overflow_64bit.phpt
│ │ ├── int_special_values.phpt
│ │ ├── int_static_prop_name.phpt
│ │ ├── int_underflow_32bit.phpt
│ │ ├── int_underflow_64bit.phpt
│ │ ├── inter_007.phpt
│ │ ├── inter_02.phpt
│ │ ├── inter_03.phpt
│ │ ├── inter_04.phpt
│ │ ├── inter_05.phpt
│ │ ├── inter_06.phpt
│ │ ├── interface_constructor_prototype_001.phpt
│ │ ├── interface_constructor_prototype_002.phpt
│ │ ├── interface_exists_001.phpt
│ │ ├── interface_exists_002.phpt
│ │ ├── interface_extends_static.phpt
│ │ ├── interface_underscore_as_name.phpt
│ │ ├── interface_with_tostring.phpt
│ │ ├── internal_class_variance.phpt
│ │ ├── invalid_const_class_name.phpt
│ │ ├── invalid_parent_const_ref_leak.phpt
│ │ ├── is_a.phpt
│ │ ├── is_callable_trampoline_uaf-deprecated.phpt
│ │ ├── is_callable_trampoline_uaf.phpt
│ │ ├── isset_001.phpt
│ │ ├── isset_002.phpt
│ │ ├── isset_003.phpt
│ │ ├── isset_array.phpt
│ │ ├── isset_expr_error.phpt
│ │ ├── isset_func_error.phpt
│ │ ├── isset_str_offset.phpt
│ │ ├── iterable_or_null.phpt
│ │ ├── iterator_key_by_ref.phpt
│ │ ├── jmpznz_relative_offsets.phpt
│ │ ├── jump01.phpt
│ │ ├── jump02.phpt
│ │ ├── jump03.phpt
│ │ ├── jump04.phpt
│ │ ├── jump05.phpt
│ │ ├── jump06.phpt
│ │ ├── jump07.phpt
│ │ ├── jump08.phpt
│ │ ├── jump09.phpt
│ │ ├── jump10.phpt
│ │ ├── jump11.phpt
│ │ ├── jump12.phpt
│ │ ├── jump13.phpt
│ │ ├── jump14.phpt
│ │ ├── jump15.phpt
│ │ ├── jump16.phpt
│ │ ├── jump17.phpt
│ │ ├── lazy_objects/
│ │ │ ├── array_walk.phpt
│ │ │ ├── clone_calls___clone_once.phpt
│ │ │ ├── clone_creates_object_with_independent_state_001.phpt
│ │ │ ├── clone_creates_object_with_independent_state_002.phpt
│ │ │ ├── clone_creates_object_with_independent_state_003.phpt
│ │ │ ├── clone_initialized.phpt
│ │ │ ├── clone_initializer_exception.phpt
│ │ │ ├── clone_initializes.phpt
│ │ │ ├── clone_preverves_object_class.phpt
│ │ │ ├── convert_to_array.phpt
│ │ │ ├── dtor_called_if_init.phpt
│ │ │ ├── dtor_not_called_if_not_init.phpt
│ │ │ ├── fetch_coalesce_initializes.phpt
│ │ │ ├── fetch_coalesce_non_existing_initializes.phpt
│ │ │ ├── fetch_declared_prop_initializes.phpt
│ │ │ ├── fetch_dynamic_prop_initializes.phpt
│ │ │ ├── fetch_hook_may_not_initialize.phpt
│ │ │ ├── fetch_hook_virtual_may_initialize.phpt
│ │ │ ├── fetch_hook_virtual_may_not_initialize.phpt
│ │ │ ├── fetch_magic_prop_may_initialize.phpt
│ │ │ ├── fetch_magic_prop_may_not_initialize.phpt
│ │ │ ├── fetch_magic_prop_recursive_may_initialize.phpt
│ │ │ ├── fetch_op_dynamic_error.phpt
│ │ │ ├── fetch_op_dynamic_prop_initializes.phpt
│ │ │ ├── fetch_op_error.phpt
│ │ │ ├── fetch_op_initializes.phpt
│ │ │ ├── fetch_op_skipped_prop_does_not_initialize.phpt
│ │ │ ├── fetch_ref_initializes.phpt
│ │ │ ├── fetch_ref_skipped_prop_does_not_initialize.phpt
│ │ │ ├── fetch_skipped_prop_does_not_initialize.phpt
│ │ │ ├── final_classes_can_be_initialized_lazily.phpt
│ │ │ ├── gc_001.phpt
│ │ │ ├── gc_002.phpt
│ │ │ ├── gc_003.phpt
│ │ │ ├── gc_004.phpt
│ │ │ ├── gc_005.phpt
│ │ │ ├── gc_006.phpt
│ │ │ ├── get_initializer.phpt
│ │ │ ├── get_properties.phpt
│ │ │ ├── gh15823.phpt
│ │ │ ├── gh15999_001.phpt
│ │ │ ├── gh15999_002.phpt
│ │ │ ├── gh17941.phpt
│ │ │ ├── gh17998.phpt
│ │ │ ├── gh18038-001.phpt
│ │ │ ├── gh18038-002.phpt
│ │ │ ├── gh18038-003.phpt
│ │ │ ├── gh18038-004.phpt
│ │ │ ├── gh18038-005.phpt
│ │ │ ├── gh18038-006.phpt
│ │ │ ├── gh18038-007.phpt
│ │ │ ├── gh18038-008.phpt
│ │ │ ├── gh18038-009.phpt
│ │ │ ├── gh18038-010.phpt
│ │ │ ├── gh18038-011.phpt
│ │ │ ├── gh18038-012.phpt
│ │ │ ├── init_exception_001.phpt
│ │ │ ├── init_exception_leaves_object_lazy.phpt
│ │ │ ├── init_exception_reverts_initializer_changes.phpt
│ │ │ ├── init_exception_reverts_initializer_changes_dyn_props.phpt
│ │ │ ├── init_exception_reverts_initializer_changes_dyn_props_and_ht.phpt
│ │ │ ├── init_exception_reverts_initializer_changes_nested.phpt
│ │ │ ├── init_exception_reverts_initializer_changes_overridden_prop.phpt
│ │ │ ├── init_exception_reverts_initializer_changes_props_ht.phpt
│ │ │ ├── init_exception_reverts_initializer_changes_props_ht_ref.phpt
│ │ │ ├── init_fatal.phpt
│ │ │ ├── init_handles_ref_source_types.phpt
│ │ │ ├── init_handles_ref_source_types_exception.phpt
│ │ │ ├── init_may_leave_props_uninit.phpt
│ │ │ ├── init_preserves_identity.phpt
│ │ │ ├── init_preserves_proxy_class.phpt
│ │ │ ├── init_sets_prop_default_values.phpt
│ │ │ ├── init_trigger_array_cast.phpt
│ │ │ ├── init_trigger_compare.phpt
│ │ │ ├── init_trigger_debug_zval_dump.phpt
│ │ │ ├── init_trigger_foreach.phpt
│ │ │ ├── init_trigger_foreach_hooks.phpt
│ │ │ ├── init_trigger_get_mangled_object_vars.phpt
│ │ │ ├── init_trigger_get_object_vars.phpt
│ │ │ ├── init_trigger_json_encode.phpt
│ │ │ ├── init_trigger_json_encode_hooks.phpt
│ │ │ ├── init_trigger_reflection_object_toString.phpt
│ │ │ ├── init_trigger_serialize.phpt
│ │ │ ├── init_trigger_var_dump.phpt
│ │ │ ├── init_trigger_var_dump_debug_info_001.phpt
│ │ │ ├── init_trigger_var_dump_debug_info_002.phpt
│ │ │ ├── init_trigger_var_export.phpt
│ │ │ ├── initializeLazyObject.phpt
│ │ │ ├── initializeLazyObject_error.phpt
│ │ │ ├── initializeLazyObject_noop_on_initialized_object.phpt
│ │ │ ├── initializer_must_return_the_right_type.phpt
│ │ │ ├── invalid_options.phpt
│ │ │ ├── isLazy.phpt
│ │ │ ├── isUninitializedLazyObject.phpt
│ │ │ ├── isset_hooked_may_initialize.phpt
│ │ │ ├── isset_hooked_may_not_initialize.phpt
│ │ │ ├── isset_initializes.phpt
│ │ │ ├── jit_assign_obj_dynamic.phpt
│ │ │ ├── jit_assign_obj_op_dynamic.phpt
│ │ │ ├── jit_assign_obj_op_prop_info.phpt
│ │ │ ├── jit_assign_obj_op_unknown_prop_info.phpt
│ │ │ ├── jit_assign_obj_op_unknown_prop_info_untyped.phpt
│ │ │ ├── jit_assign_obj_prop_info.phpt
│ │ │ ├── jit_assign_obj_unknown_prop_info.phpt
│ │ │ ├── jit_assign_obj_unknown_prop_info_untyped.phpt
│ │ │ ├── json_encode_dynamic_props.phpt
│ │ │ ├── markLazyObjectAsInitialized.phpt
│ │ │ ├── oss_fuzz_71382.phpt
│ │ │ ├── oss_fuzz_71407.phpt
│ │ │ ├── oss_fuzz_71446.phpt
│ │ │ ├── realize.phpt
│ │ │ ├── realize_no_props.phpt
│ │ │ ├── realize_proxy_overridden.phpt
│ │ │ ├── realize_skipped.phpt
│ │ │ ├── reset_as_lazy_accepts_sub_classes.phpt
│ │ │ ├── reset_as_lazy_already_exception.phpt
│ │ │ ├── reset_as_lazy_calls_destructor.phpt
│ │ │ ├── reset_as_lazy_can_reset_initialized_proxies.phpt
│ │ │ ├── reset_as_lazy_deletes_reference_source_type.phpt
│ │ │ ├── reset_as_lazy_destructor_exception.phpt
│ │ │ ├── reset_as_lazy_ignores_additional_props.phpt
│ │ │ ├── reset_as_lazy_initialized_proxy.phpt
│ │ │ ├── reset_as_lazy_may_call_nested_destructors.phpt
│ │ │ ├── reset_as_lazy_may_skip_destructor.phpt
│ │ │ ├── reset_as_lazy_readonly.phpt
│ │ │ ├── reset_as_lazy_real_instance.phpt
│ │ │ ├── reset_as_lazy_resets_dynamic_props.phpt
│ │ │ ├── reset_as_lazy_while_init_exception.phpt
│ │ │ ├── rfc/
│ │ │ │ ├── rfc_example_001.phpt
│ │ │ │ ├── rfc_example_002.phpt
│ │ │ │ ├── rfc_example_003.phpt
│ │ │ │ ├── rfc_example_004.phpt
│ │ │ │ ├── rfc_example_005.phpt
│ │ │ │ ├── rfc_example_006.phpt
│ │ │ │ ├── rfc_example_007.phpt
│ │ │ │ ├── rfc_example_008.phpt
│ │ │ │ ├── rfc_example_009.phpt
│ │ │ │ ├── rfc_example_010.phpt
│ │ │ │ ├── rfc_example_011.phpt
│ │ │ │ └── rfc_example_012.phpt
│ │ │ ├── serialize___serialize_may_initialize.phpt
│ │ │ ├── serialize___serialize_may_not_initialize.phpt
│ │ │ ├── serialize___sleep.phpt
│ │ │ ├── serialize___sleep_initializes.phpt
│ │ │ ├── serialize___sleep_skip_flag.phpt
│ │ │ ├── serialize___sleep_skip_flag_may_initialize.phpt
│ │ │ ├── serialize_dynamic_props.phpt
│ │ │ ├── serialize_failed_lazy_object.phpt
│ │ │ ├── serialize_failed_lazy_object_skip_init_on_serialize.phpt
│ │ │ ├── serialize_hook.phpt
│ │ │ ├── serialize_initializes.phpt
│ │ │ ├── serialize_props_ht.phpt
│ │ │ ├── serialize_skip_flag.phpt
│ │ │ ├── serialize_skip_flag_props_ht.phpt
│ │ │ ├── setRawValueWithoutLazyInitialization.phpt
│ │ │ ├── setRawValueWithoutLazyInitialization_exception_001.phpt
│ │ │ ├── setRawValueWithoutLazyInitialization_exception_002.phpt
│ │ │ ├── setRawValueWithoutLazyInitialization_initialized.phpt
│ │ │ ├── setRawValueWithoutLazyInitialization_no_dynamic_prop.phpt
│ │ │ ├── setRawValueWithoutLazyInitialization_readonly.phpt
│ │ │ ├── setRawValueWithoutLazyInitialization_readonly_variant.phpt
│ │ │ ├── setRawValueWithoutLazyInitialization_realize.phpt
│ │ │ ├── setRawValueWithoutLazyInitialization_side_effect_destruct.phpt
│ │ │ ├── setRawValueWithoutLazyInitialization_side_effect_toString.phpt
│ │ │ ├── setRawValueWithoutLazyInitialization_skips___set.phpt
│ │ │ ├── setRawValueWithoutLazyInitialization_skips_hook.phpt
│ │ │ ├── skipLazyInitialization.phpt
│ │ │ ├── skipLazyInitialization_default.phpt
│ │ │ ├── skipLazyInitialization_initialized_object.phpt
│ │ │ ├── skipLazyInitialization_no_dynamic_prop.phpt
│ │ │ ├── skipLazyInitialization_readonly.phpt
│ │ │ ├── skipLazyInitialization_realize.phpt
│ │ │ ├── skipLazyInitialization_skips___set.phpt
│ │ │ ├── skipLazyInitialization_skips_hooks.phpt
│ │ │ ├── skipLazyInitialization_skips_non_lazy_prop.phpt
│ │ │ ├── support_no_internal_classes.phpt
│ │ │ ├── support_no_internal_sub_classes.phpt
│ │ │ ├── support_readonly_class.phpt
│ │ │ ├── support_readonly_prop.phpt
│ │ │ ├── support_stdClass.phpt
│ │ │ ├── support_stdClass_sub_classes.phpt
│ │ │ ├── typed_properties_001.phpt
│ │ │ ├── typed_properties_002.phpt
│ │ │ ├── typed_properties_003.phpt
│ │ │ ├── typed_properties_004.phpt
│ │ │ ├── unclean_shutdown.phpt
│ │ │ ├── unset_defined_no_initialize.phpt
│ │ │ ├── unset_hook.phpt
│ │ │ ├── unset_magic_circular_may_initialize.phpt
│ │ │ ├── unset_magic_may_initialize.phpt
│ │ │ ├── unset_magic_may_not_initialize.phpt
│ │ │ ├── unset_skipped_no_initialize.phpt
│ │ │ ├── unset_undefined_dynamic_initializes.phpt
│ │ │ ├── unset_undefined_dynamic_initializes_no_props_ht.phpt
│ │ │ ├── unset_undefined_initializes.phpt
│ │ │ ├── use_case_001.phpt
│ │ │ ├── use_case_001b.phpt
│ │ │ ├── use_case_002.phpt
│ │ │ ├── write_dynamic_initializes.phpt
│ │ │ ├── write_initializer_exception.phpt
│ │ │ ├── write_initializes.phpt
│ │ │ ├── write_magic_circular_may_initialize.phpt
│ │ │ ├── write_magic_may_initialize.phpt
│ │ │ └── write_skipped_no_initialize.phpt
│ │ ├── lc_ctype_inheritance.phpt
│ │ ├── line_const_in_array.phpt
│ │ ├── list/
│ │ │ ├── list_reference_001.phpt
│ │ │ ├── list_reference_002.phpt
│ │ │ ├── list_reference_003.phpt
│ │ │ ├── list_reference_004.phpt
│ │ │ ├── list_reference_005.phpt
│ │ │ ├── list_reference_006.phpt
│ │ │ ├── list_reference_007.phpt
│ │ │ ├── list_reference_008.phpt
│ │ │ ├── list_reference_009.phpt
│ │ │ ├── list_reference_010.phpt
│ │ │ └── list_reference_011.phpt
│ │ ├── list_001.phpt
│ │ ├── list_002.phpt
│ │ ├── list_003.phpt
│ │ ├── list_004.phpt
│ │ ├── list_005.phpt
│ │ ├── list_006.phpt
│ │ ├── list_007.phpt
│ │ ├── list_008.phpt
│ │ ├── list_010.phpt
│ │ ├── list_011.phpt
│ │ ├── list_012.phpt
│ │ ├── list_013.phpt
│ │ ├── list_014.phpt
│ │ ├── list_assign_ref_string_offset_error.phpt
│ │ ├── list_destructuring_to_special_variables.phpt
│ │ ├── list_empty_error.phpt
│ │ ├── list_empty_error_keyed.phpt
│ │ ├── list_keyed.phpt
│ │ ├── list_keyed_ArrayAccess.phpt
│ │ ├── list_keyed_conversions.phpt
│ │ ├── list_keyed_evaluation_order.inc
│ │ ├── list_keyed_evaluation_order.phpt
│ │ ├── list_keyed_evaluation_order_2.phpt
│ │ ├── list_keyed_evaluation_order_3.phpt
│ │ ├── list_keyed_evaluation_order_nested.phpt
│ │ ├── list_keyed_leading_comma.phpt
│ │ ├── list_keyed_non_literals.phpt
│ │ ├── list_keyed_trailing_comma.phpt
│ │ ├── list_keyed_undefined.phpt
│ │ ├── list_mixed_keyed_unkeyed.phpt
│ │ ├── list_mixed_nested_keyed_unkeyed.phpt
│ │ ├── list_self_assign.phpt
│ │ ├── live_range_phi_leak.phpt
│ │ ├── loop_free_on_return.phpt
│ │ ├── lsb_001.phpt
│ │ ├── lsb_002.phpt
│ │ ├── lsb_003.phpt
│ │ ├── lsb_004.phpt
│ │ ├── lsb_005.phpt
│ │ ├── lsb_006.phpt
│ │ ├── lsb_007.phpt
│ │ ├── lsb_008.phpt
│ │ ├── lsb_009.phpt
│ │ ├── lsb_010.phpt
│ │ ├── lsb_011.phpt
│ │ ├── lsb_012.phpt
│ │ ├── lsb_013.phpt
│ │ ├── lsb_014.phpt
│ │ ├── lsb_015.phpt
│ │ ├── lsb_016.phpt
│ │ ├── lsb_017.phpt
│ │ ├── lsb_018.phpt
│ │ ├── lsb_019.phpt
│ │ ├── lsb_020.phpt
│ │ ├── lsb_021.phpt
│ │ ├── lsb_022.phpt
│ │ ├── lsb_023.phpt
│ │ ├── lsb_024.phpt
│ │ ├── magic_by_ref_001.phpt
│ │ ├── magic_by_ref_002.phpt
│ │ ├── magic_by_ref_003.phpt
│ │ ├── magic_by_ref_004.phpt
│ │ ├── magic_by_ref_005.phpt
│ │ ├── magic_by_ref_006.phpt
│ │ ├── magic_by_ref_007.phpt
│ │ ├── magic_const_in_global_scope.phpt
│ │ ├── magic_get_destroy_object.phpt
│ │ ├── magic_methods_001.phpt
│ │ ├── magic_methods_002.phpt
│ │ ├── magic_methods_003.phpt
│ │ ├── magic_methods_004.phpt
│ │ ├── magic_methods_005.phpt
│ │ ├── magic_methods_006.phpt
│ │ ├── magic_methods_007.phpt
│ │ ├── magic_methods_008.phpt
│ │ ├── magic_methods_009.phpt
│ │ ├── magic_methods_010.phpt
│ │ ├── magic_methods_011.phpt
│ │ ├── magic_methods_012.phpt
│ │ ├── magic_methods_013.phpt
│ │ ├── magic_methods_014.phpt
│ │ ├── magic_methods_015.phpt
│ │ ├── magic_methods_016.phpt
│ │ ├── magic_methods_017.phpt
│ │ ├── magic_methods_018.phpt
│ │ ├── magic_methods_019.phpt
│ │ ├── magic_methods_020.phpt
│ │ ├── magic_methods_021.phpt
│ │ ├── magic_methods_inheritance_rules.phpt
│ │ ├── magic_methods_inheritance_rules_non_trivial_01.phpt
│ │ ├── magic_methods_inheritance_rules_non_trivial_02.phpt
│ │ ├── magic_methods_serialize.phpt
│ │ ├── magic_methods_set_state.phpt
│ │ ├── magic_methods_sleep.phpt
│ │ ├── magic_methods_unserialize.phpt
│ │ ├── magic_methods_wakeup.phpt
│ │ ├── match/
│ │ │ ├── 001.phpt
│ │ │ ├── 002.phpt
│ │ │ ├── 003.phpt
│ │ │ ├── 004.phpt
│ │ │ ├── 005.phpt
│ │ │ ├── 006.phpt
│ │ │ ├── 007.phpt
│ │ │ ├── 008.phpt
│ │ │ ├── 009.phpt
│ │ │ ├── 009_ast_export.phpt
│ │ │ ├── 011.phpt
│ │ │ ├── 012.phpt
│ │ │ ├── 017.phpt
│ │ │ ├── 023.phpt
│ │ │ ├── 024.phpt
│ │ │ ├── 027.phpt
│ │ │ ├── 028.phpt
│ │ │ ├── 029.phpt
│ │ │ ├── 030.phpt
│ │ │ ├── 037.phpt
│ │ │ ├── 038.phpt
│ │ │ ├── 039.phpt
│ │ │ ├── 040.phpt
│ │ │ ├── 041.phpt
│ │ │ ├── 042.phpt
│ │ │ ├── 043.phpt
│ │ │ ├── 044.phpt
│ │ │ ├── 045.phpt
│ │ │ ├── 046.phpt
│ │ │ ├── 047.phpt
│ │ │ ├── 049.phpt
│ │ │ ├── gh11134.phpt
│ │ │ ├── match_of_phi_optimization.phpt
│ │ │ ├── match_scdf_cleanup.phpt
│ │ │ └── unmatched_enum.phpt
│ │ ├── memory_get_peak_usage.phpt
│ │ ├── memory_reset_peak_usage.phpt
│ │ ├── method_argument_binding.phpt
│ │ ├── method_exists.phpt
│ │ ├── method_exists_002.phpt
│ │ ├── method_static_var.phpt
│ │ ├── methods-on-non-objects-call-user-func.phpt
│ │ ├── methods-on-non-objects-catch.phpt
│ │ ├── methods-on-non-objects-usort.phpt
│ │ ├── methods-on-non-objects.phpt
│ │ ├── mod_001.phpt
│ │ ├── modify_isref_value_return.phpt
│ │ ├── mul_001.phpt
│ │ ├── multibyte/
│ │ │ ├── bug68665.phpt
│ │ │ ├── multibyte_encoding_001.phpt
│ │ │ ├── multibyte_encoding_002.phpt
│ │ │ ├── multibyte_encoding_003.phpt
│ │ │ ├── multibyte_encoding_004.phpt
│ │ │ ├── multibyte_encoding_005.phpt
│ │ │ ├── multibyte_encoding_006.phpt
│ │ │ └── multibyte_encoding_007.phpt
│ │ ├── name_collision_01.phpt
│ │ ├── name_collision_02.phpt
│ │ ├── name_collision_03.phpt
│ │ ├── name_collision_04.phpt
│ │ ├── name_collision_05.phpt
│ │ ├── name_collision_06.phpt
│ │ ├── name_collision_07.phpt
│ │ ├── name_collision_08.phpt
│ │ ├── name_collision_09.phpt
│ │ ├── named_params/
│ │ │ ├── __call.phpt
│ │ │ ├── __invoke.phpt
│ │ │ ├── assert.phpt
│ │ │ ├── attributes.phpt
│ │ │ ├── attributes_duplicate_named_param.phpt
│ │ │ ├── attributes_named_flags.phpt
│ │ │ ├── attributes_named_flags_incorrect.phpt
│ │ │ ├── attributes_positional_after_named.phpt
│ │ │ ├── backtrace.phpt
│ │ │ ├── basic.phpt
│ │ │ ├── call_user_func.phpt
│ │ │ ├── call_user_func_array.phpt
│ │ │ ├── call_user_func_array_variadic.phpt
│ │ │ ├── cannot_pass_by_ref.phpt
│ │ │ ├── ctor_extra_named_args.phpt
│ │ │ ├── defaults.phpt
│ │ │ ├── duplicate_param.phpt
│ │ │ ├── func_get_args.phpt
│ │ │ ├── gh17216.phpt
│ │ │ ├── internal.phpt
│ │ │ ├── internal_variadics.phpt
│ │ │ ├── missing_param.phpt
│ │ │ ├── positional_after_named.phpt
│ │ │ ├── references.phpt
│ │ │ ├── reserved.phpt
│ │ │ ├── runtime_cache_init.phpt
│ │ │ ├── undef_var.phpt
│ │ │ ├── unknown_named_param.phpt
│ │ │ ├── unpack.phpt
│ │ │ ├── unpack_and_named_1.phpt
│ │ │ ├── unpack_and_named_2.phpt
│ │ │ └── variadic.phpt
│ │ ├── namespace_first_stmt_nop.phpt
│ │ ├── namespace_name_namespace.phpt
│ │ ├── namespace_name_namespace_start.phpt
│ │ ├── namespace_name_reserved_keywords.phpt
│ │ ├── namespaced_name_whitespace.phpt
│ │ ├── nested_method_and_function.phpt
│ │ ├── new_args_without_ctor.phpt
│ │ ├── new_oom.inc
│ │ ├── new_oom.phpt
│ │ ├── new_without_parentheses/
│ │ │ ├── anonymous_class_access.phpt
│ │ │ ├── assign_to_new.phpt
│ │ │ ├── garbage_collection.phpt
│ │ │ ├── new_class_vs_function_with_same_name.phpt
│ │ │ ├── new_with_ctor_arguments_parentheses.phpt
│ │ │ ├── new_without_ctor_arguments_parentheses_array_access.phpt
│ │ │ ├── new_without_ctor_arguments_parentheses_constant.phpt
│ │ │ ├── new_without_ctor_arguments_parentheses_method.phpt
│ │ │ ├── new_without_ctor_arguments_parentheses_property.phpt
│ │ │ ├── new_without_ctor_arguments_parentheses_static_method.phpt
│ │ │ ├── new_without_ctor_arguments_parentheses_static_property.phpt
│ │ │ └── unset_new.phpt
│ │ ├── no_class_const_propagation_in_closures.phpt
│ │ ├── no_early_binding_if_already_declared.inc
│ │ ├── no_early_binding_if_already_declared.phpt
│ │ ├── not_001.phpt
│ │ ├── not_002.phpt
│ │ ├── nowdoc.inc
│ │ ├── nowdoc_001.phpt
│ │ ├── nowdoc_002.phpt
│ │ ├── nowdoc_003.phpt
│ │ ├── nowdoc_004.phpt
│ │ ├── nowdoc_005.phpt
│ │ ├── nowdoc_006.phpt
│ │ ├── nowdoc_007.phpt
│ │ ├── nowdoc_008.phpt
│ │ ├── nowdoc_011.phpt
│ │ ├── nowdoc_012.phpt
│ │ ├── nowdoc_013.phpt
│ │ ├── nowdoc_014.phpt
│ │ ├── nowdoc_015.phpt
│ │ ├── nowdoc_016.phpt
│ │ ├── nowdoc_017.phpt
│ │ ├── ns_001.phpt
│ │ ├── ns_002.phpt
│ │ ├── ns_003.phpt
│ │ ├── ns_004.phpt
│ │ ├── ns_005.phpt
│ │ ├── ns_006.phpt
│ │ ├── ns_007.phpt
│ │ ├── ns_008.phpt
│ │ ├── ns_009.phpt
│ │ ├── ns_010.phpt
│ │ ├── ns_011.phpt
│ │ ├── ns_012.phpt
│ │ ├── ns_013.phpt
│ │ ├── ns_014.phpt
│ │ ├── ns_015.phpt
│ │ ├── ns_016.phpt
│ │ ├── ns_017.phpt
│ │ ├── ns_018.phpt
│ │ ├── ns_019.phpt
│ │ ├── ns_020.phpt
│ │ ├── ns_021.phpt
│ │ ├── ns_022.inc
│ │ ├── ns_022.phpt
│ │ ├── ns_023.phpt
│ │ ├── ns_024.phpt
│ │ ├── ns_025.phpt
│ │ ├── ns_026.phpt
│ │ ├── ns_027.inc
│ │ ├── ns_027.phpt
│ │ ├── ns_028.inc
│ │ ├── ns_028.phpt
│ │ ├── ns_029.phpt
│ │ ├── ns_030.phpt
│ │ ├── ns_031.phpt
│ │ ├── ns_032.phpt
│ │ ├── ns_033.phpt
│ │ ├── ns_034.phpt
│ │ ├── ns_035.phpt
│ │ ├── ns_036.phpt
│ │ ├── ns_037.phpt
│ │ ├── ns_038.phpt
│ │ ├── ns_039.phpt
│ │ ├── ns_040.phpt
│ │ ├── ns_041.phpt
│ │ ├── ns_042.phpt
│ │ ├── ns_043.phpt
│ │ ├── ns_044.phpt
│ │ ├── ns_045.phpt
│ │ ├── ns_046.phpt
│ │ ├── ns_047.phpt
│ │ ├── ns_048.phpt
│ │ ├── ns_049.phpt
│ │ ├── ns_050.phpt
│ │ ├── ns_051.phpt
│ │ ├── ns_052.phpt
│ │ ├── ns_053.phpt
│ │ ├── ns_054.phpt
│ │ ├── ns_055.phpt
│ │ ├── ns_056.phpt
│ │ ├── ns_057.phpt
│ │ ├── ns_058.phpt
│ │ ├── ns_059.phpt
│ │ ├── ns_060.phpt
│ │ ├── ns_061.phpt
│ │ ├── ns_062.phpt
│ │ ├── ns_063.phpt
│ │ ├── ns_064.phpt
│ │ ├── ns_065.inc
│ │ ├── ns_065.phpt
│ │ ├── ns_066.phpt
│ │ ├── ns_067.inc
│ │ ├── ns_067.phpt
│ │ ├── ns_068.phpt
│ │ ├── ns_069.inc
│ │ ├── ns_069.phpt
│ │ ├── ns_070.phpt
│ │ ├── ns_071.phpt
│ │ ├── ns_072.phpt
│ │ ├── ns_073.phpt
│ │ ├── ns_074.phpt
│ │ ├── ns_075.phpt
│ │ ├── ns_076.phpt
│ │ ├── ns_077_1.phpt
│ │ ├── ns_077_2.phpt
│ │ ├── ns_077_3.phpt
│ │ ├── ns_077_4.phpt
│ │ ├── ns_077_5.phpt
│ │ ├── ns_077_7.phpt
│ │ ├── ns_077_8.phpt
│ │ ├── ns_078.phpt
│ │ ├── ns_079.phpt
│ │ ├── ns_080.phpt
│ │ ├── ns_081.phpt
│ │ ├── ns_082.phpt
│ │ ├── ns_083.phpt
│ │ ├── ns_084.phpt
│ │ ├── ns_085.phpt
│ │ ├── ns_086.phpt
│ │ ├── ns_087.phpt
│ │ ├── ns_088.phpt
│ │ ├── ns_089.phpt
│ │ ├── ns_090.phpt
│ │ ├── ns_091.phpt
│ │ ├── ns_092.phpt
│ │ ├── ns_093.phpt
│ │ ├── ns_094.phpt
│ │ ├── ns_095.phpt
│ │ ├── ns_096.phpt
│ │ ├── ns_trailing_comma_01.phpt
│ │ ├── ns_trailing_comma_02.phpt
│ │ ├── ns_trailing_comma_error_01.phpt
│ │ ├── ns_trailing_comma_error_02.phpt
│ │ ├── ns_trailing_comma_error_03.phpt
│ │ ├── ns_trailing_comma_error_04.phpt
│ │ ├── ns_trailing_comma_error_05.phpt
│ │ ├── ns_trailing_comma_error_06.phpt
│ │ ├── ns_trailing_comma_error_07.phpt
│ │ ├── ns_trailing_comma_error_08.phpt
│ │ ├── null_to_non_nullable_special_func.phpt
│ │ ├── nullable_types/
│ │ │ ├── array.phpt
│ │ │ ├── contravariant_nullable_param_succeeds.phpt
│ │ │ ├── contravariant_nullable_return_fails.phpt
│ │ │ ├── covariant_nullable_param_fails.phpt
│ │ │ ├── covariant_nullable_return_succeds.phpt
│ │ │ ├── float.phpt
│ │ │ ├── int.phpt
│ │ │ ├── invariant_param_and_return_succeeds.phpt
│ │ │ ├── nullable_type_parameters_do_not_have_default_value.phpt
│ │ │ ├── string.phpt
│ │ │ └── union_nullable_property_fails.phpt
│ │ ├── nullsafe_operator/
│ │ │ ├── 001.phpt
│ │ │ ├── 002.phpt
│ │ │ ├── 003.phpt
│ │ │ ├── 004.phpt
│ │ │ ├── 005.phpt
│ │ │ ├── 006.phpt
│ │ │ ├── 007.phpt
│ │ │ ├── 008.phpt
│ │ │ ├── 009.phpt
│ │ │ ├── 010.phpt
│ │ │ ├── 011.phpt
│ │ │ ├── 012.phpt
│ │ │ ├── 013.phpt
│ │ │ ├── 014.phpt
│ │ │ ├── 015.phpt
│ │ │ ├── 016.phpt
│ │ │ ├── 017.phpt
│ │ │ ├── 018.phpt
│ │ │ ├── 019.phpt
│ │ │ ├── 020.phpt
│ │ │ ├── 021.phpt
│ │ │ ├── 022.phpt
│ │ │ ├── 023.phpt
│ │ │ ├── 024.phpt
│ │ │ ├── 025.phpt
│ │ │ ├── 026.phpt
│ │ │ ├── 027.phpt
│ │ │ ├── 028.phpt
│ │ │ ├── 029.phpt
│ │ │ ├── 030.phpt
│ │ │ ├── 031.phpt
│ │ │ ├── 032.phpt
│ │ │ ├── 033.phpt
│ │ │ ├── 034.phpt
│ │ │ ├── 035.phpt
│ │ │ ├── 036.phpt
│ │ │ ├── 037.phpt
│ │ │ ├── 038.phpt
│ │ │ ├── 039.phpt
│ │ │ ├── 040.phpt
│ │ │ ├── constant_propagation.phpt
│ │ │ └── gh8661.phpt
│ │ ├── number_or_str_zpp.phpt
│ │ ├── numeric_literal_separator_001.phpt
│ │ ├── numeric_literal_separator_002.phpt
│ │ ├── numeric_literal_separator_003.phpt
│ │ ├── numeric_literal_separator_004.phpt
│ │ ├── numeric_literal_separator_005.phpt
│ │ ├── numeric_literal_separator_006.phpt
│ │ ├── numeric_literal_separator_007.phpt
│ │ ├── numeric_literal_separator_008.phpt
│ │ ├── numeric_literal_separator_009.phpt
│ │ ├── numeric_strings/
│ │ │ ├── array_offset.phpt
│ │ │ ├── explicit_cast_leading_numeric_must_work.phpt
│ │ │ ├── invalid_numeric_string_must_generate_warning_assign.phpt
│ │ │ ├── invalid_numeric_strings_must_generate_warning.phpt
│ │ │ ├── neg_num_string.phpt
│ │ │ ├── oss_fuzz_427814456.phpt
│ │ │ ├── string_offset.phpt
│ │ │ └── trailling_whitespaces.phpt
│ │ ├── object-null.phpt
│ │ ├── object_array_cast.phpt
│ │ ├── object_gc_in_shutdown.phpt
│ │ ├── object_handlers.phpt
│ │ ├── object_property_ref_incdec.phpt
│ │ ├── object_types/
│ │ │ ├── invalid_default_value.phpt
│ │ │ ├── missing_return_type_inheritance_in_class.phpt
│ │ │ ├── missing_return_type_inheritance_in_interface.phpt
│ │ │ ├── return_type_in_class.phpt
│ │ │ ├── return_type_in_function.phpt
│ │ │ ├── return_type_inheritance_in_class.phpt
│ │ │ ├── return_type_inheritance_in_interface.phpt
│ │ │ ├── return_type_reflection.phpt
│ │ │ ├── type_hint_in_class_method.phpt
│ │ │ ├── type_hint_in_function.phpt
│ │ │ └── type_hint_reflection.phpt
│ │ ├── objects_001.phpt
│ │ ├── objects_002.phpt
│ │ ├── objects_003.phpt
│ │ ├── objects_004.phpt
│ │ ├── objects_005.phpt
│ │ ├── objects_006.phpt
│ │ ├── objects_007.phpt
│ │ ├── objects_008.phpt
│ │ ├── objects_009.phpt
│ │ ├── objects_010.phpt
│ │ ├── objects_011.phpt
│ │ ├── objects_012.phpt
│ │ ├── objects_013.phpt
│ │ ├── objects_014.phpt
│ │ ├── objects_015.phpt
│ │ ├── objects_017.phpt
│ │ ├── objects_018.phpt
│ │ ├── objects_019.phpt
│ │ ├── objects_021.phpt
│ │ ├── objects_022.phpt
│ │ ├── objects_023.phpt
│ │ ├── objects_024.phpt
│ │ ├── objects_025.phpt
│ │ ├── objects_026.phpt
│ │ ├── objects_027.phpt
│ │ ├── objects_028.phpt
│ │ ├── objects_029.phpt
│ │ ├── objects_030.phpt
│ │ ├── objects_031.phpt
│ │ ├── objects_032.phpt
│ │ ├── objects_033.phpt
│ │ ├── objects_034.phpt
│ │ ├── objects_035.phpt
│ │ ├── oct_overflow.phpt
│ │ ├── oct_overflow_char.phpt
│ │ ├── oct_whitespace.phpt
│ │ ├── offset_array.phpt
│ │ ├── offset_assign.phpt
│ │ ├── offset_bool.phpt
│ │ ├── offset_long.phpt
│ │ ├── offset_null.phpt
│ │ ├── offset_object.phpt
│ │ ├── offset_string.phpt
│ │ ├── offsets/
│ │ │ ├── ArrayAccess_container_offset_behaviour.phpt
│ │ │ ├── ArrayObject_container_offset_behaviour.phpt
│ │ │ ├── appending_containers.phpt
│ │ │ ├── appending_containers_in_fetch.phpt
│ │ │ ├── array_container_offset_behaviour.phpt
│ │ │ ├── false_container_offset_behaviour.phpt
│ │ │ ├── internal_handlers.phpt
│ │ │ ├── internal_handlers_extended.phpt
│ │ │ ├── invalid_container_offset_behaviour.phpt
│ │ │ ├── null_container_offset_behaviour.phpt
│ │ │ ├── object_container_offset_behaviour.phpt
│ │ │ ├── reference_containers_appended.phpt
│ │ │ ├── runtime_compile_time_offset_access.phpt
│ │ │ ├── string_container_offset_behaviour.phpt
│ │ │ ├── test_offset_helpers.inc
│ │ │ └── test_variable_offsets.inc
│ │ ├── operator_unsupported_types.phpt
│ │ ├── or_001.phpt
│ │ ├── oss-fuzz-391975641.phpt
│ │ ├── oss-fuzz-403816122.phpt
│ │ ├── oss-fuzz-69765.phpt
│ │ ├── oss_fuzz_417078295.phpt
│ │ ├── oss_fuzz_434346548.phpt
│ │ ├── oss_fuzz_54325.phpt
│ │ ├── oss_fuzz_57821.phpt
│ │ ├── oss_fuzz_58181.phpt
│ │ ├── oss_fuzz_59764.phpt
│ │ ├── oss_fuzz_60011_1.phpt
│ │ ├── oss_fuzz_60011_2.phpt
│ │ ├── oss_fuzz_60441.phpt
│ │ ├── oss_fuzz_60741.phpt
│ │ ├── oss_fuzz_61712.phpt
│ │ ├── oss_fuzz_61712b.phpt
│ │ ├── oss_fuzz_63802.phpt
│ │ ├── oss_fuzz_64209.phpt
│ │ ├── output_started_at_eval.phpt
│ │ ├── overloaded_assign_prop_return_value.phpt
│ │ ├── overloaded_func_001.phpt
│ │ ├── overloaded_func_002.phpt
│ │ ├── overloaded_prop_assign_op_refs.phpt
│ │ ├── parameter_default_values/
│ │ │ ├── internal_declaration_error_class_const.phpt
│ │ │ ├── internal_declaration_error_const.phpt
│ │ │ ├── internal_declaration_error_false.phpt
│ │ │ ├── internal_declaration_error_int.phpt
│ │ │ ├── internal_declaration_error_null.phpt
│ │ │ ├── userland_declaration_error_class_const.phpt
│ │ │ └── userland_declaration_error_const.phpt
│ │ ├── parent_class_name_without_parent.phpt
│ │ ├── php_tag_only.inc
│ │ ├── php_tag_only.phpt
│ │ ├── post_inc_without_use.phpt
│ │ ├── pow_array_leak.phpt
│ │ ├── pow_ref.phpt
│ │ ├── prop_const_expr/
│ │ │ ├── attributes.phpt
│ │ │ ├── basic.phpt
│ │ │ ├── basic_nullsafe.phpt
│ │ │ ├── class_const.phpt
│ │ │ ├── default_args.phpt
│ │ │ ├── enum_initializer.phpt
│ │ │ ├── lhs_class_not_found.phpt
│ │ │ ├── lhs_class_not_found_nullsafe.phpt
│ │ │ ├── lhs_non_object.phpt
│ │ │ ├── non_enums.phpt
│ │ │ ├── non_enums_catchable.phpt
│ │ │ ├── non_enums_cost.phpt
│ │ │ ├── non_enums_nullsafe.phpt
│ │ │ ├── non_enums_rhs.phpt
│ │ │ ├── property_initializer.phpt
│ │ │ ├── rhs_object.phpt
│ │ │ ├── rhs_object_nullsafe.phpt
│ │ │ ├── rhs_prop_not_found.phpt
│ │ │ ├── static_initalizer.phpt
│ │ │ └── static_property_initializer.phpt
│ │ ├── property_access_errors_for_guarded_properties.phpt
│ │ ├── property_exists.phpt
│ │ ├── property_guard_hash_val.phpt
│ │ ├── property_hooks/
│ │ │ ├── abstract_get_set_readonly.phpt
│ │ │ ├── abstract_hook.phpt
│ │ │ ├── abstract_hook_in_non_abstract_class.phpt
│ │ │ ├── abstract_hook_not_implemented.phpt
│ │ │ ├── abstract_prop_final.phpt
│ │ │ ├── abstract_prop_hooks.phpt
│ │ │ ├── abstract_prop_not_implemented.phpt
│ │ │ ├── abstract_prop_plain.phpt
│ │ │ ├── abstract_prop_without_hooks.phpt
│ │ │ ├── array_access.phpt
│ │ │ ├── ast_printing.phpt
│ │ │ ├── attributes.phpt
│ │ │ ├── backed_delegated_read_wirte.phpt
│ │ │ ├── backed_implicit_get.phpt
│ │ │ ├── backed_implicit_set.phpt
│ │ │ ├── backed_invariant.phpt
│ │ │ ├── backing_value_simple.phpt
│ │ │ ├── bug001.phpt
│ │ │ ├── bug002.phpt
│ │ │ ├── bug003.phpt
│ │ │ ├── bug004.phpt
│ │ │ ├── bug005.phpt
│ │ │ ├── bug006.phpt
│ │ │ ├── bug007.phpt
│ │ │ ├── bug008.phpt
│ │ │ ├── bug009.phpt
│ │ │ ├── cache.phpt
│ │ │ ├── cpp.phpt
│ │ │ ├── default_on_hooks.phpt
│ │ │ ├── default_on_virtual.phpt
│ │ │ ├── default_on_virtual_with_inheritance.phpt
│ │ │ ├── default_value_inheritance.phpt
│ │ │ ├── direct_hook_call.phpt
│ │ │ ├── dump.phpt
│ │ │ ├── duplicate_hook.phpt
│ │ │ ├── explicit_iter.phpt
│ │ │ ├── explicit_set_value_parameter.phpt
│ │ │ ├── explicit_set_value_parameter_type.phpt
│ │ │ ├── field_assign.phpt
│ │ │ ├── field_guard.phpt
│ │ │ ├── final.phpt
│ │ │ ├── final_private_prop.phpt
│ │ │ ├── final_prop.phpt
│ │ │ ├── final_prop_2.phpt
│ │ │ ├── final_prop_final_hook.phpt
│ │ │ ├── find_property_usage.phpt
│ │ │ ├── foreach.phpt
│ │ │ ├── foreach_002.phpt
│ │ │ ├── foreach_val_to_ref.phpt
│ │ │ ├── generator_hook.phpt
│ │ │ ├── generator_hook_002.phpt
│ │ │ ├── get.phpt
│ │ │ ├── get_by_ref.phpt
│ │ │ ├── get_by_ref_auto.phpt
│ │ │ ├── get_by_ref_backed.phpt
│ │ │ ├── get_by_ref_implemented_by_plain.phpt
│ │ │ ├── get_by_ref_implemented_by_val.phpt
│ │ │ ├── get_by_ref_virtual.phpt
│ │ │ ├── get_type_check.phpt
│ │ │ ├── gh15140.phpt
│ │ │ ├── gh15187_1.phpt
│ │ │ ├── gh15187_2.phpt
│ │ │ ├── gh15187_3.phpt
│ │ │ ├── gh15419_1.phpt
│ │ │ ├── gh15419_2.phpt
│ │ │ ├── gh15438_1.phpt
│ │ │ ├── gh15438_2.phpt
│ │ │ ├── gh15456.phpt
│ │ │ ├── gh15644.phpt
│ │ │ ├── gh16040.phpt
│ │ │ ├── gh16185.phpt
│ │ │ ├── gh16185_002.phpt
│ │ │ ├── gh17101.phpt
│ │ │ ├── gh17200.phpt
│ │ │ ├── gh17234.phpt
│ │ │ ├── gh17376.phpt
│ │ │ ├── gh17988.phpt
│ │ │ ├── gh18000.phpt
│ │ │ ├── gh18268.phpt
│ │ │ ├── gh19044-1.phpt
│ │ │ ├── gh19044-2.phpt
│ │ │ ├── gh19044-3.phpt
│ │ │ ├── gh19044-4.phpt
│ │ │ ├── gh19044-5.phpt
│ │ │ ├── gh19044-6.phpt
│ │ │ ├── gh19044-8.phpt
│ │ │ ├── hooked_with_magic_method.phpt
│ │ │ ├── indirect_modification.phpt
│ │ │ ├── inheritance.phpt
│ │ │ ├── interface.phpt
│ │ │ ├── interface_explicit_abstract.phpt
│ │ │ ├── interface_final_hook.phpt
│ │ │ ├── interface_final_prop.phpt
│ │ │ ├── interface_get_by_ref_backed.phpt
│ │ │ ├── interface_get_by_ref_plain.phpt
│ │ │ ├── interface_get_by_ref_virtual.phpt
│ │ │ ├── interface_get_only.phpt
│ │ │ ├── interface_get_only_readonly.phpt
│ │ │ ├── interface_get_set_readonly.phpt
│ │ │ ├── interface_get_value_as_ref.phpt
│ │ │ ├── interface_invalid_explicitly_abstract.phpt
│ │ │ ├── interface_not_implemented.phpt
│ │ │ ├── interface_not_public.phpt
│ │ │ ├── interface_set_only.phpt
│ │ │ ├── invalid_abstract.phpt
│ │ │ ├── invalid_abstract_body.phpt
│ │ │ ├── invalid_abstract_final.phpt
│ │ │ ├── invalid_abstract_indirect.phpt
│ │ │ ├── invalid_abstract_indirect_2.phpt
│ │ │ ├── invalid_abstract_private.phpt
│ │ │ ├── invalid_empty_hooks.phpt
│ │ │ ├── invalid_final_private.phpt
│ │ │ ├── invalid_hook_visibility.phpt
│ │ │ ├── invalid_static.phpt
│ │ │ ├── invalid_static_prop.phpt
│ │ │ ├── isset.phpt
│ │ │ ├── magic_consts.phpt
│ │ │ ├── magic_interaction.phpt
│ │ │ ├── magic_method_from_hooked.phpt
│ │ │ ├── multi_level_inheritance.phpt
│ │ │ ├── no_default_value_untyped_001.phpt
│ │ │ ├── no_default_value_untyped_002.phpt
│ │ │ ├── no_get_parameters.phpt
│ │ │ ├── object_in_hook.phpt
│ │ │ ├── oss-fuzz-382922236.phpt
│ │ │ ├── oss_fuzz_403308724.phpt
│ │ │ ├── override_add_get.phpt
│ │ │ ├── override_add_get_contravariant.phpt
│ │ │ ├── override_add_set.phpt
│ │ │ ├── override_add_set_covariant.phpt
│ │ │ ├── override_attribute_backed.phpt
│ │ │ ├── override_attribute_fail.phpt
│ │ │ ├── override_attribute_plain.phpt
│ │ │ ├── override_attribute_virtual.phpt
│ │ │ ├── override_by_plain_prop.phpt
│ │ │ ├── override_default_value.phpt
│ │ │ ├── override_implicit_with_explicit.phpt
│ │ │ ├── override_plain_set.phpt
│ │ │ ├── parameter_attributes.phpt
│ │ │ ├── parent_get.phpt
│ │ │ ├── parent_get_ci.phpt
│ │ │ ├── parent_get_in_class_with_no_parent.phpt
│ │ │ ├── parent_get_not_in_class.phpt
│ │ │ ├── parent_get_plain.phpt
│ │ │ ├── parent_get_plain_typed_uninitialized.phpt
│ │ │ ├── parent_get_plain_untyped_uninitialized.phpt
│ │ │ ├── parent_get_plain_zpp.phpt
│ │ │ ├── parent_get_rw.phpt
│ │ │ ├── parent_get_undefined_property.phpt
│ │ │ ├── parent_in_different_hook.phpt
│ │ │ ├── parent_in_different_property.phpt
│ │ │ ├── parent_outside_property.phpt
│ │ │ ├── parent_set.phpt
│ │ │ ├── parent_set_plain.phpt
│ │ │ ├── parent_set_plain_zpp.phpt
│ │ │ ├── parent_superfluous_args.phpt
│ │ │ ├── parent_syntax.phpt
│ │ │ ├── parent_wrong_property_info.phpt
│ │ │ ├── plain_to_hook.phpt
│ │ │ ├── private_override.phpt
│ │ │ ├── private_prop_final_hook.phpt
│ │ │ ├── property_access_within_closure.phpt
│ │ │ ├── property_const.phpt
│ │ │ ├── property_const_nested.phpt
│ │ │ ├── property_promotion.phpt
│ │ │ ├── protected_to_public.phpt
│ │ │ ├── read_sibling_backing_value.phpt
│ │ │ ├── readonly.phpt
│ │ │ ├── recursion.phpt
│ │ │ ├── set.phpt
│ │ │ ├── set_by_ref.phpt
│ │ │ ├── set_shorthand.phpt
│ │ │ ├── set_value_parameter_type_variance_001.phpt
│ │ │ ├── set_value_parameter_type_variance_002.phpt
│ │ │ ├── set_value_parameter_type_variance_003.phpt
│ │ │ ├── set_value_parameter_type_variance_004.inc
│ │ │ ├── set_value_parameter_type_variance_004.phpt
│ │ │ ├── set_value_parameter_type_variance_005.phpt
│ │ │ ├── set_value_parameter_type_variance_006.phpt
│ │ │ ├── set_value_parameter_type_variance_007.phpt
│ │ │ ├── set_variadic.phpt
│ │ │ ├── static_variables.phpt
│ │ │ ├── syntax.phpt
│ │ │ ├── trait_scope.phpt
│ │ │ ├── traits.phpt
│ │ │ ├── traits_abstract.phpt
│ │ │ ├── traits_conflict.phpt
│ │ │ ├── type_compatibility.phpt
│ │ │ ├── type_compatibility_invalid.phpt
│ │ │ ├── type_compatibility_invalid_2.phpt
│ │ │ ├── unknown_hook.phpt
│ │ │ ├── unknown_hook_private.phpt
│ │ │ ├── unserialize.phpt
│ │ │ ├── unset.phpt
│ │ │ ├── update_constants_virtual_prop.phpt
│ │ │ ├── var_property.phpt
│ │ │ └── virtual_read_write.phpt
│ │ ├── prototype_range.phpt
│ │ ├── qm_assign_ref_unwrap_leak.phpt
│ │ ├── readonly_classes/
│ │ │ ├── gh9285_error.phpt
│ │ │ ├── gh9285_success.phpt
│ │ │ ├── readonly_class_duplicated_modifier.phpt
│ │ │ ├── readonly_class_dynamic_property.phpt
│ │ │ ├── readonly_class_dynamic_property_attribute.phpt
│ │ │ ├── readonly_class_final_modifier.phpt
│ │ │ ├── readonly_class_inheritance_error1.phpt
│ │ │ ├── readonly_class_inheritance_error2.phpt
│ │ │ ├── readonly_class_inheritance_success.phpt
│ │ │ ├── readonly_class_missing_type1.phpt
│ │ │ ├── readonly_class_missing_type2.phpt
│ │ │ ├── readonly_class_property1.phpt
│ │ │ ├── readonly_class_property2.phpt
│ │ │ ├── readonly_class_property3.phpt
│ │ │ ├── readonly_class_unserialize_error.phpt
│ │ │ ├── readonly_enum.phpt
│ │ │ ├── readonly_interface.phpt
│ │ │ └── readonly_trait.phpt
│ │ ├── readonly_function.phpt
│ │ ├── readonly_props/
│ │ │ ├── array_append_initialization.phpt
│ │ │ ├── by_ref_foreach.phpt
│ │ │ ├── cache_slot.phpt
│ │ │ ├── gh7942.phpt
│ │ │ ├── initialization_scope.phpt
│ │ │ ├── magic_get_set.phpt
│ │ │ ├── multiple_modifiers.phpt
│ │ │ ├── override_with_attributes.phpt
│ │ │ ├── promotion.phpt
│ │ │ ├── promotion_error1.phpt
│ │ │ ├── public_set_non_readonly.phpt
│ │ │ ├── readonly_assign_no_sideeffect.phpt
│ │ │ ├── readonly_clone_error1.phpt
│ │ │ ├── readonly_clone_error2.phpt
│ │ │ ├── readonly_clone_error3.phpt
│ │ │ ├── readonly_clone_error4.phpt
│ │ │ ├── readonly_clone_error5.phpt
│ │ │ ├── readonly_clone_error6.phpt
│ │ │ ├── readonly_clone_error7.phpt
│ │ │ ├── readonly_clone_success1.phpt
│ │ │ ├── readonly_clone_success2.phpt
│ │ │ ├── readonly_clone_success4.phpt
│ │ │ ├── readonly_coercion_type_error.phpt
│ │ │ ├── readonly_const.phpt
│ │ │ ├── readonly_containing_object.phpt
│ │ │ ├── readonly_method.phpt
│ │ │ ├── readonly_method_trait.phpt
│ │ │ ├── readonly_modification.phpt
│ │ │ ├── readonly_to_readwrite.phpt
│ │ │ ├── readonly_trait_match.phpt
│ │ │ ├── readonly_trait_mismatch.phpt
│ │ │ ├── readonly_with_default.phpt
│ │ │ ├── readonly_without_type.phpt
│ │ │ ├── readwrite_to_readonly.phpt
│ │ │ ├── serialization.phpt
│ │ │ ├── static.phpt
│ │ │ ├── unset.phpt
│ │ │ ├── variation.phpt
│ │ │ ├── variation_nested.phpt
│ │ │ └── visibility_change.phpt
│ │ ├── real_cast.phpt
│ │ ├── record_errors_001.phpt
│ │ ├── recursive_array_comparison.phpt
│ │ ├── recursive_debug_info.phpt
│ │ ├── recv_init_ref_type.phpt
│ │ ├── register_shutdown_function_refcount.phpt
│ │ ├── remove_predecessor_of_pi_node.phpt
│ │ ├── replace_pred_pi_node.phpt
│ │ ├── require_once_warning_to_exception.phpt
│ │ ├── require_parse_exception.phpt
│ │ ├── required_param_after_optional.phpt
│ │ ├── required_param_after_optional_named_args.phpt
│ │ ├── resource_key.phpt
│ │ ├── restore_error_reporting.phpt
│ │ ├── restrict_globals/
│ │ │ ├── globals_in_globals.phpt
│ │ │ ├── invalid_append.phpt
│ │ │ ├── invalid_append_isset.phpt
│ │ │ ├── invalid_append_unset.phpt
│ │ │ ├── invalid_assign.phpt
│ │ │ ├── invalid_assign_list.phpt
│ │ │ ├── invalid_assign_list_ref.phpt
│ │ │ ├── invalid_assign_op.phpt
│ │ │ ├── invalid_assign_ref_lhs.phpt
│ │ │ ├── invalid_assign_ref_rhs.phpt
│ │ │ ├── invalid_foreach.phpt
│ │ │ ├── invalid_foreach_ref.phpt
│ │ │ ├── invalid_pass_by_ref.phpt
│ │ │ ├── invalid_unset.phpt
│ │ │ ├── key_canonicalization.phpt
│ │ │ └── valid.phpt
│ │ ├── result_unused.phpt
│ │ ├── return_by_ref_from_void_function.phpt
│ │ ├── return_ref_none.phpt
│ │ ├── return_types/
│ │ │ ├── 001.phpt
│ │ │ ├── 002.phpt
│ │ │ ├── 003.phpt
│ │ │ ├── 004.phpt
│ │ │ ├── 005.phpt
│ │ │ ├── 006.phpt
│ │ │ ├── 007.phpt
│ │ │ ├── 008.phpt
│ │ │ ├── 009.phpt
│ │ │ ├── 010.phpt
│ │ │ ├── 011.phpt
│ │ │ ├── 012.phpt
│ │ │ ├── 013.phpt
│ │ │ ├── 014.phpt
│ │ │ ├── 015.phpt
│ │ │ ├── 016.phpt
│ │ │ ├── 017.phpt
│ │ │ ├── 018.phpt
│ │ │ ├── 019.phpt
│ │ │ ├── 020.phpt
│ │ │ ├── 021.phpt
│ │ │ ├── 022.phpt
│ │ │ ├── 024.phpt
│ │ │ ├── 025.phpt
│ │ │ ├── 026.phpt
│ │ │ ├── 027.phpt
│ │ │ ├── 028.phpt
│ │ │ ├── 029.phpt
│ │ │ ├── 030.phpt
│ │ │ ├── 031.phpt
│ │ │ ├── 032.phpt
│ │ │ ├── 033.phpt
│ │ │ ├── 034.phpt
│ │ │ ├── 035.phpt
│ │ │ ├── 036.phpt
│ │ │ ├── 037.phpt
│ │ │ ├── 038.phpt
│ │ │ ├── 039.phpt
│ │ │ ├── 040.phpt
│ │ │ ├── 041.phpt
│ │ │ ├── 042.phpt
│ │ │ ├── 043.phpt
│ │ │ ├── 044.phpt
│ │ │ ├── bug70557.phpt
│ │ │ ├── bug71092.phpt
│ │ │ ├── bug71978.phpt
│ │ │ ├── classes.php.inc
│ │ │ ├── generators001.phpt
│ │ │ ├── generators002.phpt
│ │ │ ├── generators003.phpt
│ │ │ ├── generators004.phpt
│ │ │ ├── generators005.phpt
│ │ │ ├── generators006.phpt
│ │ │ ├── inheritance001.phpt
│ │ │ ├── inheritance002.phpt
│ │ │ ├── inheritance003.phpt
│ │ │ ├── inheritance004.phpt
│ │ │ ├── inheritance005.phpt
│ │ │ ├── inheritance006.phpt
│ │ │ ├── inheritance007.phpt
│ │ │ ├── inheritance008.phpt
│ │ │ ├── inheritance009.phpt
│ │ │ ├── internal_functions001.phpt
│ │ │ ├── internal_functions002.phpt
│ │ │ ├── internal_functions003.phpt
│ │ │ ├── never_allowed.phpt
│ │ │ ├── never_covariance.phpt
│ │ │ ├── never_disallowed1.phpt
│ │ │ ├── never_disallowed2.phpt
│ │ │ ├── never_disallowed3.phpt
│ │ │ ├── never_disallowed4.phpt
│ │ │ ├── never_disallowed5.phpt
│ │ │ ├── never_finally_return.phpt
│ │ │ ├── never_generator.phpt
│ │ │ ├── never_no_variance.phpt
│ │ │ ├── never_parameter.phpt
│ │ │ ├── never_reflected.phpt
│ │ │ ├── never_return_throw.phpt
│ │ │ ├── never_tostring.phpt
│ │ │ ├── reflection001.phpt
│ │ │ ├── return_reference_separation.phpt
│ │ │ ├── rfc001.phpt
│ │ │ ├── rfc002.phpt
│ │ │ ├── rfc003.phpt
│ │ │ ├── rfc004.phpt
│ │ │ ├── void_allowed.phpt
│ │ │ ├── void_disallowed1.phpt
│ │ │ ├── void_disallowed2.phpt
│ │ │ ├── void_disallowed3.phpt
│ │ │ └── void_parameter.phpt
│ │ ├── rope_with_exception.phpt
│ │ ├── runtime_compile_time_binary_operands.phpt
│ │ ├── selfParent_001.phpt
│ │ ├── selfParent_002.phpt
│ │ ├── self_and.phpt
│ │ ├── self_class_const_in_unknown_scope.phpt
│ │ ├── self_class_const_outside_class.phpt
│ │ ├── self_in_eval.phpt
│ │ ├── self_instanceof_outside_class.phpt
│ │ ├── self_method_or_prop_outside_class.phpt
│ │ ├── self_mod.phpt
│ │ ├── self_or.phpt
│ │ ├── self_xor.phpt
│ │ ├── serializable_deprecation.phpt
│ │ ├── settype_array.phpt
│ │ ├── settype_bool.phpt
│ │ ├── settype_double.phpt
│ │ ├── settype_int.phpt
│ │ ├── settype_null.phpt
│ │ ├── settype_object.phpt
│ │ ├── settype_resource.phpt
│ │ ├── settype_string.phpt
│ │ ├── shift_001.phpt
│ │ ├── shift_002.phpt
│ │ ├── short_echo_as_identifier.phpt
│ │ ├── special_name_error2.phpt
│ │ ├── special_name_error3.phpt
│ │ ├── stack_limit/
│ │ │ ├── gh16041_001.phpt
│ │ │ ├── gh16041_002.phpt
│ │ │ ├── stack_limit_001.phpt
│ │ │ ├── stack_limit_002.phpt
│ │ │ ├── stack_limit_003.phpt
│ │ │ ├── stack_limit_004.phpt
│ │ │ ├── stack_limit_005.phpt
│ │ │ ├── stack_limit_006.phpt
│ │ │ ├── stack_limit_007.phpt
│ │ │ ├── stack_limit_008.phpt
│ │ │ ├── stack_limit_009.phpt
│ │ │ ├── stack_limit_010.phpt
│ │ │ ├── stack_limit_011.phpt
│ │ │ ├── stack_limit_012.inc
│ │ │ ├── stack_limit_012.phpt
│ │ │ ├── stack_limit_013.inc
│ │ │ ├── stack_limit_013.phpt
│ │ │ ├── stack_limit_014.inc
│ │ │ ├── stack_limit_014.phpt
│ │ │ └── stack_limit_015.phpt
│ │ ├── static_in_trait_insteadof_list.phpt
│ │ ├── static_in_trait_insteadof_reference.phpt
│ │ ├── static_method_non_existing_class.phpt
│ │ ├── static_variable.phpt
│ │ ├── static_variable_func_call.phpt
│ │ ├── static_variable_in_dynamic_function.phpt
│ │ ├── static_variable_in_dynamic_function_2.phpt
│ │ ├── static_variable_in_private_method.phpt
│ │ ├── static_variable_in_private_trait_method.phpt
│ │ ├── static_variables_closure_bind.phpt
│ │ ├── static_variables_destructor.phpt
│ │ ├── static_variables_global.phpt
│ │ ├── static_variables_global_2.phpt
│ │ ├── static_variables_recursive.phpt
│ │ ├── static_variables_throwing_initializer.phpt
│ │ ├── static_variables_traits.phpt
│ │ ├── str_offset_001.phpt
│ │ ├── str_offset_002.phpt
│ │ ├── str_offset_003.phpt
│ │ ├── str_offset_004.phpt
│ │ ├── str_offset_005.phpt
│ │ ├── str_offset_006.phpt
│ │ ├── str_offset_007.phpt
│ │ ├── str_offset_008.phpt
│ │ ├── str_or_obj_of_class_zpp.phpt
│ │ ├── str_or_obj_zpp.phpt
│ │ ├── strict_001.phpt
│ │ ├── strict_002.phpt
│ │ ├── string_offset_as_object.phpt
│ │ ├── string_offset_errors.phpt
│ │ ├── string_offset_int_min_max.phpt
│ │ ├── string_offset_optimization.phpt
│ │ ├── string_to_number_comparison.phpt
│ │ ├── stringable_automatic_implementation.phpt
│ │ ├── stringable_internal_class.phpt
│ │ ├── stringable_trait.phpt
│ │ ├── stringable_trait_invalid.phpt
│ │ ├── strlen.phpt
│ │ ├── strlen_deprecation_to_exception.phpt
│ │ ├── sub_001.phpt
│ │ ├── switch_on_numeric_strings.phpt
│ │ ├── symtable_cache_recursive_dtor.phpt
│ │ ├── temporary_cleaning_001.phpt
│ │ ├── temporary_cleaning_002.phpt
│ │ ├── temporary_cleaning_003.phpt
│ │ ├── temporary_cleaning_004.phpt
│ │ ├── temporary_cleaning_005.phpt
│ │ ├── temporary_cleaning_006.phpt
│ │ ├── temporary_cleaning_007.phpt
│ │ ├── temporary_cleaning_008.phpt
│ │ ├── temporary_cleaning_009.phpt
│ │ ├── temporary_cleaning_010.phpt
│ │ ├── temporary_cleaning_011.phpt
│ │ ├── temporary_cleaning_012.phpt
│ │ ├── temporary_cleaning_013.phpt
│ │ ├── temporary_cleaning_014.phpt
│ │ ├── temporary_cleaning_015.phpt
│ │ ├── temporary_cleaning_016.phpt
│ │ ├── temporary_cleaning_017.phpt
│ │ ├── tentative_type_early_binding.phpt
│ │ ├── ternary_associativity.phpt
│ │ ├── ternary_associativity_1.phpt
│ │ ├── ternary_associativity_2.phpt
│ │ ├── ternary_associativity_3.phpt
│ │ ├── this_as_global.phpt
│ │ ├── this_as_lexical_var_error.phpt
│ │ ├── this_as_parameter.phpt
│ │ ├── this_as_static.phpt
│ │ ├── this_in_catch.phpt
│ │ ├── this_in_eval.phpt
│ │ ├── this_in_extract.phpt
│ │ ├── this_in_foreach_001.phpt
│ │ ├── this_in_foreach_002.phpt
│ │ ├── this_in_foreach_003.phpt
│ │ ├── this_in_foreach_004.phpt
│ │ ├── this_in_isset.phpt
│ │ ├── this_in_unset.phpt
│ │ ├── this_reassign.phpt
│ │ ├── throw/
│ │ │ ├── 001.phpt
│ │ │ ├── 002.phpt
│ │ │ ├── exit_in_finally.phpt
│ │ │ └── leaks.phpt
│ │ ├── throw_reference.phpt
│ │ ├── throwable_001.phpt
│ │ ├── throwable_002.phpt
│ │ ├── throwable_003.phpt
│ │ ├── throwing_overloaded_compound_assign_op.phpt
│ │ ├── trait_exists_001.phpt
│ │ ├── trait_exists_002.phpt
│ │ ├── trait_exists_003.phpt
│ │ ├── trait_type_errors.phpt
│ │ ├── traits/
│ │ │ ├── abstract_method_1.phpt
│ │ │ ├── abstract_method_10.phpt
│ │ │ ├── abstract_method_2.phpt
│ │ │ ├── abstract_method_3.phpt
│ │ │ ├── abstract_method_4.phpt
│ │ │ ├── abstract_method_5.phpt
│ │ │ ├── abstract_method_6.phpt
│ │ │ ├── abstract_method_7.phpt
│ │ │ ├── abstract_method_8.phpt
│ │ │ ├── abstract_method_9.phpt
│ │ │ ├── bug54441.phpt
│ │ │ ├── bug55137.phpt
│ │ │ ├── bug55214.phpt
│ │ │ ├── bug55355.phpt
│ │ │ ├── bug55372.phpt
│ │ │ ├── bug55424.phpt
│ │ │ ├── bug55524.phpt
│ │ │ ├── bug60145.phpt
│ │ │ ├── bug60153.phpt
│ │ │ ├── bug60165a.phpt
│ │ │ ├── bug60165b.phpt
│ │ │ ├── bug60165c.phpt
│ │ │ ├── bug60165d.phpt
│ │ │ ├── bug60173.phpt
│ │ │ ├── bug60217a.phpt
│ │ │ ├── bug60217b.phpt
│ │ │ ├── bug60217c.phpt
│ │ │ ├── bug60369.phpt
│ │ │ ├── bug60717.phpt
│ │ │ ├── bug60809.phpt
│ │ │ ├── bug61052.phpt
│ │ │ ├── bug61998.phpt
│ │ │ ├── bug63911.phpt
│ │ │ ├── bug64070.phpt
│ │ │ ├── bug64235.phpt
│ │ │ ├── bug64235b.phpt
│ │ │ ├── bug65576a.phpt
│ │ │ ├── bug65576b.phpt
│ │ │ ├── bug69579.phpt
│ │ │ ├── bug74607.phpt
│ │ │ ├── bug74607a.phpt
│ │ │ ├── bug74922.phpt
│ │ │ ├── bug74922a.phpt
│ │ │ ├── bug74922b.inc
│ │ │ ├── bug74922b.phpt
│ │ │ ├── bug74922c.phpt
│ │ │ ├── bug75607.phpt
│ │ │ ├── bug75607a.phpt
│ │ │ ├── bug76539.phpt
│ │ │ ├── bug76700.phpt
│ │ │ ├── bug76773-deprecated.phpt
│ │ │ ├── bug76773.phpt
│ │ │ ├── bugs/
│ │ │ │ ├── abstract-methods01.phpt
│ │ │ │ ├── abstract-methods02.phpt
│ │ │ │ ├── abstract-methods03.phpt
│ │ │ │ ├── abstract-methods04.phpt
│ │ │ │ ├── abstract-methods05.phpt
│ │ │ │ ├── abstract-methods06.phpt
│ │ │ │ ├── alias-semantics.phpt
│ │ │ │ ├── alias-semantics02.phpt
│ │ │ │ ├── alias01.phpt
│ │ │ │ ├── case-sensitive.phpt
│ │ │ │ ├── gh13177.phpt
│ │ │ │ ├── interfaces.phpt
│ │ │ │ ├── missing-trait.phpt
│ │ │ │ ├── overridding-conflicting-methods.phpt
│ │ │ │ ├── overridding-conflicting-property-initializer.phpt
│ │ │ │ └── overridding-static-property-with-doc-block.phpt
│ │ │ ├── conflict001.phpt
│ │ │ ├── conflict002.phpt
│ │ │ ├── conflict003.phpt
│ │ │ ├── constant_001.phpt
│ │ │ ├── constant_002.phpt
│ │ │ ├── constant_003.phpt
│ │ │ ├── constant_004.phpt
│ │ │ ├── constant_005.phpt
│ │ │ ├── constant_006.phpt
│ │ │ ├── constant_007.phpt
│ │ │ ├── constant_008.phpt
│ │ │ ├── constant_009.phpt
│ │ │ ├── constant_010.phpt
│ │ │ ├── constant_011.phpt
│ │ │ ├── constant_012.phpt
│ │ │ ├── constant_013.phpt
│ │ │ ├── constant_014.phpt
│ │ │ ├── constant_015.phpt
│ │ │ ├── constant_016.phpt
│ │ │ ├── constant_017.phpt
│ │ │ ├── constant_018.phpt
│ │ │ ├── constant_019.phpt
│ │ │ ├── constant_020.phpt
│ │ │ ├── constant_021.phpt
│ │ │ ├── direct_static_member_access.phpt
│ │ │ ├── error_001.phpt
│ │ │ ├── error_002.phpt
│ │ │ ├── error_003.phpt
│ │ │ ├── error_004.phpt
│ │ │ ├── error_005.phpt
│ │ │ ├── error_006.phpt
│ │ │ ├── error_007.phpt
│ │ │ ├── error_008.phpt
│ │ │ ├── error_009.phpt
│ │ │ ├── error_010.phpt
│ │ │ ├── error_011.phpt
│ │ │ ├── error_012.phpt
│ │ │ ├── error_013.phpt
│ │ │ ├── error_014.phpt
│ │ │ ├── error_015.phpt
│ │ │ ├── error_016.phpt
│ │ │ ├── flattening001.phpt
│ │ │ ├── flattening002.phpt
│ │ │ ├── flattening003.phpt
│ │ │ ├── get_declared_traits_001.phpt
│ │ │ ├── get_declared_traits_002.phpt
│ │ │ ├── get_declared_traits_003.phpt
│ │ │ ├── get_declared_traits_004.phpt
│ │ │ ├── gh12854.phpt
│ │ │ ├── inheritance001.phpt
│ │ │ ├── inheritance002.phpt
│ │ │ ├── inheritance003.phpt
│ │ │ ├── interface_001.phpt
│ │ │ ├── interface_002.phpt
│ │ │ ├── interface_003.phpt
│ │ │ ├── language001.phpt
│ │ │ ├── language002.phpt
│ │ │ ├── language003.phpt
│ │ │ ├── language004.phpt
│ │ │ ├── language005.phpt
│ │ │ ├── language006.phpt
│ │ │ ├── language007.phpt
│ │ │ ├── language008a.phpt
│ │ │ ├── language008b.phpt
│ │ │ ├── language009.phpt
│ │ │ ├── language010.phpt
│ │ │ ├── language011.phpt
│ │ │ ├── language012.phpt
│ │ │ ├── language013.phpt
│ │ │ ├── language014.phpt
│ │ │ ├── language015.phpt
│ │ │ ├── language016.phpt
│ │ │ ├── language017.phpt
│ │ │ ├── language018.phpt
│ │ │ ├── language019.phpt
│ │ │ ├── language020.phpt
│ │ │ ├── methods_001.phpt
│ │ │ ├── methods_002.phpt
│ │ │ ├── methods_003.phpt
│ │ │ ├── no_static_arg_binding.phpt
│ │ │ ├── precedence_unknown_class.phpt
│ │ │ ├── property001.phpt
│ │ │ ├── property002.phpt
│ │ │ ├── property003.phpt
│ │ │ ├── property004.phpt
│ │ │ ├── property005.phpt
│ │ │ ├── property006.phpt
│ │ │ ├── property007.phpt
│ │ │ ├── property008.phpt
│ │ │ ├── property009.phpt
│ │ │ ├── static_001.phpt
│ │ │ ├── static_002.phpt
│ │ │ ├── static_003.phpt
│ │ │ ├── static_004.phpt
│ │ │ ├── static_forward_static_call.phpt
│ │ │ ├── static_get_called_class.phpt
│ │ │ ├── trait_constant_001.phpt
│ │ │ ├── trait_constant_002.phpt
│ │ │ └── trait_underscore_as_name.phpt
│ │ ├── trampoline_closure_named_arguments.phpt
│ │ ├── try/
│ │ │ ├── bug70228.phpt
│ │ │ ├── bug70228_2.phpt
│ │ │ ├── bug70228_3.phpt
│ │ │ ├── bug70228_4.phpt
│ │ │ ├── bug70228_5.phpt
│ │ │ ├── bug70228_6.phpt
│ │ │ ├── bug70228_7.phpt
│ │ │ ├── bug70228_8.phpt
│ │ │ ├── bug71604.phpt
│ │ │ ├── bug71604_2.phpt
│ │ │ ├── bug71604_3.phpt
│ │ │ ├── bug72213.phpt
│ │ │ ├── bug72213_2.phpt
│ │ │ ├── bug72629.phpt
│ │ │ ├── bug74444.phpt
│ │ │ ├── catch_002.phpt
│ │ │ ├── catch_003.phpt
│ │ │ ├── catch_004.phpt
│ │ │ ├── catch_finally_001.phpt
│ │ │ ├── catch_finally_002.phpt
│ │ │ ├── catch_finally_003.phpt
│ │ │ ├── catch_finally_004.phpt
│ │ │ ├── catch_finally_005.phpt
│ │ │ ├── catch_finally_006.phpt
│ │ │ ├── catch_novar_1.phpt
│ │ │ ├── catch_novar_2.phpt
│ │ │ ├── exceptions.inc
│ │ │ ├── finally_goto_001.phpt
│ │ │ ├── finally_goto_002.phpt
│ │ │ ├── finally_goto_003.phpt
│ │ │ ├── finally_goto_004.phpt
│ │ │ ├── finally_goto_005.phpt
│ │ │ ├── try_catch_finally_001.phpt
│ │ │ ├── try_catch_finally_002.phpt
│ │ │ ├── try_catch_finally_003.phpt
│ │ │ ├── try_catch_finally_004.phpt
│ │ │ ├── try_catch_finally_005.phpt
│ │ │ ├── try_catch_finally_006.phpt
│ │ │ ├── try_catch_finally_007.phpt
│ │ │ ├── try_finally_001.phpt
│ │ │ ├── try_finally_002.phpt
│ │ │ ├── try_finally_003.phpt
│ │ │ ├── try_finally_004.phpt
│ │ │ ├── try_finally_005.phpt
│ │ │ ├── try_finally_006.phpt
│ │ │ ├── try_finally_007.phpt
│ │ │ ├── try_finally_008.phpt
│ │ │ ├── try_finally_009.phpt
│ │ │ ├── try_finally_010.phpt
│ │ │ ├── try_finally_011.phpt
│ │ │ ├── try_finally_012.phpt
│ │ │ ├── try_finally_013.phpt
│ │ │ ├── try_finally_014.phpt
│ │ │ ├── try_finally_015.phpt
│ │ │ ├── try_finally_016.phpt
│ │ │ ├── try_finally_017.phpt
│ │ │ ├── try_finally_018.phpt
│ │ │ ├── try_finally_019.phpt
│ │ │ ├── try_finally_020.phpt
│ │ │ ├── try_finally_021.phpt
│ │ │ ├── try_finally_022.phpt
│ │ │ ├── try_finally_023.phpt
│ │ │ ├── try_finally_024.phpt
│ │ │ ├── try_finally_025.phpt
│ │ │ ├── try_finally_026.phpt
│ │ │ ├── try_finally_027.phpt
│ │ │ ├── try_finally_recursive_previous.phpt
│ │ │ ├── try_multicatch_001.phpt
│ │ │ ├── try_multicatch_002.phpt
│ │ │ ├── try_multicatch_003.phpt
│ │ │ ├── try_multicatch_004.phpt
│ │ │ ├── try_multicatch_005.phpt
│ │ │ ├── try_multicatch_006.phpt
│ │ │ └── try_multicatch_007.phpt
│ │ ├── type_declarations/
│ │ │ ├── add_return_type.phpt
│ │ │ ├── array_001.phpt
│ │ │ ├── callable_001.phpt
│ │ │ ├── callable_002.phpt
│ │ │ ├── callable_003.phpt
│ │ │ ├── closure_with_variadic.phpt
│ │ │ ├── confusable_type_warning.phpt
│ │ │ ├── default_boolean_hint_values.phpt
│ │ │ ├── dnf_types/
│ │ │ │ ├── dnf_2_intersection.phpt
│ │ │ │ ├── dnf_intersection_and_eval.phpt
│ │ │ │ ├── dnf_intersection_and_null.phpt
│ │ │ │ ├── dnf_intersection_and_single.phpt
│ │ │ │ ├── gh9516.phpt
│ │ │ │ ├── redundant_types/
│ │ │ │ │ ├── duplicate_class_alias_type.phpt
│ │ │ │ │ ├── duplicate_class_alias_type_runtime.phpt
│ │ │ │ │ ├── inheritence.phpt
│ │ │ │ │ ├── less_restrive_type_constraint_already_present001.phpt
│ │ │ │ │ ├── less_restrive_type_constraint_already_present002.phpt
│ │ │ │ │ ├── less_restrive_type_constraint_already_present003.phpt
│ │ │ │ │ ├── less_restrive_type_constraint_already_present004.phpt
│ │ │ │ │ ├── object_and_dnf_type.phpt
│ │ │ │ │ └── object_and_dnf_type2.phpt
│ │ │ │ └── variance/
│ │ │ │ ├── invalid1.phpt
│ │ │ │ ├── invalid_covariance_drop_type1.phpt
│ │ │ │ ├── invalid_covariance_drop_type2.phpt
│ │ │ │ ├── invalid_covariance_intersection_to_union1.phpt
│ │ │ │ ├── invalid_covariance_intersection_to_union2.phpt
│ │ │ │ ├── invalid_covariance_intersection_to_union3.phpt
│ │ │ │ ├── invalid_invariance1.phpt
│ │ │ │ ├── invalid_invariance1_var.phpt
│ │ │ │ ├── invalid_invariance2.phpt
│ │ │ │ ├── valid1.phpt
│ │ │ │ ├── valid2.phpt
│ │ │ │ ├── valid4.phpt
│ │ │ │ ├── valid5.phpt
│ │ │ │ ├── valid6.phpt
│ │ │ │ ├── valid7.phpt
│ │ │ │ ├── valid8.phpt
│ │ │ │ └── valid9.phpt
│ │ │ ├── explicit_weak_include_strict.phpt
│ │ │ ├── inexistent_class_hint_with_scalar_arg.phpt
│ │ │ ├── internal_function_strict_mode.phpt
│ │ │ ├── intersection_types/
│ │ │ │ ├── added_interface_intersection_type.phpt
│ │ │ │ ├── assigning_intersection_types.phpt
│ │ │ │ ├── bug81268.phpt
│ │ │ │ ├── implicit_nullable_intersection_type.phpt
│ │ │ │ ├── implicit_nullable_intersection_type_error.phpt
│ │ │ │ ├── invalid_types/
│ │ │ │ │ ├── invalid_array_type.phpt
│ │ │ │ │ ├── invalid_bool_type.phpt
│ │ │ │ │ ├── invalid_callable_type.phpt
│ │ │ │ │ ├── invalid_false_type.phpt
│ │ │ │ │ ├── invalid_float_type.phpt
│ │ │ │ │ ├── invalid_int_type.phpt
│ │ │ │ │ ├── invalid_iterable_type.phpt
│ │ │ │ │ ├── invalid_mixed_type.phpt
│ │ │ │ │ ├── invalid_never_type.phpt
│ │ │ │ │ ├── invalid_null_type.phpt
│ │ │ │ │ ├── invalid_nullable_type.phpt
│ │ │ │ │ ├── invalid_object_type.phpt
│ │ │ │ │ ├── invalid_parent_type.phpt
│ │ │ │ │ ├── invalid_self_type.phpt
│ │ │ │ │ ├── invalid_static_type.phpt
│ │ │ │ │ ├── invalid_string_type.phpt
│ │ │ │ │ ├── invalid_true_type.phpt
│ │ │ │ │ └── invalid_void_type.phpt
│ │ │ │ ├── missing_interface_intersection_type.phpt
│ │ │ │ ├── parameter.phpt
│ │ │ │ ├── parse_error.phpt
│ │ │ │ ├── parsing_attribute.phpt
│ │ │ │ ├── parsing_comment.phpt
│ │ │ │ ├── redundant_types/
│ │ │ │ │ ├── duplicate_class_alias_type.phpt
│ │ │ │ │ ├── duplicate_class_alias_type_runtime.phpt
│ │ │ │ │ ├── duplicate_class_type.phpt
│ │ │ │ │ └── inheritence.phpt
│ │ │ │ ├── typed_reference.phpt
│ │ │ │ └── variance/
│ │ │ │ ├── invalid1.phpt
│ │ │ │ ├── invalid2.phpt
│ │ │ │ ├── invalid3.phpt
│ │ │ │ ├── invalid4.phpt
│ │ │ │ ├── invalid5.phpt
│ │ │ │ ├── invalid6.phpt
│ │ │ │ ├── invalid_covariance_drop_type1.phpt
│ │ │ │ ├── invalid_covariance_drop_type2.phpt
│ │ │ │ ├── invalid_covariance_intersection_to_union1.phpt
│ │ │ │ ├── invalid_covariance_intersection_to_union2.phpt
│ │ │ │ ├── invalid_covariance_intersection_to_union3.phpt
│ │ │ │ ├── invalid_invariance1.phpt
│ │ │ │ ├── invalid_invariance2.phpt
│ │ │ │ ├── valid1.phpt
│ │ │ │ ├── valid2.phpt
│ │ │ │ ├── valid3.phpt
│ │ │ │ ├── valid4.phpt
│ │ │ │ ├── valid5.phpt
│ │ │ │ ├── valid6.phpt
│ │ │ │ ├── valid7.phpt
│ │ │ │ └── valid8.phpt
│ │ │ ├── iterable/
│ │ │ │ ├── iterable_001.phpt
│ │ │ │ ├── iterable_002.phpt
│ │ │ │ ├── iterable_003.phpt
│ │ │ │ ├── iterable_004.phpt
│ │ │ │ ├── iterable_005.phpt
│ │ │ │ ├── iterable_alias_redundancy_array_1.phpt
│ │ │ │ ├── iterable_alias_redundancy_array_2.phpt
│ │ │ │ ├── iterable_alias_redundancy_iterable.phpt
│ │ │ │ ├── iterable_alias_redundancy_object_1.phpt
│ │ │ │ ├── iterable_alias_redundancy_object_2.phpt
│ │ │ │ ├── iterable_alias_redundancy_object_3.phpt
│ │ │ │ ├── iterable_alias_redundancy_object_4.phpt
│ │ │ │ ├── iterable_alias_redundancy_object_5.phpt
│ │ │ │ ├── iterable_alias_redundancy_object_6.phpt
│ │ │ │ ├── iterable_alias_redundancy_object_variance.phpt
│ │ │ │ └── or_null.phpt
│ │ │ ├── iterable_001.phpt
│ │ │ ├── iterable_002.phpt
│ │ │ ├── iterable_003.phpt
│ │ │ ├── iterable_004.phpt
│ │ │ ├── iterable_005.phpt
│ │ │ ├── literal_types/
│ │ │ │ ├── false_no_coercion.phpt
│ │ │ │ ├── false_no_coercion_on_overload.phpt
│ │ │ │ ├── false_standalone.phpt
│ │ │ │ ├── false_standalone_implicit_nullability.phpt
│ │ │ │ ├── true_no_coercion.phpt
│ │ │ │ ├── true_no_coercion_on_overload.phpt
│ │ │ │ ├── true_standalone.phpt
│ │ │ │ └── true_standalone_implicit_nullability.phpt
│ │ │ ├── mixed/
│ │ │ │ ├── casting/
│ │ │ │ │ └── mixed_cast_error.phpt
│ │ │ │ ├── inheritance/
│ │ │ │ │ ├── mixed_parameter_inheritance_error1.phpt
│ │ │ │ │ ├── mixed_parameter_inheritance_error2.phpt
│ │ │ │ │ ├── mixed_parameter_inheritance_error3.phpt
│ │ │ │ │ ├── mixed_parameter_inheritance_error4.phpt
│ │ │ │ │ ├── mixed_parameter_inheritance_success1.phpt
│ │ │ │ │ ├── mixed_parameter_inheritance_success2.phpt
│ │ │ │ │ ├── mixed_parameter_inheritance_success3.phpt
│ │ │ │ │ ├── mixed_parameter_inheritance_success4.phpt
│ │ │ │ │ ├── mixed_parameter_inheritance_success5.phpt
│ │ │ │ │ ├── mixed_parameter_inheritance_success6.phpt
│ │ │ │ │ ├── mixed_parameter_inheritance_success7.phpt
│ │ │ │ │ ├── mixed_property_inheritance_error1.phpt
│ │ │ │ │ ├── mixed_property_inheritance_error2.phpt
│ │ │ │ │ ├── mixed_property_inheritance_error3.phpt
│ │ │ │ │ ├── mixed_property_inheritance_error4.phpt
│ │ │ │ │ ├── mixed_property_inheritance_error5.phpt
│ │ │ │ │ ├── mixed_property_inheritance_error6.phpt
│ │ │ │ │ ├── mixed_property_inheritance_error7.phpt
│ │ │ │ │ ├── mixed_property_inheritance_error8.phpt
│ │ │ │ │ ├── mixed_property_inheritance_success.phpt
│ │ │ │ │ ├── mixed_return_inheritance_error1.phpt
│ │ │ │ │ ├── mixed_return_inheritance_error2.phpt
│ │ │ │ │ ├── mixed_return_inheritance_error3.phpt
│ │ │ │ │ ├── mixed_return_inheritance_success1.phpt
│ │ │ │ │ ├── mixed_return_inheritance_success2.phpt
│ │ │ │ │ ├── mixed_return_inheritance_success3.phpt
│ │ │ │ │ └── mixed_return_inheritance_success4.phpt
│ │ │ │ ├── syntax/
│ │ │ │ │ ├── mixed_class_error.phpt
│ │ │ │ │ ├── mixed_parameter_error1.phpt
│ │ │ │ │ ├── mixed_parameter_error2.phpt
│ │ │ │ │ ├── mixed_parameter_success.phpt
│ │ │ │ │ ├── mixed_parameter_sucess4.phpt
│ │ │ │ │ ├── mixed_return_error.phpt
│ │ │ │ │ ├── mixed_return_success.phpt
│ │ │ │ │ ├── mixed_void_return_error.phpt
│ │ │ │ │ ├── nullable_mixed_parameter_error.phpt
│ │ │ │ │ ├── nullable_mixed_property_error.phpt
│ │ │ │ │ └── nullable_mixed_return_error.phpt
│ │ │ │ └── validation/
│ │ │ │ ├── mixed_parameter_strict_success.phpt
│ │ │ │ ├── mixed_parameter_weak_success.phpt
│ │ │ │ ├── mixed_property_strict_success.phpt
│ │ │ │ ├── mixed_property_weak_success.phpt
│ │ │ │ ├── mixed_return_strict_error.phpt
│ │ │ │ ├── mixed_return_strict_success.phpt
│ │ │ │ ├── mixed_return_weak_error.phpt
│ │ │ │ └── mixed_return_weak_success.phpt
│ │ │ ├── nullable_null.phpt
│ │ │ ├── nullable_typed_return_without_value.phpt
│ │ │ ├── nullable_void.phpt
│ │ │ ├── parameter_type_variance.phpt
│ │ │ ├── parameter_type_variance_2.phpt
│ │ │ ├── parent_is_not_proto.phpt
│ │ │ ├── return_separation.phpt
│ │ │ ├── scalar_basic.phpt
│ │ │ ├── scalar_constant_defaults.phpt
│ │ │ ├── scalar_constant_defaults_error.phpt
│ │ │ ├── scalar_float_with_integer_default_strict.phpt
│ │ │ ├── scalar_float_with_integer_default_weak.phpt
│ │ │ ├── scalar_float_with_invalid_default.phpt
│ │ │ ├── scalar_none.phpt
│ │ │ ├── scalar_null.phpt
│ │ │ ├── scalar_relative_typehint_disallowed.phpt
│ │ │ ├── scalar_reserved2.phpt
│ │ │ ├── scalar_reserved2_class_alias.phpt
│ │ │ ├── scalar_reserved2_use.phpt
│ │ │ ├── scalar_reserved3.phpt
│ │ │ ├── scalar_reserved3_class_alias.phpt
│ │ │ ├── scalar_reserved3_use.phpt
│ │ │ ├── scalar_reserved4.phpt
│ │ │ ├── scalar_reserved4_class_alias.phpt
│ │ │ ├── scalar_reserved4_use.phpt
│ │ │ ├── scalar_reserved6.phpt
│ │ │ ├── scalar_reserved6_class_alias.phpt
│ │ │ ├── scalar_reserved6_use.phpt
│ │ │ ├── scalar_reserved7.phpt
│ │ │ ├── scalar_return_basic.phpt
│ │ │ ├── scalar_return_basic_64bit.phpt
│ │ │ ├── scalar_strict.phpt
│ │ │ ├── scalar_strict_64bit.phpt
│ │ │ ├── scalar_strict_basic.phpt
│ │ │ ├── scalar_strict_declaration_placement_001.phpt
│ │ │ ├── scalar_strict_declaration_placement_002.phpt
│ │ │ ├── scalar_strict_declaration_placement_003.phpt
│ │ │ ├── scalar_strict_declaration_placement_004.phpt
│ │ │ ├── scalar_strict_declaration_placement_005.phpt
│ │ │ ├── scalar_strict_declaration_placement_006.phpt
│ │ │ ├── scalar_strict_declaration_placement_007.phpt
│ │ │ ├── scalar_strict_declaration_placement_008.phpt
│ │ │ ├── scalar_weak_reference.phpt
│ │ │ ├── self_on_closure_in_method.phpt
│ │ │ ├── standalone_null.phpt
│ │ │ ├── static_type_in_final_class.phpt
│ │ │ ├── static_type_outside_class.phpt
│ │ │ ├── static_type_param.phpt
│ │ │ ├── static_type_property.phpt
│ │ │ ├── static_type_return.phpt
│ │ │ ├── static_type_trait.phpt
│ │ │ ├── strict_call_weak.phpt
│ │ │ ├── strict_call_weak_2.inc
│ │ │ ├── strict_call_weak_explicit.phpt
│ │ │ ├── strict_call_weak_explicit_2.inc
│ │ │ ├── strict_include_explicit_weak.phpt
│ │ │ ├── strict_include_explicit_weak_2.inc
│ │ │ ├── strict_include_weak.phpt
│ │ │ ├── strict_include_weak_2.inc
│ │ │ ├── strict_nested.phpt
│ │ │ ├── typed_class_constants_ast_print.phpt
│ │ │ ├── typed_class_constants_diamond_error1.phpt
│ │ │ ├── typed_class_constants_inheritance_error1.phpt
│ │ │ ├── typed_class_constants_inheritance_error2.phpt
│ │ │ ├── typed_class_constants_inheritance_error3.phpt
│ │ │ ├── typed_class_constants_inheritance_error4.phpt
│ │ │ ├── typed_class_constants_inheritance_error5.phpt
│ │ │ ├── typed_class_constants_inheritance_error6.phpt
│ │ │ ├── typed_class_constants_inheritance_success1.phpt
│ │ │ ├── typed_class_constants_inheritance_success2.phpt
│ │ │ ├── typed_class_constants_inheritance_success3.phpt
│ │ │ ├── typed_class_constants_inheritance_success4.phpt
│ │ │ ├── typed_class_constants_inheritance_success5.phpt
│ │ │ ├── typed_class_constants_multiple_constants.phpt
│ │ │ ├── typed_class_constants_type_error1.phpt
│ │ │ ├── typed_class_constants_type_error10.phpt
│ │ │ ├── typed_class_constants_type_error11.phpt
│ │ │ ├── typed_class_constants_type_error12.phpt
│ │ │ ├── typed_class_constants_type_error2.phpt
│ │ │ ├── typed_class_constants_type_error3.phpt
│ │ │ ├── typed_class_constants_type_error4.phpt
│ │ │ ├── typed_class_constants_type_error5.phpt
│ │ │ ├── typed_class_constants_type_error6.phpt
│ │ │ ├── typed_class_constants_type_error7.phpt
│ │ │ ├── typed_class_constants_type_error8.phpt
│ │ │ ├── typed_class_constants_type_error9.phpt
│ │ │ ├── typed_class_constants_type_success1.phpt
│ │ │ ├── typed_class_constants_type_success2.phpt
│ │ │ ├── typed_class_constants_type_success3.phpt
│ │ │ ├── typed_properties_001.phpt
│ │ │ ├── typed_properties_002.phpt
│ │ │ ├── typed_properties_003.phpt
│ │ │ ├── typed_properties_004.phpt
│ │ │ ├── typed_properties_005.phpt
│ │ │ ├── typed_properties_006.phpt
│ │ │ ├── typed_properties_007.phpt
│ │ │ ├── typed_properties_008.phpt
│ │ │ ├── typed_properties_009.phpt
│ │ │ ├── typed_properties_010.phpt
│ │ │ ├── typed_properties_011.phpt
│ │ │ ├── typed_properties_012.phpt
│ │ │ ├── typed_properties_013.phpt
│ │ │ ├── typed_properties_014.phpt
│ │ │ ├── typed_properties_015.phpt
│ │ │ ├── typed_properties_016.phpt
│ │ │ ├── typed_properties_017.phpt
│ │ │ ├── typed_properties_018.phpt
│ │ │ ├── typed_properties_019.phpt
│ │ │ ├── typed_properties_020.phpt
│ │ │ ├── typed_properties_021.phpt
│ │ │ ├── typed_properties_022.phpt
│ │ │ ├── typed_properties_023.phpt
│ │ │ ├── typed_properties_024.phpt
│ │ │ ├── typed_properties_025.phpt
│ │ │ ├── typed_properties_026.phpt
│ │ │ ├── typed_properties_027.phpt
│ │ │ ├── typed_properties_028.phpt
│ │ │ ├── typed_properties_029.phpt
│ │ │ ├── typed_properties_030.phpt
│ │ │ ├── typed_properties_031.phpt
│ │ │ ├── typed_properties_032.phpt
│ │ │ ├── typed_properties_033.phpt
│ │ │ ├── typed_properties_034.phpt
│ │ │ ├── typed_properties_035.phpt
│ │ │ ├── typed_properties_036.phpt
│ │ │ ├── typed_properties_037.phpt
│ │ │ ├── typed_properties_038.phpt
│ │ │ ├── typed_properties_039.phpt
│ │ │ ├── typed_properties_040.phpt
│ │ │ ├── typed_properties_041.phpt
│ │ │ ├── typed_properties_042.phpt
│ │ │ ├── typed_properties_043.phpt
│ │ │ ├── typed_properties_044.phpt
│ │ │ ├── typed_properties_045.phpt
│ │ │ ├── typed_properties_046.phpt
│ │ │ ├── typed_properties_047.phpt
│ │ │ ├── typed_properties_048.phpt
│ │ │ ├── typed_properties_049.phpt
│ │ │ ├── typed_properties_050.phpt
│ │ │ ├── typed_properties_051.phpt
│ │ │ ├── typed_properties_052.phpt
│ │ │ ├── typed_properties_053.phpt
│ │ │ ├── typed_properties_054.phpt
│ │ │ ├── typed_properties_055.phpt
│ │ │ ├── typed_properties_056.phpt
│ │ │ ├── typed_properties_057.phpt
│ │ │ ├── typed_properties_058.phpt
│ │ │ ├── typed_properties_059.phpt
│ │ │ ├── typed_properties_060.phpt
│ │ │ ├── typed_properties_061.phpt
│ │ │ ├── typed_properties_062.phpt
│ │ │ ├── typed_properties_063.phpt
│ │ │ ├── typed_properties_064.phpt
│ │ │ ├── typed_properties_065.phpt
│ │ │ ├── typed_properties_066.phpt
│ │ │ ├── typed_properties_067.phpt
│ │ │ ├── typed_properties_068.phpt
│ │ │ ├── typed_properties_069.phpt
│ │ │ ├── typed_properties_070.phpt
│ │ │ ├── typed_properties_071.phpt
│ │ │ ├── typed_properties_072.phpt
│ │ │ ├── typed_properties_073.phpt
│ │ │ ├── typed_properties_074.phpt
│ │ │ ├── typed_properties_075.phpt
│ │ │ ├── typed_properties_076.phpt
│ │ │ ├── typed_properties_077.phpt
│ │ │ ├── typed_properties_078.phpt
│ │ │ ├── typed_properties_079.phpt
│ │ │ ├── typed_properties_080.phpt
│ │ │ ├── typed_properties_081.phpt
│ │ │ ├── typed_properties_082.phpt
│ │ │ ├── typed_properties_083.phpt
│ │ │ ├── typed_properties_084.phpt
│ │ │ ├── typed_properties_085.phpt
│ │ │ ├── typed_properties_086.phpt
│ │ │ ├── typed_properties_087.phpt
│ │ │ ├── typed_properties_088.phpt
│ │ │ ├── typed_properties_089.phpt
│ │ │ ├── typed_properties_090.phpt
│ │ │ ├── typed_properties_092.phpt
│ │ │ ├── typed_properties_093.phpt
│ │ │ ├── typed_properties_094.phpt
│ │ │ ├── typed_properties_095.phpt
│ │ │ ├── typed_properties_096.phpt
│ │ │ ├── typed_properties_097.phpt
│ │ │ ├── typed_properties_098.phpt
│ │ │ ├── typed_properties_099.phpt
│ │ │ ├── typed_properties_100.phpt
│ │ │ ├── typed_properties_101.phpt
│ │ │ ├── typed_properties_102.phpt
│ │ │ ├── typed_properties_103.phpt
│ │ │ ├── typed_properties_104.phpt
│ │ │ ├── typed_properties_105.phpt
│ │ │ ├── typed_properties_106.phpt
│ │ │ ├── typed_properties_107.phpt
│ │ │ ├── typed_properties_108.phpt
│ │ │ ├── typed_properties_109.phpt
│ │ │ ├── typed_properties_110.phpt
│ │ │ ├── typed_properties_111.phpt
│ │ │ ├── typed_properties_112.phpt
│ │ │ ├── typed_properties_113.phpt
│ │ │ ├── typed_properties_114.phpt
│ │ │ ├── typed_properties_115.phpt
│ │ │ ├── typed_properties_cache_slot_opt.phpt
│ │ │ ├── typed_properties_class_loading.phpt
│ │ │ ├── typed_properties_failed_assign_is_not_init.phpt
│ │ │ ├── typed_properties_magic_set.phpt
│ │ │ ├── typed_properties_protected_inheritance_mismatch.phpt
│ │ │ ├── typed_properties_reference_coercion_leak.phpt
│ │ │ ├── typed_return_null_false_without_value.phpt
│ │ │ ├── typed_return_null_without_value.phpt
│ │ │ ├── typed_return_without_value.phpt
│ │ │ ├── types_in_ast.phpt
│ │ │ ├── union_types/
│ │ │ │ ├── anonymous_class.phpt
│ │ │ │ ├── generator_return_containing_extra_types.phpt
│ │ │ │ ├── generator_return_multiple_classes.phpt
│ │ │ │ ├── illegal_default_value_argument.phpt
│ │ │ │ ├── illegal_default_value_property.phpt
│ │ │ │ ├── incdec_prop.phpt
│ │ │ │ ├── inheritance.phpt
│ │ │ │ ├── inheritance_internal.phpt
│ │ │ │ ├── internal_trait_use_typed_union.phpt
│ │ │ │ ├── legal_default_values.phpt
│ │ │ │ ├── multiple_classes.phpt
│ │ │ │ ├── never_with_class.phpt
│ │ │ │ ├── null_false_union.phpt
│ │ │ │ ├── prop_ref_assign.phpt
│ │ │ │ ├── redundant_types/
│ │ │ │ │ ├── bool_and_false.phpt
│ │ │ │ │ ├── bool_and_true.phpt
│ │ │ │ │ ├── bool_instead_false_and_true.phpt
│ │ │ │ │ ├── bool_instead_true_and_false.phpt
│ │ │ │ │ ├── duplicate_class_type.phpt
│ │ │ │ │ ├── duplicate_type.phpt
│ │ │ │ │ ├── iterable_and_Traversable.phpt
│ │ │ │ │ ├── iterable_and_Traversable_2.phpt
│ │ │ │ │ ├── iterable_and_array.phpt
│ │ │ │ │ ├── nullable_null.phpt
│ │ │ │ │ ├── object_and_class_type.phpt
│ │ │ │ │ ├── object_and_class_type2.phpt
│ │ │ │ │ ├── object_and_static.phpt
│ │ │ │ │ └── object_and_static2.phpt
│ │ │ │ ├── standalone_false.phpt
│ │ │ │ ├── standalone_null.phpt
│ │ │ │ ├── standalone_nullable_false.phpt
│ │ │ │ ├── type_checking_strict.phpt
│ │ │ │ ├── type_checking_weak.phpt
│ │ │ │ ├── variance/
│ │ │ │ │ ├── invalid_001.phpt
│ │ │ │ │ ├── invalid_002.phpt
│ │ │ │ │ ├── invalid_003.phpt
│ │ │ │ │ ├── invalid_004.phpt
│ │ │ │ │ └── valid.phpt
│ │ │ │ └── void_with_class.phpt
│ │ │ ├── variance/
│ │ │ │ ├── abstract_constructor.phpt
│ │ │ │ ├── class_order_autoload1.phpt
│ │ │ │ ├── class_order_autoload2.phpt
│ │ │ │ ├── class_order_autoload3.phpt
│ │ │ │ ├── class_order_autoload4.phpt
│ │ │ │ ├── class_order_autoload5.phpt
│ │ │ │ ├── class_order_autoload6.phpt
│ │ │ │ ├── class_order_autoload_error1.phpt
│ │ │ │ ├── class_order_autoload_error2.phpt
│ │ │ │ ├── class_order_autoload_error3.phpt
│ │ │ │ ├── class_order_autoload_error4.phpt
│ │ │ │ ├── class_order_autoload_error5.phpt
│ │ │ │ ├── class_order_autoload_error6.phpt
│ │ │ │ ├── class_order_autoload_error7.phpt
│ │ │ │ ├── class_order_autoload_error8.phpt
│ │ │ │ ├── class_order_autoload_error9.phpt
│ │ │ │ ├── class_order_error.phpt
│ │ │ │ ├── enum_forward_compat.phpt
│ │ │ │ ├── infinite_recursion.phpt
│ │ │ │ ├── internal_parent/
│ │ │ │ │ ├── compatible_return_type.phpt
│ │ │ │ │ ├── incompatible_return_type.phpt
│ │ │ │ │ ├── missing_return_type.phpt
│ │ │ │ │ ├── unresolvable_inheritance_check_param.phpt
│ │ │ │ │ └── unresolvable_inheritance_check_return.phpt
│ │ │ │ ├── loading_exception1.phpt
│ │ │ │ ├── loading_exception2.phpt
│ │ │ │ ├── mixed_return_type.phpt
│ │ │ │ ├── object_variance.phpt
│ │ │ │ ├── parent_in_class_failure1.phpt
│ │ │ │ ├── parent_in_class_failure2.phpt
│ │ │ │ ├── parent_in_class_success.phpt
│ │ │ │ ├── property_types_early_bind.phpt
│ │ │ │ ├── return_type_will_change_class_error.phpt
│ │ │ │ ├── return_type_will_change_function_error.phpt
│ │ │ │ ├── return_type_will_change_property_error.phpt
│ │ │ │ ├── static_variance_failure.phpt
│ │ │ │ ├── static_variance_success.phpt
│ │ │ │ ├── stringable.phpt
│ │ │ │ ├── suppressed_incompatible_return_type.phpt
│ │ │ │ ├── trait_error.phpt
│ │ │ │ ├── trait_success.phpt
│ │ │ │ ├── unlinked_parent_1.phpt
│ │ │ │ └── unlinked_parent_2.phpt
│ │ │ ├── weak_call_strict.phpt
│ │ │ ├── weak_call_strict_2.inc
│ │ │ ├── weak_explicit_call_strict.phpt
│ │ │ ├── weak_include_strict.phpt
│ │ │ └── weak_include_strict_2.inc
│ │ ├── typehints/
│ │ │ ├── bug76198.phpt
│ │ │ ├── fq_nullable.phpt
│ │ │ ├── fully_qualified_scalar.phpt
│ │ │ ├── namespace_relative_scalar.phpt
│ │ │ └── or_null.phpt
│ │ ├── unary_minus_const_expr_consistency.phpt
│ │ ├── uncaught_exception_error_supression.phpt
│ │ ├── undef_index_to_exception.phpt
│ │ ├── undef_var_in_verify_return.phpt
│ │ ├── unexpected_ref_bug.phpt
│ │ ├── unpack_iterator_by_ref_type_check.phpt
│ │ ├── unreachable_phi_cycle.phpt
│ │ ├── unset.inc
│ │ ├── unset_cast_removed.phpt
│ │ ├── unset_cv01.phpt
│ │ ├── unset_cv02.phpt
│ │ ├── unset_cv03.phpt
│ │ ├── unset_cv04.phpt
│ │ ├── unset_cv05.phpt
│ │ ├── unset_cv06.phpt
│ │ ├── unset_cv08.phpt
│ │ ├── unset_cv10.phpt
│ │ ├── unset_cv11.phpt
│ │ ├── unset_cv12.phpt
│ │ ├── unset_non_array.phpt
│ │ ├── unset_prop_recursion.phpt
│ │ ├── unterminated_comment.phpt
│ │ ├── unused_shared_static_variables.phpt
│ │ ├── update_consts_shadowed_private_prop.phpt
│ │ ├── use_const/
│ │ │ ├── alias.phpt
│ │ │ ├── basic.phpt
│ │ │ ├── case_sensivity.phpt
│ │ │ ├── conflicting_use.phpt
│ │ │ ├── conflicting_use_alias.phpt
│ │ │ ├── define_imported.phpt
│ │ │ ├── define_imported_before.phpt
│ │ │ ├── includes/
│ │ │ │ ├── foo_bar.inc
│ │ │ │ ├── foo_php_version.inc
│ │ │ │ ├── global_bar.inc
│ │ │ │ └── global_baz.inc
│ │ │ ├── no_global_fallback.phpt
│ │ │ ├── self_parent.phpt
│ │ │ ├── shadow_core.phpt
│ │ │ └── shadow_global.phpt
│ │ ├── use_function/
│ │ │ ├── alias.phpt
│ │ │ ├── basic.phpt
│ │ │ ├── case_insensivity.phpt
│ │ │ ├── conditional_function_declaration.phpt
│ │ │ ├── conflicting_use.phpt
│ │ │ ├── conflicting_use_alias.phpt
│ │ │ ├── conflicting_use_const_alias.phpt
│ │ │ ├── define_imported.phpt
│ │ │ ├── define_imported_before.phpt
│ │ │ ├── ignore_constants.phpt
│ │ │ ├── includes/
│ │ │ │ ├── foo_bar.inc
│ │ │ │ ├── foo_strlen.inc
│ │ │ │ ├── global_bar.inc
│ │ │ │ └── global_baz.inc
│ │ │ ├── no_conflict_with_classes.phpt
│ │ │ ├── no_global_fallback.phpt
│ │ │ ├── no_global_fallback2.phpt
│ │ │ ├── ns_end_resets_seen_symbols_1.phpt
│ │ │ ├── ns_end_resets_seen_symbols_2.phpt
│ │ │ ├── self_parent.phpt
│ │ │ ├── shadow_core.phpt
│ │ │ └── shadow_global.phpt
│ │ ├── use_late_binding_conflict.phpt
│ │ ├── use_no_eval_conflict.phpt
│ │ ├── use_no_file_conflict.phpt
│ │ ├── use_no_file_conflict_1.inc
│ │ ├── use_no_file_conflict_2.inc
│ │ ├── use_unlinked_class.phpt
│ │ ├── varSyntax/
│ │ │ ├── class_constant_static_deref.phpt
│ │ │ ├── constClassMemberAccess.phpt
│ │ │ ├── constant_object_deref.phpt
│ │ │ ├── encapsed_string_deref.phpt
│ │ │ ├── globalNonSimpleVariableError.phpt
│ │ │ ├── indirectFcall.phpt
│ │ │ ├── issetOnTemp.phpt
│ │ │ ├── magic_const_deref.phpt
│ │ │ ├── method_call_on_string_literal.phpt
│ │ │ ├── newVariable.phpt
│ │ │ ├── new_instanceof_expr.phpt
│ │ │ ├── parenthesesDeref.phpt
│ │ │ ├── propertyOfStringError.phpt
│ │ │ ├── staticMember.phpt
│ │ │ ├── static_prop_on_expr_class.phpt
│ │ │ ├── static_prop_on_expr_class_with_backslash.phpt
│ │ │ ├── static_prop_on_int_expr_class.phpt
│ │ │ ├── tempDimFetchByRefError.phpt
│ │ │ ├── tempPropFetchByRefError.phpt
│ │ │ └── writeToTempExpr.phpt
│ │ ├── variable_with_boolean_name.phpt
│ │ ├── variable_with_integer_name.phpt
│ │ ├── variadic/
│ │ │ ├── adding_additional_optional_parameter.phpt
│ │ │ ├── adding_additional_optional_parameter_error.phpt
│ │ │ ├── basic.phpt
│ │ │ ├── by_ref.phpt
│ │ │ ├── by_ref_error.phpt
│ │ │ ├── closure_invoke.phpt
│ │ │ ├── illegal_variadic_override_ref.phpt
│ │ │ ├── illegal_variadic_override_type.phpt
│ │ │ ├── legal_variadic_override.phpt
│ │ │ ├── no_default_error.phpt
│ │ │ ├── non_variadic_implements_variadic_error.phpt
│ │ │ ├── only_last_error.phpt
│ │ │ ├── optional_params.phpt
│ │ │ ├── removing_parameter_error.phpt
│ │ │ ├── typehint_error.phpt
│ │ │ ├── typehint_suppressed_error.phpt
│ │ │ ├── variadic_changed_byref_error.phpt
│ │ │ ├── variadic_changed_typehint_error.phpt
│ │ │ └── variadic_implements_non_variadic.phpt
│ │ ├── varvars_by_ref.phpt
│ │ ├── vm_stack_with_arg_extend.phpt
│ │ ├── warning_during_heredoc_scan_ahead.phpt
│ │ ├── weakrefs/
│ │ │ ├── gh10043-001.phpt
│ │ │ ├── gh10043-002.phpt
│ │ │ ├── gh10043-003.phpt
│ │ │ ├── gh10043-004.phpt
│ │ │ ├── gh10043-005.phpt
│ │ │ ├── gh10043-006.phpt
│ │ │ ├── gh10043-007.phpt
│ │ │ ├── gh10043-008.phpt
│ │ │ ├── gh10043-009.phpt
│ │ │ ├── gh10043-010.phpt
│ │ │ ├── gh10043-011.phpt
│ │ │ ├── gh10043-012.phpt
│ │ │ ├── gh10043-014.phpt
│ │ │ ├── gh10043-015.phpt
│ │ │ ├── gh10043-016.phpt
│ │ │ ├── gh13612.phpt
│ │ │ ├── notify.phpt
│ │ │ ├── weakmap_basic_map_behavior.phpt
│ │ │ ├── weakmap_dtor_exception.phpt
│ │ │ ├── weakmap_error_conditions.phpt
│ │ │ ├── weakmap_iteration.phpt
│ │ │ ├── weakmap_multiple_weakrefs.phpt
│ │ │ ├── weakmap_nested.phpt
│ │ │ ├── weakmap_object_reference.phpt
│ │ │ ├── weakmap_weakness.phpt
│ │ │ ├── weakrefs_001.phpt
│ │ │ ├── weakrefs_002.phpt
│ │ │ ├── weakrefs_003.phpt
│ │ │ ├── weakrefs_004.phpt
│ │ │ ├── weakrefs_005.phpt
│ │ │ ├── weakrefs_006.phpt
│ │ │ └── weakrefs_debug_dump.phpt
│ │ ├── write_property_ref_overwrite_return.phpt
│ │ ├── xor_001.phpt
│ │ ├── xor_002.phpt
│ │ ├── xor_003.phpt
│ │ ├── zend_ini/
│ │ │ ├── gh11876.phpt
│ │ │ ├── gh16886.phpt
│ │ │ ├── gh16892.phpt
│ │ │ ├── oss_fuzz_428983568.phpt
│ │ │ ├── zend_ini_parse_quantity.phpt
│ │ │ ├── zend_ini_parse_quantity_binary_prefixes.phpt
│ │ │ ├── zend_ini_parse_quantity_error.phpt
│ │ │ ├── zend_ini_parse_quantity_hex_prefixes.phpt
│ │ │ ├── zend_ini_parse_quantity_ini_set_error.phpt
│ │ │ ├── zend_ini_parse_quantity_ini_setting_error.phpt
│ │ │ ├── zend_ini_parse_quantity_octal_prefixes.phpt
│ │ │ ├── zend_ini_parse_quantity_overflow.phpt
│ │ │ ├── zend_ini_parse_quantity_zero.phpt
│ │ │ └── zend_ini_parse_uquantity_overflow.phpt
│ │ ├── zend_operators.phpt
│ │ ├── zend_signed_multiply-32bit.phpt
│ │ ├── zend_signed_multiply-64bit-2.phpt
│ │ ├── zend_signed_multiply-64bit.phpt
│ │ └── zend_strtod.phpt
│ ├── zend.c
│ ├── zend.h
│ ├── zend_API.c
│ ├── zend_API.h
│ ├── zend_alloc.c
│ ├── zend_alloc.h
│ ├── zend_alloc_sizes.h
│ ├── zend_arena.h
│ ├── zend_ast.c
│ ├── zend_ast.h
│ ├── zend_atomic.c
│ ├── zend_atomic.h
│ ├── zend_attributes.c
│ ├── zend_attributes.h
│ ├── zend_attributes.stub.php
│ ├── zend_attributes_arginfo.h
│ ├── zend_bitset.h
│ ├── zend_build.h
│ ├── zend_builtin_functions.c
│ ├── zend_builtin_functions.h
│ ├── zend_builtin_functions.stub.php
│ ├── zend_builtin_functions_arginfo.h
│ ├── zend_call_stack.c
│ ├── zend_call_stack.h
│ ├── zend_closures.c
│ ├── zend_closures.h
│ ├── zend_closures.stub.php
│ ├── zend_closures_arginfo.h
│ ├── zend_compile.c
│ ├── zend_compile.h
│ ├── zend_config.w32.h
│ ├── zend_constants.c
│ ├── zend_constants.h
│ ├── zend_constants.stub.php
│ ├── zend_constants_arginfo.h
│ ├── zend_cpuinfo.c
│ ├── zend_cpuinfo.h
│ ├── zend_default_classes.c
│ ├── zend_dtrace.c
│ ├── zend_dtrace.d
│ ├── zend_dtrace.h
│ ├── zend_enum.c
│ ├── zend_enum.h
│ ├── zend_enum.stub.php
│ ├── zend_enum_arginfo.h
│ ├── zend_errors.h
│ ├── zend_exceptions.c
│ ├── zend_exceptions.h
│ ├── zend_exceptions.stub.php
│ ├── zend_exceptions_arginfo.h
│ ├── zend_execute.c
│ ├── zend_execute.h
│ ├── zend_execute_API.c
│ ├── zend_extensions.c
│ ├── zend_extensions.h
│ ├── zend_fibers.c
│ ├── zend_fibers.h
│ ├── zend_fibers.stub.php
│ ├── zend_fibers_arginfo.h
│ ├── zend_float.c
│ ├── zend_float.h
│ ├── zend_frameless_function.c
│ ├── zend_frameless_function.h
│ ├── zend_gc.c
│ ├── zend_gc.h
│ ├── zend_gdb.c
│ ├── zend_gdb.h
│ ├── zend_generators.c
│ ├── zend_generators.h
│ ├── zend_generators.stub.php
│ ├── zend_generators_arginfo.h
│ ├── zend_globals.h
│ ├── zend_globals_macros.h
│ ├── zend_hash.c
│ ├── zend_hash.h
│ ├── zend_highlight.c
│ ├── zend_highlight.h
│ ├── zend_hrtime.c
│ ├── zend_hrtime.h
│ ├── zend_inheritance.c
│ ├── zend_inheritance.h
│ ├── zend_ini.c
│ ├── zend_ini.h
│ ├── zend_ini_parser.y
│ ├── zend_ini_scanner.h
│ ├── zend_ini_scanner.l
│ ├── zend_interfaces.c
│ ├── zend_interfaces.h
│ ├── zend_interfaces.stub.php
│ ├── zend_interfaces_arginfo.h
│ ├── zend_istdiostream.h
│ ├── zend_iterators.c
│ ├── zend_iterators.h
│ ├── zend_language_parser.y
│ ├── zend_language_scanner.h
│ ├── zend_language_scanner.l
│ ├── zend_lazy_objects.c
│ ├── zend_lazy_objects.h
│ ├── zend_list.c
│ ├── zend_list.h
│ ├── zend_llist.c
│ ├── zend_llist.h
│ ├── zend_long.h
│ ├── zend_map_ptr.h
│ ├── zend_max_execution_timer.c
│ ├── zend_max_execution_timer.h
│ ├── zend_mmap.h
│ ├── zend_modules.h
│ ├── zend_multibyte.c
│ ├── zend_multibyte.h
│ ├── zend_multiply.h
│ ├── zend_object_handlers.c
│ ├── zend_object_handlers.h
│ ├── zend_objects.c
│ ├── zend_objects.h
│ ├── zend_objects_API.c
│ ├── zend_objects_API.h
│ ├── zend_observer.c
│ ├── zend_observer.h
│ ├── zend_opcode.c
│ ├── zend_operators.c
│ ├── zend_operators.h
│ ├── zend_portability.h
│ ├── zend_property_hooks.c
│ ├── zend_property_hooks.h
│ ├── zend_ptr_stack.c
│ ├── zend_ptr_stack.h
│ ├── zend_range_check.h
│ ├── zend_signal.c
│ ├── zend_signal.h
│ ├── zend_smart_str.c
│ ├── zend_smart_str.h
│ ├── zend_smart_str_public.h
│ ├── zend_smart_string.h
│ ├── zend_smart_string_public.h
│ ├── zend_sort.c
│ ├── zend_sort.h
│ ├── zend_stack.c
│ ├── zend_stack.h
│ ├── zend_stream.c
│ ├── zend_stream.h
│ ├── zend_string.c
│ ├── zend_string.h
│ ├── zend_strtod.c
│ ├── zend_strtod.h
│ ├── zend_strtod_int.h
│ ├── zend_system_id.c
│ ├── zend_system_id.h
│ ├── zend_type_info.h
│ ├── zend_types.h
│ ├── zend_variables.c
│ ├── zend_variables.h
│ ├── zend_verify_type_inference.h
│ ├── zend_virtual_cwd.c
│ ├── zend_virtual_cwd.h
│ ├── zend_vm.h
│ ├── zend_vm_def.h
│ ├── zend_vm_execute.h
│ ├── zend_vm_execute.skl
│ ├── zend_vm_gen.php
│ ├── zend_vm_handlers.h
│ ├── zend_vm_opcodes.c
│ ├── zend_vm_opcodes.h
│ ├── zend_vm_trace_handlers.h
│ ├── zend_vm_trace_lines.h
│ ├── zend_vm_trace_map.h
│ ├── zend_weakrefs.c
│ ├── zend_weakrefs.h
│ ├── zend_weakrefs.stub.php
│ └── zend_weakrefs_arginfo.h
├── build/
│ ├── Makefile.gcov
│ ├── Makefile.global
│ ├── ax_check_compile_flag.m4
│ ├── ax_func_which_gethostbyname_r.m4
│ ├── ax_gcc_func_attribute.m4
│ ├── config-stubs
│ ├── config.guess
│ ├── config.sub
│ ├── gen_stub.php
│ ├── genif.sh
│ ├── libtool.m4
│ ├── ltmain.sh
│ ├── order_by_dep.awk
│ ├── php.m4
│ ├── php_cxx_compile_stdcxx.m4
│ ├── pkg.m4
│ ├── print_include.awk
│ └── shtool
├── build-release-example.sh
├── buildconf
├── composer.json
├── configure.ac
├── diff.php
├── docs/
│ ├── ChangeLog.md
│ ├── Cygwin.md
│ ├── FAQ.md
│ ├── diff.md
│ ├── extensions.md
│ ├── linux.md
│ ├── macOS.md
│ ├── options.md
│ ├── tags.md
│ ├── upgrade.md
│ └── wsl.md
├── ext/
│ ├── bcmath/
│ │ ├── CREDITS
│ │ ├── bcmath.c
│ │ ├── bcmath.stub.php
│ │ ├── bcmath_arginfo.h
│ │ ├── config.m4
│ │ ├── config.w32
│ │ ├── libbcmath/
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ └── src/
│ │ │ ├── add.c
│ │ │ ├── bcmath.h
│ │ │ ├── compare.c
│ │ │ ├── config.h
│ │ │ ├── convert.c
│ │ │ ├── convert.h
│ │ │ ├── div.c
│ │ │ ├── divmod.c
│ │ │ ├── doaddsub.c
│ │ │ ├── floor_or_ceil.c
│ │ │ ├── init.c
│ │ │ ├── int2num.c
│ │ │ ├── long2num.c
│ │ │ ├── nearzero.c
│ │ │ ├── neg.c
│ │ │ ├── num2long.c
│ │ │ ├── num2str.c
│ │ │ ├── private.h
│ │ │ ├── raise.c
│ │ │ ├── raisemod.c
│ │ │ ├── recmul.c
│ │ │ ├── rmzero.c
│ │ │ ├── round.c
│ │ │ ├── sqrt.c
│ │ │ ├── str2num.c
│ │ │ ├── sub.c
│ │ │ └── zero.c
│ │ ├── php_bcmath.h
│ │ └── tests/
│ │ ├── bcadd.phpt
│ │ ├── bcadd_error.phpt
│ │ ├── bcadd_large_numbers.phpt
│ │ ├── bcadd_zero.phpt
│ │ ├── bcceil.phpt
│ │ ├── bcceil_error.phpt
│ │ ├── bccomp.phpt
│ │ ├── bccomp_error.phpt
│ │ ├── bccomp_variation001.phpt
│ │ ├── bccomp_variation002.phpt
│ │ ├── bcdiv.phpt
│ │ ├── bcdiv_by_one.phpt
│ │ ├── bcdiv_by_pow_10.phpt
│ │ ├── bcdiv_error1.phpt
│ │ ├── bcdiv_error2.phpt
│ │ ├── bcdiv_large_numbers.phpt
│ │ ├── bcdiv_zero.phpt
│ │ ├── bcdivmod.phpt
│ │ ├── bcdivmod_by_zero.phpt
│ │ ├── bcfloor.phpt
│ │ ├── bcfloor_error.phpt
│ │ ├── bcmod.phpt
│ │ ├── bcmod_error2.phpt
│ │ ├── bcmod_error3.phpt
│ │ ├── bcmod_large_numbers.phpt
│ │ ├── bcmod_zero.phpt
│ │ ├── bcmul.phpt
│ │ ├── bcmul_check_overflow.phpt
│ │ ├── bcmul_error.phpt
│ │ ├── bcmul_large_numbers.phpt
│ │ ├── bcmul_zero.phpt
│ │ ├── bcpow.phpt
│ │ ├── bcpow_div_by_zero.phpt
│ │ ├── bcpow_error1.phpt
│ │ ├── bcpow_error2.phpt
│ │ ├── bcpow_error3.phpt
│ │ ├── bcpow_large_numbers.phpt
│ │ ├── bcpow_zero.phpt
│ │ ├── bcpowmod.phpt
│ │ ├── bcpowmod_error.phpt
│ │ ├── bcpowmod_negative_exponent.phpt
│ │ ├── bcpowmod_with_mod_1.phpt
│ │ ├── bcpowmod_zero_modulus.phpt
│ │ ├── bcround_all.phpt
│ │ ├── bcround_away_from_zero.phpt
│ │ ├── bcround_ceiling.phpt
│ │ ├── bcround_early_return.phpt
│ │ ├── bcround_error.phpt
│ │ ├── bcround_floor.phpt
│ │ ├── bcround_half_down.phpt
│ │ ├── bcround_half_even.phpt
│ │ ├── bcround_half_odd.phpt
│ │ ├── bcround_half_up.phpt
│ │ ├── bcround_test_helper.inc
│ │ ├── bcround_toward_zero.phpt
│ │ ├── bcscale.phpt
│ │ ├── bcscale_variation001.phpt
│ │ ├── bcscale_variation002.phpt
│ │ ├── bcscale_variation003.phpt
│ │ ├── bcsqrt.phpt
│ │ ├── bcsqrt_error1.phpt
│ │ ├── bcsqrt_error2.phpt
│ │ ├── bcsub.phpt
│ │ ├── bcsub_error.phpt
│ │ ├── bcsub_large_numbers.phpt
│ │ ├── bcsub_zero.phpt
│ │ ├── bug44995.phpt
│ │ ├── bug46781.phpt
│ │ ├── bug54598.phpt
│ │ ├── bug60377.phpt
│ │ ├── bug66364.phpt
│ │ ├── bug72093.phpt
│ │ ├── bug75178.phpt
│ │ ├── bug78238.phpt
│ │ ├── bug78878.phpt
│ │ ├── bug80545.phpt
│ │ ├── gh15968.phpt
│ │ ├── gh16262.phpt
│ │ ├── gh16265.phpt
│ │ ├── gh16978.phpt
│ │ ├── gh17275.phpt
│ │ ├── gh17398.phpt
│ │ ├── negative_scale.phpt
│ │ ├── number/
│ │ │ ├── cast.phpt
│ │ │ ├── cast_warning.phpt
│ │ │ ├── class_extends_error.phpt
│ │ │ ├── clone.phpt
│ │ │ ├── construct_32bit.phpt
│ │ │ ├── construct_64bit.phpt
│ │ │ ├── construct_error.phpt
│ │ │ ├── construct_float.phpt
│ │ │ ├── gh18641.phpt
│ │ │ ├── methods/
│ │ │ │ ├── add.phpt
│ │ │ │ ├── add_with_scale.phpt
│ │ │ │ ├── calc_methods_num_arg_error.phpt
│ │ │ │ ├── calc_methods_scale_arg_error.phpt
│ │ │ │ ├── ceil.phpt
│ │ │ │ ├── compare.phpt
│ │ │ │ ├── compare_arg_error.phpt
│ │ │ │ ├── compare_near_zero.phpt
│ │ │ │ ├── compare_with_scale.phpt
│ │ │ │ ├── div.phpt
│ │ │ │ ├── div_mod_by_zero.phpt
│ │ │ │ ├── div_with_scale.phpt
│ │ │ │ ├── divmod.phpt
│ │ │ │ ├── divmod_with_scale.phpt
│ │ │ │ ├── floor.phpt
│ │ │ │ ├── mod.phpt
│ │ │ │ ├── mod_with_scale.phpt
│ │ │ │ ├── mul.phpt
│ │ │ │ ├── mul_with_scale.phpt
│ │ │
================================================
FILE CONTENTS
================================================
================================================
FILE: .clang-format
================================================
---
Language: Cpp
# BasedOnStyle: Google
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Right
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: Empty
AllowShortIfStatementsOnASingleLine: true
AllowShortLoopsOnASingleLine: true
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: true
BinPackArguments: false
BinPackParameters: false
BraceWrapping:
AfterClass: false
AfterControlStatement: false
AfterEnum: false
AfterFunction: false
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
AfterExternBlock: false
BeforeCatch: false
BeforeElse: false
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Attach
BreakBeforeInheritanceComma: false
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeColon
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 120
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '^<ext/.*\.h>'
Priority: 2
- Regex: '^<.*\.h>'
Priority: 1
- Regex: '^<.*'
Priority: 2
- Regex: '.*'
Priority: 3
IncludeIsMainRegex: '([-_](test|unittest))?$'
IndentCaseLabels: false
IndentPPDirectives: None
IndentWidth: 4
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: false
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: false
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 1
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 200
PointerAlignment: Right
ReflowComments: true
SortIncludes: false
SortUsingDeclarations: true
SpaceAfterCStyleCast: true
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: ControlStatements
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 2
SpacesInAngles: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Auto
TabWidth: 8
UseTab: Never
================================================
FILE: .dockerignore
================================================
thirdparty
var
================================================
FILE: .editorconfig
================================================
# https://editorconfig.org/
root = true
[*]
trim_trailing_whitespace = true
insert_final_newline = true
end_of_line = lf
charset = utf-8
tab_width = 4
[{*.{awk,bat,c,cpp,d,h,l,re,skl,w32,y},Makefile*}]
indent_size = 4
indent_style = tab
[*.{dtd,html,inc,php,phpt,rng,wsdl,xml,xsd,xsl}]
indent_size = 4
indent_style = space
[*.{ac,m4,sh,yml}]
indent_size = 2
indent_style = space
[*.md]
indent_style = space
max_line_length = 120
[COMMIT_EDITMSG]
indent_size = 4
indent_style = space
max_line_length = 80
[*.patch]
trim_trailing_whitespace = false
================================================
FILE: .gdbinit
================================================
define set_ts
set $tsrm_ls = $arg0
end
document set_ts
set the ts resource, it is impossible for gdb to
call ts_resource_ex while no process is running,
but we could get the resource from the argument
of frame info.
end
define ____executor_globals
if basic_functions_module.zts
set $tsrm_ls = _tsrm_ls_cache
set $eg = ((zend_executor_globals*) (*((void ***) $tsrm_ls))[executor_globals_id-1])
set $cg = ((zend_compiler_globals*) (*((void ***) $tsrm_ls))[compiler_globals_id-1])
set $eg_ptr = $eg
else
set $eg = executor_globals
set $cg = compiler_globals
set $eg_ptr = (zend_executor_globals*) &executor_globals
end
end
document ____executor_globals
portable way of accessing executor_globals, set $eg
this also sets compiler_globals to $cg
ZTS detection is automatically based on ext/standard module struct
end
define print_cvs
if $argc == 0
____executor_globals
set $cv_ex_ptr = $eg.current_execute_data
else
set $cv_ex_ptr = (zend_execute_data *)$arg0
end
set $cv_count = $cv_ex_ptr.func.op_array.last_var
set $cv = $cv_ex_ptr.func.op_array.vars
set $cv_idx = 0
set $callFrameSize = (sizeof(zend_execute_data) + sizeof(zval) - 1) / sizeof(zval)
printf "Compiled variables count: %d\n\n", $cv_count
while $cv_idx < $cv_count
printf "[%d] '$%s'\n", $cv_idx, $cv[$cv_idx].val@$cv[$cv_idx].len
set $zvalue = ((zval *) $cv_ex_ptr) + $callFrameSize + $cv_idx
printzv $zvalue
set $cv_idx = $cv_idx + 1
end
end
document print_cvs
Prints the compiled variables and their values.
If a zend_execute_data pointer is set this will print the compiled
variables of that scope. If no parameter is used it will use
current_execute_data for scope.
usage: print_cvs [zend_execute_data *]
end
define dump_bt
set $ex = $arg0
while $ex
printf "[%p] ", $ex
set $func = $ex->func
if $func
if $ex->This->value.obj
if $func->common.scope
printf "%s->", (char*)$func->common.scope->name->val
else
printf "%s->", (char*)$ex->This->value.obj->ce.name->val
end
else
if $func->common.scope
printf "%s::", (char*)$func->common.scope->name->val
end
end
if $func->common.function_name
printf "%s(", (char*)$func->common.function_name->val
else
printf "(main"
end
set $callFrameSize = (sizeof(zend_execute_data) + sizeof(zval) - 1) / sizeof(zval)
set $count = $ex->This.u2.num_args
set $arg = 0
while $arg < $count
if $arg > 0
printf ", "
end
set $zvalue = (zval *) $ex + $callFrameSize + $arg
set $type = $zvalue->u1.v.type
if $type == 1
printf "NULL"
end
if $type == 2
printf "false"
end
if $type == 3
printf "true"
end
if $type == 4
printf "%ld", $zvalue->value.lval
end
if $type == 5
printf "%f", $zvalue->value.dval
end
if $type == 6
____print_str (char*)$zvalue->value.str->val $zvalue->value.str->len
end
if $type == 7
printf "array(%d)[%p]", $zvalue->value.arr->nNumOfElements, $zvalue
end
if $type == 8
printf "object[%p]", $zvalue
end
if $type == 9
printf "resource(#%d)", $zvalue->value.lval
end
if $type == 10
printf "reference"
end
if $type > 10
printf "unknown type %d", $type
end
set $arg = $arg + 1
end
printf ") "
else
printf "??? "
end
if $func != 0
if $func->type == 2
printf "%s:%d ", (char*)$func->op_array.filename->val, $ex->opline->lineno
else
printf "[internal function]"
end
end
set $ex = $ex->prev_execute_data
printf "\n"
end
end
document dump_bt
dumps the current execution stack. usage: dump_bt executor_globals.current_execute_data
end
define printzv
set $ind = 1
____printzv $arg0 0
end
document printzv
prints zval contents
end
define ____printzv_contents
set $zvalue = $arg0
set $type = $zvalue->u1.v.type
# 15 == IS_INDIRECT
if $type > 5 && $type < 12
printf "(refcount=%d) ", $zvalue->value.counted->gc.refcount
end
if $type == 0
printf "UNDEF"
end
if $type == 1
printf "NULL"
end
if $type == 2
printf "bool: false"
end
if $type == 3
printf "bool: true"
end
if $type == 4
printf "long: %ld", $zvalue->value.lval
end
if $type == 5
printf "double: %f", $zvalue->value.dval
end
if $type == 6
printf "string: %s", (char*)$zvalue->value.str->val
end
if $type == 7
printf "array: "
if ! $arg1
set $ind = $ind + 1
____print_ht $zvalue->value.arr 1
set $ind = $ind - 1
set $i = $ind
while $i > 0
printf " "
set $i = $i - 1
end
end
set $type = 0
end
if $type == 8
printf "object"
____executor_globals
set $handle = $zvalue->value.obj.handle
set $handlers = $zvalue->value.obj.handlers
set $zobj = $zvalue->value.obj
set $cname = (char*)$zobj->ce->name->val
printf "(%s) #%d", $cname, $handle
if ! $arg1
if $handlers->get_properties == &zend_std_get_properties
if $zobj->properties
printf "\nProperties "
set $ht = $zobj->properties
set $ind = $ind + 1
____print_ht $ht 1
set $ind = $ind - 1
set $i = $ind
while $i > 0
printf " "
set $i = $i - 1
end
else
printf " {\n"
set $ht = &$zobj->ce->properties_info
set $k = 0
set $num = $ht->nNumUsed
while $k < $num
set $p = (Bucket*)($ht->arData + $k)
set $name = $p->key
set $prop = (zend_property_info*)$p->val.value.ptr
set $val = (zval*)((char*)$zobj + $prop->offset)
printf "%s => ", (char*)$name->val
printzv $val
set $k = $k + 1
end
end
end
end
set $type = 0
end
if $type == 9
printf "resource: #%d", $zvalue->value.res->handle
end
if $type == 10
printf "reference: "
____printzv &$zvalue->value.ref->val $arg1
end
if $type == 11
printf "CONSTANT_AST"
end
if $type == 12
printf "indirect: "
____printzv $zvalue->value.zv $arg1
end
if $type == 13
printf "pointer: %p", $zvalue->value.ptr
end
if $type == 15
printf "_ERROR"
end
if $type == 16
printf "_BOOL"
end
if $type == 17
printf "_NUMBER"
end
if $type > 17
printf "unknown type %d", $type
end
printf "\n"
end
define ____printzv
____executor_globals
set $zvalue = $arg0
printf "[%p] ", $zvalue
set $zcontents = (zval*) $zvalue
if $arg1
____printzv_contents $zcontents $arg1
else
____printzv_contents $zcontents 0
end
end
define print_global_vars
____executor_globals
set $symtable = ((HashTable *)&($eg_ptr->symbol_table))
print_ht $symtable
end
document print_global_vars
Prints the global variables
end
define print_const_table
set $ind = 1
printf "[%p] {\n", $arg0
____print_ht $arg0 4
printf "}\n"
end
document print_const_table
Dumps elements of Constants HashTable
Example: print_const_table executor_globals.zend_constants
end
define ____print_ht
set $ht = (HashTable*)$arg0
set $n = $ind
while $n > 0
printf " "
set $n = $n - 1
end
set $packed = $ht->u.v.flags & 4
if $packed
printf "Packed"
else
printf "Hash"
end
printf "(%d)[%p]: {\n", $ht->nNumOfElements, $ht
set $num = $ht->nNumUsed
set $i = 0
set $ind = $ind + 1
while $i < $num
if $packed
set $val = (zval*)($ht->arPacked + $i)
set $key = (zend_string*)0
set $h = $i
else
set $bucket = (Bucket*)($ht->arData + $i)
set $val = &$bucket->val
set $key = $bucket->key
set $h = $bucket->h
end
set $n = $ind
if $val->u1.v.type > 0
while $n > 0
printf " "
set $n = $n - 1
end
printf "[%d] ", $i
if $key
____print_str (char*)$key->val $key->len
printf " => "
else
printf "%d => ", $h
end
if $arg1 == 0
printf "%p\n", $val
end
if $arg1 == 1
set $zval = $val
____printzv $zval 1
end
if $arg1 == 2
printf "%s\n", (char*)$val->value.ptr
end
if $arg1 == 3
set $func = (zend_function*)$val->value.ptr
printf "\"%s\"\n", (char*)$func->common.function_name->val
end
if $arg1 == 4
set $const = (zend_constant *)$val->value.ptr
____printzv $const 1
end
end
set $i = $i + 1
end
set $ind = $ind - 1
printf "}\n"
end
define print_ht
set $ind = 0
____print_ht $arg0 1
end
document print_ht
dumps elements of HashTable made of zval
end
define print_htptr
set $ind = 0
____print_ht $arg0 0
end
document print_htptr
dumps elements of HashTable made of pointers
end
define print_htstr
set $ind = 0
____print_ht $arg0 2
end
document print_htstr
dumps elements of HashTable made of strings
end
define print_ft
set $ind = 0
____print_ht $arg0 3
end
document print_ft
dumps a function table (HashTable)
end
define ____print_inh_class
set $ce = $arg0
if $ce->ce_flags & 0x10 || $ce->ce_flags & 0x20
printf "abstract "
else
if $ce->ce_flags & 0x40
printf "final "
end
end
printf "class %s", (char*)$ce->name->val
if $ce->parent != 0
printf " extends %s", (char*)$ce->parent->name->val
end
if $ce->num_interfaces != 0
printf " implements"
set $tmp = 0
while $tmp < $ce->num_interfaces
printf " %s", (char*)$ce->interfaces[$tmp]->name->val
set $tmp = $tmp + 1
if $tmp < $ce->num_interfaces
printf ","
end
end
end
set $ce = $ce->parent
end
define ____print_inh_iface
set $ce = $arg0
printf "interface %s", (char*)$ce->name->val
if $ce->num_interfaces != 0
set $ce = $ce->interfaces[0]
printf " extends %s", (char*)$ce->name->val
else
set $ce = 0
end
end
define print_inh
set $ce = $arg0
set $depth = 0
while $ce != 0
set $tmp = $depth
while $tmp != 0
printf " "
set $tmp = $tmp - 1
end
set $depth = $depth + 1
if $ce->ce_flags & 0x80
____print_inh_iface $ce
else
____print_inh_class $ce
end
printf " {\n"
end
while $depth != 0
set $tmp = $depth
while $tmp != 1
printf " "
set $tmp = $tmp - 1
end
printf "}\n"
set $depth = $depth - 1
end
end
define print_pi
set $pi = (zend_property_info *)$arg0
set $initial_offset = ((uint32_t)(uintptr_t)(&((zend_object*)0)->properties_table[(0)]))
set $ptr_to_val = (zval*)((char*)$pi->ce->default_properties_table + $pi->offset - $initial_offset)
printf "[%p] {\n", $pi
printf " offset = %p\n", $pi->offset
printf " ce = [%p] %s\n", $pi->ce, (char*)$pi->ce->name->val
printf " flags = 0x%x (", $pi->flags
if $pi->flags & 0x100
printf "ZEND_ACC_PUBLIC"
else
if $pi->flags & 0x200
printf "ZEND_ACC_PROTECTED"
else
if $pi->flags & 0x400
printf "ZEND_ACC_PRIVATE"
else
if $pi->flags & 0x800
printf "ZEND_ACC_EARLY_BINDING"
else
if $pi->flags & 0x20000
printf "ZEND_ACC_SHADOW"
end
end
end
end
end
printf ")\n"
printf " name = "
print_zstr $pi->name
printf " default value: "
printzv $ptr_to_val
printf "}\n"
end
document print_pi
Takes a pointer to an object's property and prints the property information
usage: print_pi <ptr>
end
define ____print_str
set $tmp = 0
set $str = $arg0
if $argc > 2
set $maxlen = $arg2
else
set $maxlen = 256
end
printf "\""
while $tmp < $arg1 && $tmp < $maxlen
if $str[$tmp] > 31 && $str[$tmp] < 127
printf "%c", $str[$tmp]
else
printf "\\%o", $str[$tmp]
end
set $tmp = $tmp + 1
end
if $tmp != $arg1
printf "..."
end
printf "\""
end
define printzn
____executor_globals
set $ind = 0
set $znode = $arg0
if $znode->op_type == 1
set $optype = "IS_CONST"
end
if $znode->op_type == 2
set $optype = "IS_TMP_VAR"
end
if $znode->op_type == 4
set $optype = "IS_VAR"
end
if $znode->op_type == 8
set $optype = "IS_UNUSED"
end
printf "[%p] %s", $znode, $optype
if $znode->op_type == 1
printf ": "
____printzv &$znode->u.constant 0
end
if $znode->op_type == 2
printf ": "
set $tvar = (union _temp_variable *)((char *)$eg.current_execute_data->Ts + $znode->u.var)
____printzv ((union _temp_variable *)$tvar)->tmp_var 0
end
if $znode->op_type == 4
printf ": "
set $tvar = (union _temp_variable *)((char *)$eg.current_execute_data->Ts + $znode->u.var)
____printzv *$tvar->var.ptr_ptr 0
end
if $znode->op_type == 8
printf "\n"
end
end
document printzn
print type and content of znode.
usage: printzn &opline->op1
end
define printzops
printf "op1 => "
printzn &execute_data->opline.op1
printf "op2 => "
printzn &execute_data->opline.op2
printf "result => "
printzn &execute_data->opline.result
end
document printzops
dump operands of the current opline
end
define print_zstr
set $zstr = (zend_string *)$arg0
if $argc == 2
set $maxlen = $arg1
else
set $maxlen = $zstr->len
end
printf "string(%d) ", $zstr->len
____print_str (char*)$zstr->val $zstr->len $maxlen
printf "\n"
end
document print_zstr
print the length and contents of a zend string
usage: print_zstr <ptr> [max length]
end
define zbacktrace
____executor_globals
dump_bt $eg.current_execute_data
end
document zbacktrace
prints backtrace.
This command is almost a short cut for
> (gdb) ____executor_globals
> (gdb) dump_bt $eg.current_execute_data
end
define lookup_root
set $found = 0
if gc_globals->roots
set $current = gc_globals->roots->next
printf "looking ref %p in roots\n", $arg0
while $current != &gc_globals->roots
if $current->ref == $arg0
set $found = $current
break
end
set $current = $current->next
end
if $found != 0
printf "found root %p\n", $found
else
printf "not found\n"
end
end
end
document lookup_root
lookup a refcounted in root
usage: lookup_root [ptr].
end
================================================
FILE: .gitattributes
================================================
# Replace $Id$ strings with 40-character hexadecimal blob object name.
/ext/ext_skel.php ident
/ext/phar/phar/pharcommand.inc ident
/ext/dba/libinifile/inifile.c ident
/ext/dba/libflatfile/flatfile.c ident
/ext/dba/libcdb/cdb_make.c ident
/ext/dba/libcdb/cdb.c ident
/run-tests.php ident
# A custom merge driver to avoid automatic merges. These are manually merged.
# See https://wiki.php.net/vcs/gitfaq
/NEWS merge=NEWS
/UPGRADING merge=NEWS
/UPGRADING.INTERNALS merge=NEWS
# Enable commit diffs for binary PHP test files. Some PHP test files include
# special characters, such as ASCII control characters. Git recognizes these as
# binary and wouldn't generate diffs.
*.phpt diff
================================================
FILE: .github/workflows/artifact-hash.yml
================================================
name: artifact-hash
on:
workflow_dispatch:
inputs:
version:
required: true
description: "发版 版本号 tag"
default: 'v6.0.0.0'
type: string
enable_upload_cloud_object_storage:
required: false
type: boolean
description: "上传到云对象存储 (默认不需要上传)"
jobs:
generate-artifact-hash:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Show Release File Hash
run: |
bash sapi/scripts/generate-artifact-hash.sh --version ${{ inputs.version }}
- name: production artifacts
uses: actions/upload-artifact@v5
with:
name: ${{ inputs.version }}-sha256sum
retention-days: 90
path: |
${{ inputs.version }}-sha256sum
- name: upload artifacts to cloud object storage
if: ${{ (github.repository == 'swoole/swoole-cli') && (inputs.enable_upload_cloud_object_storage == true) }}
env:
OSS_SECRET_ID: ${{ secrets.QCLOUD_OSS_SECRET_ID }}
OSS_SECRET_KEY: ${{ secrets.QCLOUD_OSS_SECRET_KEY }}
OSS_BUCKET: ${{ vars.QCLOUD_OSS_BUCKET }}
OSS_REGION: ${{ vars.QCLOUD_OSS_REGION }}
run: |
bash sapi/scripts/tencent-cloud-object-storage.sh --upload-all --swoole-cli-version ${{ inputs.version }}
================================================
FILE: .github/workflows/auto-cache-pool-tarball.yml
================================================
name: auto-cache-pool-tarball
on:
push:
pull_request:
schedule:
- cron: '0 0 */6 * *'
workflow_dispatch:
jobs:
auto-cache-pool:
if: ${{ (github.repository_owner == 'swoole') }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Prepare Source Code
run: |
echo $PATH
env
docker info
id -u
id -g
who
cat /etc/os-release
hostnamectl
uname -s
uname -m
uname -r
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
cat /proc/cpuinfo | grep "cpu cores" | uniq
cat /proc/cpuinfo| grep "processor"| wc -l
lscpu
export IPV6=$(ip -6 address show | grep inet6 | awk '{print $2}' | cut -d'/' -f1 | sed -n '2p')
export IPV4=$(ip -4 address show | grep inet | grep -v 127.0.0 | awk '{print $2}' | cut -d'/' -f1 | sed -n '1p')
echo $IPV4
echo $IPV6
echo "X_IPV6=${IPV6}" >> $GITHUB_ENV
echo "X_IPV4=${IPV4}" >> $GITHUB_ENV
- name: Cache PHP Runtime
uses: actions/cache@v5
id: php-runtime-cache
with:
path: ${{ github.workspace }}/bin/runtime
key: ${{ runner.os }}-x86_64-php-runtime
- name: Cache PHP Vendor
uses: actions/cache@v5
id: php-vendor-cache
with:
path: ${{ github.workspace }}/vendor
key: ${{ runner.os }}-x86_64-php-vendor
- name: Cache Dependency Source Code Tarball
uses: actions/cache@v5
id: pool-cache
with:
path: ${{ github.workspace }}/pool/
key: source-code-tarball-pool
- name: Clean Source Code Tarball Cache On Release
if: ${{ startsWith(github.ref, 'refs/tags/') }}
run:
rm -rf ${{ github.workspace }}/pool/*
- name: Prepare Runtime and Libraries and Extensions
run: |
set -x
mkdir -p pool/lib
mkdir -p pool/ext
mkdir -p runtime/
test -f runtime/php && rm -f runtime/php
if [ ! -f runtime/php/box ] ; then
bash setup-php-runtime.sh
fi
WORK_DIR=${{ github.workspace }}
export PATH=${WORK_DIR}/runtime/php/:$PATH
alias php="php -d curl.cainfo=${WORK_DIR}/runtime/php/cacert.pem -d openssl.cafile=${WORK_DIR}/runtime/php/cacert.pem"
composer install --no-interaction --no-autoloader --no-scripts --profile
composer dump-autoload --optimize --profile
php prepare.php +inotify +apcu +ds +ssh2 +uuid +protobuf +gettext --with-libavif=1 --show-tarball-hash=1
php prepare.php +apcu +ds +ssh2 +uuid +protobuf +gettext --with-libavif=1 --show-tarball-hash=1 @macos
php sapi/scripts/download-php-src-archive.php
echo 'cygwin: https://www.cygwin.com/COPYING' >> bin/LICENSE
cd ${{ github.workspace }}/pool/
zip -9 -r ${WORK_DIR}/all-deps.zip ext lib php-tar
HASH=$(sha256sum ${WORK_DIR}/all-deps.zip | awk '{print $1}')
echo " all-deps.zip sha265: ${HASH} "
echo -n ${HASH} > ${WORK_DIR}/all-deps.zip.sha256sum
cd ${{ github.workspace }}
- name: Show Build Result
run: |
ls -A pool/lib/
ls -A pool/ext/
ls -A pool/php-tar/
cat bin/LICENSE
- name: production artifacts
uses: actions/upload-artifact@v5
with:
name: all-deps
retention-days: 90
path: |
all-deps.zip
all-deps.zip.sha256sum
bin/LICENSE
- name: gh release
uses: softprops/action-gh-release@v2
if: ${{ startsWith(github.ref, 'refs/tags/') }}
with:
files: |
all-deps.zip
all-deps.zip.sha256sum
bin/LICENSE
================================================
FILE: .github/workflows/build-alpine-builder-container.sh
================================================
#!/usr/bin/env bash
set -exu
__DIR__=$(
cd "$(dirname "$0")"
pwd
)
__PROJECT__=$(
cd ${__DIR__}/../../
pwd
)
cd ${__DIR__}
cd ${__PROJECT__}
mkdir -p var/build-github-action-container/
cd ${__PROJECT__}/var/build-github-action-container/
cp -f ${__PROJECT__}/sapi/quickstart/linux/alpine-init.sh .
cat >Dockerfile <<'EOF'
FROM alpine:3.18
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ENV TZ=Etc/UTC
ADD ./alpine-init.sh /alpine-init.sh
RUN sh /alpine-init.sh
RUN uname -m
RUN mkdir /work
WORKDIR /work
ENTRYPOINT ["tini", "--"]
EOF
PLATFORM=''
ARCH=$(uname -m)
case $ARCH in
'x86_64')
PLATFORM='linux/amd64'
;;
'aarch64')
PLATFORM='linux/arm64'
;;
'riscv64')
PLATFORM="linux/riscv64"
;;
'mips64le')
PLATFORM="linux/mips64le"
;;
'loongarch64')
PLATFORM="linux/mips64le"
;;
esac
while [ $# -gt 0 ]; do
case "$1" in
--platform)
PLATFORM="$2"
;;
--*)
echo "Illegal option $1"
;;
esac
shift $(($# > 0 ? 1 : 0))
done
IMAGE='swoole-cli-builder:latest'
docker buildx build -t ${IMAGE} -f ./Dockerfile . --platform ${PLATFORM}
docker save -o "swoole-cli-builder-image.tar" ${IMAGE}
# alpine 可设置的架构选项
# https://hub.docker.com/_/alpine/tags
: <<'EOF'
linux/386
linux/amd64
linux/arm/v6
linux/arm/v7
linux/arm64/v8
linux/ppc64le
linux/s390x
EOF
# 龙芯架构
# https://cr.loongnix.cn/search
================================================
FILE: .github/workflows/linux-aarch64.yml
================================================
name: build-swoole-cli-linux-aarch64
on: [ push, pull_request ]
jobs:
linux-aarch64:
if: ${{ !contains(github.event.head_commit.message, '--filter=') || contains(github.event.head_commit.message, '[linux-aarch64]') }}
runs-on: ubuntu-24.04-arm
steps:
- uses: actions/checkout@v5
- name: Show Environment Info
run: |
echo $PATH
env
docker info
id -u
id -g
who
cat /etc/os-release
hostnamectl
uname -s
uname -m
uname -r
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
cat /proc/cpuinfo | grep "cpu cores" | uniq
cat /proc/cpuinfo| grep "processor"| wc -l
lscpu
export IPV6=$(ip -6 address show | grep inet6 | awk '{print $2}' | cut -d'/' -f1 | sed -n '2p')
export IPV4=$(ip -4 address show | grep inet | grep -v 127.0.0 | awk '{print $2}' | cut -d'/' -f1 | sed -n '1p')
echo $IPV4
echo $IPV6
echo "X_IPV6=${IPV6}" >> $GITHUB_ENV
echo "X_IPV4=${IPV4}" >> $GITHUB_ENV
- name: Prepare Build Environment
run: |
git submodule update --init
sudo mkdir -p /usr/local/swoole-cli
uid=$(id -u) && gid=$(id -g) && sudo chown -R ${uid}:${gid} /usr/local/swoole-cli
mkdir -p ${{ github.workspace }}/var/build-github-action-container/
- name: Cache PHP Runtime
uses: actions/cache@v5
id: php-runtime-cache-aarch64
with:
path: ${{ github.workspace }}/runtime
key: ${{ runner.os }}-aarch64-php-runtime
- name: Cache PHP Vendor
uses: actions/cache@v5
id: php-vendor-cache-aarch64
with:
path: ${{ github.workspace }}/vendor
key: ${{ runner.os }}-aarch64-php-vendor
- name: Cache Dependency Source Code Tarball
uses: actions/cache@v5
id: pool-cache
with:
path: ${{ github.workspace }}/pool/
key: source-code-tarball-pool
- name: Cache all-library
uses: actions/cache@v5
id: all-library-cache-aarch64
with:
path: /usr/local/swoole-cli
key: ${{ github.head_ref || github.ref_name }}-${{ runner.os }}-aarch64-all-library
- name: Cache swoole-cli-builder-image
uses: actions/cache@v5
id: swoole-cli-builder-image-cache-aarch64
with:
path: ${{ github.workspace }}/var/build-github-action-container/swoole-cli-builder-image.tar
key: ${{ runner.os }}-aarch64-swoole-cli-builder-image
- name: Prepare swoole-cli-builder-image
run: |
if [ -f ${{ github.workspace }}/var/build-github-action-container/swoole-cli-builder-image.tar ] ; then
docker load -i ${{ github.workspace }}/var/build-github-action-container/swoole-cli-builder-image.tar
else
bash .github/workflows/build-alpine-builder-container.sh --platform "linux/arm64"
fi
- name: Prepare Runtime and Libraries and Extensions
run: |
set -x
mkdir -p pool/lib
mkdir -p pool/ext
mkdir -p bin/
mkdir -p runtime/
test -f runtime/php && rm -f runtime/php
if [ ! -f runtime/php/box ] ; then
bash setup-php-runtime.sh
fi
bash sapi/download-box/download-box-get-archive-from-server.sh
ls -A pool/lib/
ls -A /usr/local/swoole-cli/
- name: Build
uses: addnab/docker-run-action@v3
with:
image: swoole-cli-builder:latest
options: -v ${{ github.workspace }}:/work -w /work -v /usr/local/swoole-cli:/usr/local/swoole-cli
run: |
set -eux
uname -m
export PATH=/work/runtime/php/:$PATH # 容器已经内置 php 和 composer
alias php="php -d curl.cainfo=/work/runtime/php/cacert.pem -d openssl.cafile=/work/runtime/php/cacert.pem"
sh sapi/quickstart/linux/alpine-init.sh
git config --global --add safe.directory /work
composer install --no-interaction --no-autoloader --no-scripts --profile
composer dump-autoload --optimize --profile
php prepare.php --with-static-pie --with-libavif
bash make.sh all-library
bash make.sh config
bash make.sh build
bash make.sh archive
- name: Show Build Result
run: |
./bin/swoole-cli -v
./bin/swoole-cli -m
./bin/swoole-cli --ri curl
./bin/swoole-cli --ri gd
./bin/swoole-cli --ri imagick
./bin/swoole-cli --ri swoole
{ ldd ./bin/swoole-cli ; } || { echo $? ; } ;
file ./bin/swoole-cli
readelf -h ./bin/swoole-cli
APP_VERSION=$(./bin/swoole-cli -v | awk '{print $2}')
echo "APP_VERSION=${APP_VERSION}" >> $GITHUB_ENV
./bin/swoole-cli -r "echo PHP_VERSION;"
./bin/swoole-cli ./vendor/bin/phpunit ./sapi/src/UnitTest/MainTest.php --list-tests
./bin/swoole-cli ./vendor/bin/phpunit ./sapi/src/UnitTest/MainTest.php
- name: production artifacts debug
uses: actions/upload-artifact@v5
with:
name: swoole-cli-v${{ env.APP_VERSION }}-linux-arm64-debug
retention-days: 90
path: ./bin/swoole-cli
- name: production artifacts
uses: actions/upload-artifact@v5
with:
name: swoole-cli-v${{ env.APP_VERSION }}-linux-arm64
retention-days: 90
path: ./bin/dist/swoole-cli
- name: gh release
uses: softprops/action-gh-release@v2
if: startsWith(github.ref, 'refs/tags/')
with:
files: swoole-cli-v${{ env.APP_VERSION }}-linux-arm64.tar.xz
- name: upload artifacts to cloud object storage
if: ${{ (github.repository == 'swoole/swoole-cli') && (startsWith(github.ref, 'refs/tags/')) }}
env:
OSS_SECRET_ID: ${{ secrets.QCLOUD_OSS_SECRET_ID }}
OSS_SECRET_KEY: ${{ secrets.QCLOUD_OSS_SECRET_KEY }}
OSS_BUCKET: ${{ vars.QCLOUD_OSS_BUCKET }}
OSS_REGION: ${{ vars.QCLOUD_OSS_REGION }}
run: |
bash sapi/scripts/tencent-cloud-object-storage.sh --upload-file ${{ github.workspace }}/swoole-cli-v${{ env.APP_VERSION }}-linux-arm64.tar.xz
================================================
FILE: .github/workflows/linux-glibc.yml
================================================
name: build-swoole-cli-linux-glibc
on: [ push, pull_request ]
jobs:
linux-glibc:
if: ${{ !contains(github.event.head_commit.message, '--filter=') || contains(github.event.head_commit.message, '[linux-glibc]') }}
strategy:
fail-fast: false
matrix:
os: [ ubuntu-22.04, ubuntu-22.04-arm ]
name: linux-glibc-${{ matrix.os }}
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v5
- name: Show Environment Info
run: |
echo $PATH
env
docker info
id -u
id -g
who
cat /etc/os-release
hostnamectl
uname -s
uname -m
uname -r
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
cat /proc/cpuinfo | grep "cpu cores" | uniq
cat /proc/cpuinfo| grep "processor"| wc -l
lscpu
export IPV6=$(ip -6 address show | grep inet6 | awk '{print $2}' | cut -d'/' -f1 | sed -n '2p')
export IPV4=$(ip -4 address show | grep inet | grep -v 127.0.0 | awk '{print $2}' | cut -d'/' -f1 | sed -n '1p')
echo $IPV4
echo $IPV6
echo "X_IPV6=${IPV6}" >> $GITHUB_ENV
echo "X_IPV4=${IPV4}" >> $GITHUB_ENV
- name: Prepare Build Environment
run: |
git submodule update --init
sudo mkdir -p /usr/local/swoole-cli
uid=$(id -u) && gid=$(id -g) && sudo chown -R ${uid}:${gid} /usr/local/swoole-cli
mkdir -p ${{ github.workspace }}/var/build-github-action-container/
- name: Cache Dependency Source Code Tarball
uses: actions/cache@v5
id: pool-cache
with:
path: ${{ github.workspace }}/pool/
key: source-code-tarball-pool
- name: Prepare Runtime and Libraries and Extensions
run: |
set -x
mkdir -p pool/lib
mkdir -p pool/ext
mkdir -p bin/
mkdir -p runtime/
test -f runtime/php && rm -f runtime/php
if [ ! -f runtime/php/box ] ; then
bash setup-php-runtime.sh
fi
bash sapi/download-box/download-box-get-archive-from-server.sh
ls -A pool/lib/
ls -A /usr/local/swoole-cli/
- name: Build
run: |
set -eux
uname -m
composer install --no-interaction --no-autoloader --no-scripts --profile
composer dump-autoload --optimize --profile
php prepare.php --with-libavif --with-iouring
sudo apt update
sudo bash ./sapi/scripts/install-deps-on-ubuntu.sh
sudo bash ./ext/swoole/scripts/install-deps-on-ubuntu.sh
bash ./sapi/scripts/build-swoole-cli-with-linux-gcc.sh
./bin/swoole-cli -v
./bin/swoole-cli -m
./bin/swoole-cli --ri curl
./bin/swoole-cli --ri gd
./bin/swoole-cli --ri imagick
./bin/swoole-cli --ri swoole
{ ldd ./bin/swoole-cli ; } || { echo $? ; } ;
file ./bin/swoole-cli
APP_VERSION=$(./bin/swoole-cli -v | awk '{print $2}')
echo "APP_VERSION=${APP_VERSION}" >> $GITHUB_ENV
- name: Make nfpm package
run: |
ARCH=$(uname -m)
if [ "$ARCH" = "aarch64" ]; then
NFPM_ARCH="arm64"
else
NFPM_ARCH="amd64"
fi
wget https://github.com/goreleaser/nfpm/releases/download/v2.43.4/nfpm_2.43.4_${NFPM_ARCH}.deb
sudo dpkg -i nfpm_2.43.4_${NFPM_ARCH}.deb
strip ./bin/swoole-cli
./make.sh nfpm-pkg
ls -ls ./*.deb
ls -ls ./*.rpm
ARCH=$(uname -m)
if [ "$ARCH" = "aarch64" ]; then
FILE_ARCH="arm64"
else
FILE_ARCH="x64"
fi
OS="linux"
echo "FILE_ARCH=${FILE_ARCH}" >> $GITHUB_ENV
echo "OS=${OS}" >> $GITHUB_ENV
- name: production artifacts debian
uses: actions/upload-artifact@v5
with:
name: swoole-cli-glibc-for-debian-${{ env.FILE_ARCH }}
retention-days: 90
path: ${{ github.workspace }}/swoole-cli-v${{ env.APP_VERSION }}-${{ env.OS }}-${{ env.FILE_ARCH }}-glibc.deb
- name: production artifacts redhat
uses: actions/upload-artifact@v5
with:
name: swoole-cli-glibc-for-redhat-${{ env.FILE_ARCH }}
retention-days: 90
path: ${{ github.workspace }}/swoole-cli-v${{ env.APP_VERSION }}-${{ env.OS }}-${{ env.FILE_ARCH }}-glibc.rpm
- name: gh release
uses: softprops/action-gh-release@v2
if: startsWith(github.ref, 'refs/tags/')
with:
files: |
${{ github.workspace }}/swoole-cli-v${{ env.APP_VERSION }}-${{ env.OS }}-${{ env.FILE_ARCH }}-glibc.deb
${{ github.workspace }}/swoole-cli-v${{ env.APP_VERSION }}-${{ env.OS }}-${{ env.FILE_ARCH }}-glibc.rpm
- name: upload artifacts to cloud object storage
if: ${{ (github.repository == 'swoole/swoole-cli') && (startsWith(github.ref, 'refs/tags/')) }}
env:
OSS_SECRET_ID: ${{ secrets.QCLOUD_OSS_SECRET_ID }}
OSS_SECRET_KEY: ${{ secrets.QCLOUD_OSS_SECRET_KEY }}
OSS_BUCKET: ${{ vars.QCLOUD_OSS_BUCKET }}
OSS_REGION: ${{ vars.QCLOUD_OSS_REGION }}
run: |
bash sapi/scripts/tencent-cloud-object-storage.sh --upload-file ${{ github.workspace }}/swoole-cli-v${{ env.APP_VERSION }}-${{ env.OS }}-${{ env.FILE_ARCH }}-glibc.deb
bash sapi/scripts/tencent-cloud-object-storage.sh --upload-file ${{ github.workspace }}/swoole-cli-v${{ env.APP_VERSION }}-${{ env.OS }}-${{ env.FILE_ARCH }}-glibc.rpm
================================================
FILE: .github/workflows/linux-x86_64.yml
================================================
name: build-swoole-cli-linux-x86_64
on: [ push, pull_request ]
jobs:
linux-x86_64:
if: ${{ !contains(github.event.head_commit.message, '--filter=') || contains(github.event.head_commit.message, '[linux-x86_64]') }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Show Environment Info
run: |
echo $PATH
env
docker info
id -u
id -g
who
cat /etc/os-release
hostnamectl
uname -s
uname -m
uname -r
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
cat /proc/cpuinfo | grep "cpu cores" | uniq
cat /proc/cpuinfo| grep "processor"| wc -l
lscpu
export IPV6=$(ip -6 address show | grep inet6 | awk '{print $2}' | cut -d'/' -f1 | sed -n '2p')
export IPV4=$(ip -4 address show | grep inet | grep -v 127.0.0 | awk '{print $2}' | cut -d'/' -f1 | sed -n '1p')
echo $IPV4
echo $IPV6
echo "X_IPV6=${IPV6}" >> $GITHUB_ENV
echo "X_IPV4=${IPV4}" >> $GITHUB_ENV
- name: Prepare Build Environment
run: |
git submodule update --init
sudo mkdir -p /usr/local/swoole-cli
uid=$(id -u) && gid=$(id -g) && sudo chown -R ${uid}:${gid} /usr/local/swoole-cli
mkdir -p ${{ github.workspace }}/var/build-github-action-container/
- name: Cache PHP Runtime
uses: actions/cache@v5
id: php-runtime-cache-x86_64
with:
path: ${{ github.workspace }}/runtime
key: ${{ runner.os }}-x86_64-php-runtime
- name: Cache PHP Vendor
uses: actions/cache@v5
id: php-vendor-cache-x86_64
with:
path: ${{ github.workspace }}/vendor
key: ${{ runner.os }}-x86_64-php-vendor
- name: Cache Dependency Source Code Tarball
uses: actions/cache@v5
id: pool-cache
with:
path: ${{ github.workspace }}/pool/
key: source-code-tarball-pool
- name: Cache all-library
uses: actions/cache@v5
id: all-library-cache-x86_64
with:
path: /usr/local/swoole-cli
key: ${{ github.head_ref || github.ref_name }}-${{ runner.os }}-x86_64-all-library
- name: Cache swoole-cli-builder-image
uses: actions/cache@v5
id: swoole-cli-builder-image-cache-x86_64
with:
path: ${{ github.workspace }}/var/build-github-action-container/swoole-cli-builder-image.tar
key: ${{ runner.os }}-x86_64-swoole-cli-builder-image
- name: Prepare swoole-cli-builder-image
run: |
if [ -f ${{ github.workspace }}/var/build-github-action-container/swoole-cli-builder-image.tar ] ; then
docker load -i ${{ github.workspace }}/var/build-github-action-container/swoole-cli-builder-image.tar
else
bash .github/workflows/build-alpine-builder-container.sh
fi
- name: Prepare Runtime and Libraries and Extensions
run: |
set -x
mkdir -p pool/lib
mkdir -p pool/ext
mkdir -p bin/
mkdir -p runtime/
test -f runtime/php && rm -f runtime/php
if [ ! -f runtime/php/box ] ; then
bash setup-php-runtime.sh
fi
bash sapi/download-box/download-box-get-archive-from-server.sh
ls -A pool/lib/
ls -A /usr/local/swoole-cli/
- name: Build
uses: addnab/docker-run-action@v3
with:
image: swoole-cli-builder:latest
options: -v ${{ github.workspace }}:/work -w /work -v /usr/local/swoole-cli:/usr/local/swoole-cli
run: |
set -eux
uname -m
export PATH=/work/runtime/php:$PATH # 容器已经内置 php 和 composer
alias php="php -d curl.cainfo=/work/runtime/php/cacert.pem -d openssl.cafile=/work/runtime/php/cacert.pem"
sh sapi/quickstart/linux/alpine-init.sh
git config --global --add safe.directory /work
composer install --no-interaction --no-autoloader --no-scripts --profile
composer dump-autoload --optimize --profile
php prepare.php --with-libavif --with-static-pie
bash make.sh all-library
bash make.sh config
bash make.sh build
bash make.sh archive
- name: Start Database
run: |
# 准备数据库容器
docker compose version
docker container ls -a
bash sapi/docker/database/start.sh
- name: Show Build Result
run: |
./bin/swoole-cli -v
./bin/swoole-cli -m
./bin/swoole-cli --ri curl
./bin/swoole-cli --ri gd
./bin/swoole-cli --ri imagick
./bin/swoole-cli --ri swoole
{ ldd ./bin/swoole-cli ; } || { echo $? ; } ;
file ./bin/swoole-cli
readelf -h ./bin/swoole-cli
APP_VERSION=$(./bin/swoole-cli -v | awk '{print $2}')
echo "APP_VERSION=${APP_VERSION}" >> $GITHUB_ENV
./bin/swoole-cli -r "echo PHP_VERSION;"
./bin/swoole-cli ./vendor/bin/phpunit ./sapi/src/UnitTest/MainTest.php --list-tests
./bin/swoole-cli ./vendor/bin/phpunit ./sapi/src/UnitTest/MainTest.php
- name: production artifacts debug
uses: actions/upload-artifact@v5
with:
name: swoole-cli-v${{ env.APP_VERSION }}-linux-x64-debug
retention-days: 90
path: ./bin/swoole-cli
- name: production artifacts
uses: actions/upload-artifact@v5
with:
name: swoole-cli-v${{ env.APP_VERSION }}-linux-x64
retention-days: 90
path: ./bin/dist/swoole-cli
- name: gh release
uses: softprops/action-gh-release@v2
if: startsWith(github.ref, 'refs/tags/')
with:
files: swoole-cli-v${{ env.APP_VERSION }}-linux-x64.tar.xz
- name: upload artifacts to cloud object storage
if: ${{ (github.repository == 'swoole/swoole-cli') && (startsWith(github.ref, 'refs/tags/')) }}
env:
OSS_SECRET_ID: ${{ secrets.QCLOUD_OSS_SECRET_ID }}
OSS_SECRET_KEY: ${{ secrets.QCLOUD_OSS_SECRET_KEY }}
OSS_BUCKET: ${{ vars.QCLOUD_OSS_BUCKET }}
OSS_REGION: ${{ vars.QCLOUD_OSS_REGION }}
run: |
bash sapi/scripts/tencent-cloud-object-storage.sh --upload-file ${{ github.workspace }}/swoole-cli-v${{ env.APP_VERSION }}-linux-x64.tar.xz
================================================
FILE: .github/workflows/macos-aarch64.yml
================================================
name: build-swoole-cli-macos-aarch64
on: [ push, pull_request ]
jobs:
macos-aarch64:
if: ${{ !contains(github.event.head_commit.message, '--filter=') || contains(github.event.head_commit.message, '[macos-aarch64]') }}
runs-on: macos-15
# macos-latest (macos-14) 变更了 CPU 架构,由 x86_64 变更为 arm64
# macos-14 CPU 架构 arm64
# macos-13 CPU 架构 x86_64
# macos-12 CPU 架构 x86_64
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#choosing-github-hosted-runners
steps:
- uses: actions/checkout@v5
- name: Show Environment Info
run: |
set -x
uname -s
uname -m
uname -r
env
echo $HOME
sw_vers
xcodebuild -version
brew config
xcrun --show-sdk-path
ls -lh $(xcrun --show-sdk-path)
ifconfig
export IPV6=$(ifconfig en0 | grep "inet6 " | grep -v "inet6 fe80:" | awk '{print $2}' | cut -d'/' -f1 | sed -n '2p')
export IPV4=$(ifconfig en0 | grep "inet " | grep -v 127.0.0 | awk '{print $2}' | cut -d'/' -f1 | sed -n '1p')
echo $IPV4
echo $IPV6
echo "X_IPV6=${IPV6}" >> $GITHUB_ENV
echo "X_IPV4=${IPV4}" >> $GITHUB_ENV
- name: Prepare Build Environment
run: |
bash sapi/quickstart/macos/macos-init.sh
export PATH="/opt/homebrew/opt/libtool/bin:$PATH"
ls -lha /opt/homebrew/opt/libtool/bin/
libtoolize --version
libtool --help-all
# brew bison --debug
CURRENT_USER=$(whoami)
echo ${CURRENT_USER}
sudo mkdir -p /usr/local/swoole-cli
CURRENT_USER=$(whoami) && sudo chown -R ${CURRENT_USER}:staff /usr/local/swoole-cli
git submodule update --init
- name: Cache PHP Runtime
uses: actions/cache@v5
id: php-runtime-cache
with:
path: ${{ github.workspace }}/runtime
key: ${{ runner.os }}-aarch64-php-runtime
- name: Cache PHP Vendor
uses: actions/cache@v5
id: php-vendor-cache
with:
path: ${{ github.workspace }}/vendor
key: ${{ runner.os }}-aarch64-php-vendor
- name: Cache Dependency Source Code Tarball
uses: actions/cache@v5
id: pool-cache
with:
path: ${{ github.workspace }}/pool/
key: source-code-tarball-pool
- name: Cache all-library
uses: actions/cache@v5
id: all-library-cache
with:
path: /usr/local/swoole-cli
key: ${{ github.head_ref || github.ref_name }}-${{ runner.os }}-aarch64-all-library
- name: Prepare Runtime and Libraries and Extensions
run: |
set -x
mkdir -p pool/lib
mkdir -p pool/ext
mkdir -p bin/
mkdir -p runtime/
test -f runtime/php && rm -f runtime/php
if [ ! -f runtime/php/box ] ; then
bash setup-php-runtime.sh
fi
bash sapi/download-box/download-box-get-archive-from-server.sh
ls -A pool/lib/
ls -A /usr/local/swoole-cli/
- name: prepare
run: |
export PATH=${{ github.workspace }}/runtime/php/:$PATH
alias php="php -d curl.cainfo=${{ github.workspace }}/runtime/php/cacert.pem -d openssl.cafile=${{ github.workspace }}/runtime/php/cacert.pem"
composer install --no-interaction --no-autoloader --no-scripts --profile
composer dump-autoload --optimize --profile
php prepare.php --without-docker=1 --with-libavif
- name: Build
run: |
export PATH=${{ github.workspace }}/runtime/php/:$PATH
bash make.sh all-library
bash make.sh config
bash make.sh build
bash make.sh archive
- name: Show Build Result
run: |
./bin/swoole-cli -v
./bin/swoole-cli -m
./bin/swoole-cli --ri curl
./bin/swoole-cli --ri gd
./bin/swoole-cli --ri imagick
./bin/swoole-cli --ri swoole
file ./bin/swoole-cli
otool -L ./bin/swoole-cli
APP_VERSION=$(./bin/swoole-cli -v | awk '{print $2}')
echo "APP_VERSION=${APP_VERSION}" >> $GITHUB_ENV
./bin/swoole-cli -r "echo PHP_VERSION;"
./bin/swoole-cli ./vendor/bin/phpunit ./sapi/src/UnitTest/MainTest.php --list-tests
./bin/swoole-cli ./vendor/bin/phpunit ./sapi/src/UnitTest/MainTest.php
- name: Archive production artifacts debug
uses: actions/upload-artifact@v5
with:
name: swoole-cli-v${{ env.APP_VERSION }}-macos-arm64-debug
retention-days: 90
path: ./bin/swoole-cli
- name: Archive production artifacts
uses: actions/upload-artifact@v5
with:
name: swoole-cli-v${{ env.APP_VERSION }}-macos-arm64
retention-days: 90
path: ./bin/dist/swoole-cli
- name: gh release
uses: softprops/action-gh-release@v2
if: startsWith(github.ref, 'refs/tags/')
with:
files: swoole-cli-v${{ env.APP_VERSION }}-macos-arm64.tar.xz
- name: upload artifacts to cloud object storage
if: ${{ (github.repository == 'swoole/swoole-cli') && (startsWith(github.ref, 'refs/tags/')) }}
env:
OSS_SECRET_ID: ${{ secrets.QCLOUD_OSS_SECRET_ID }}
OSS_SECRET_KEY: ${{ secrets.QCLOUD_OSS_SECRET_KEY }}
OSS_BUCKET: ${{ vars.QCLOUD_OSS_BUCKET }}
OSS_REGION: ${{ vars.QCLOUD_OSS_REGION }}
run: |
bash sapi/scripts/tencent-cloud-object-storage.sh --upload-file ${{ github.workspace }}/swoole-cli-v${{ env.APP_VERSION }}-macos-arm64.tar.xz
================================================
FILE: .github/workflows/macos-x86_64.yml
================================================
name: build-swoole-cli-macos-x86_64
on: [ push, pull_request ]
jobs:
macos-x86_64:
if: ${{ !contains(github.event.head_commit.message, '--filter=') || contains(github.event.head_commit.message, '[macos-x86_64]') }}
runs-on: macos-15-intel
# macos-latest (macos-14) 变更了 CPU 架构,由 x86_64 变更为 arm64
# macos-14 CPU 架构 arm64
# macos-13 CPU 架构 x86_64
# macos-12 CPU 架构 x86_64
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#choosing-github-hosted-runners
steps:
- uses: actions/checkout@v5
- name: Show Environment Info
run: |
set -x
uname -s
uname -m
uname -r
env
echo $HOME
sw_vers
xcodebuild -version
brew config
xcrun --show-sdk-path
ls -lh $(xcrun --show-sdk-path)
ifconfig
export IPV6=$(ifconfig en0 | grep "inet6 " | grep -v "inet6 fe80:" | awk '{print $2}' | cut -d'/' -f1 | sed -n '2p')
export IPV4=$(ifconfig en0 | grep "inet " | grep -v 127.0.0 | awk '{print $2}' | cut -d'/' -f1 | sed -n '1p')
echo $IPV4
echo $IPV6
echo "X_IPV6=${IPV6}" >> $GITHUB_ENV
echo "X_IPV4=${IPV4}" >> $GITHUB_ENV
- name: Prepare Build Environment
run: |
bash sapi/quickstart/macos/macos-init.sh
export PATH=/usr/local/opt/libtool/bin:$PATH
ls -lha /usr/local/opt/libtool/bin/
libtoolize --version
libtool --help-all
# brew bison --debug
CURRENT_USER=$(whoami)
echo ${CURRENT_USER}
sudo mkdir -p /usr/local/swoole-cli
CURRENT_USER=$(whoami) && sudo chown -R ${CURRENT_USER}:staff /usr/local/swoole-cli
git submodule update --init
- name: Cache PHP Runtime
uses: actions/cache@v5
id: php-runtime-cache
with:
path: ${{ github.workspace }}/runtime
key: ${{ runner.os }}-x86_64-php-runtime
- name: Cache PHP Vendor
uses: actions/cache@v5
id: php-vendor-cache
with:
path: ${{ github.workspace }}/vendor
key: ${{ runner.os }}-x86_64-php-vendor
- name: Cache Dependency Source Code Tarball
uses: actions/cache@v5
id: pool-cache
with:
path: ${{ github.workspace }}/pool/
key: source-code-tarball-pool
- name: Cache all-library
uses: actions/cache@v5
id: all-library-cache
with:
path: /usr/local/swoole-cli
key: ${{ github.head_ref || github.ref_name }}-${{ runner.os }}-x86_64-all-library
- name: Prepare Runtime and Libraries and Extensions
run: |
set -x
mkdir -p pool/lib
mkdir -p pool/ext
mkdir -p bin/
mkdir -p runtime/
test -f runtime/php && rm -f runtime/php
if [ ! -f runtime/php/box ] ; then
bash setup-php-runtime.sh
fi
bash sapi/download-box/download-box-get-archive-from-server.sh
ls -A pool/lib/
ls -A /usr/local/swoole-cli/
- name: prepare
run: |
export PATH=${{ github.workspace }}/runtime/php/:$PATH
alias php="php -d curl.cainfo=${{ github.workspace }}/runtime/php/cacert.pem -d openssl.cafile=${{ github.workspace }}/runtime/php/cacert.pem"
composer install --no-interaction --no-autoloader --no-scripts --profile
composer dump-autoload --optimize --profile
php prepare.php --without-docker=1 --with-libavif
- name: Build
run: |
export PATH=${{ github.workspace }}/runtime/php/:$PATH
bash ./make.sh all-library
bash ./make.sh config
bash ./make.sh build
bash ./make.sh archive
- name: Show Build Result
run: |
./bin/swoole-cli -v
./bin/swoole-cli -m
./bin/swoole-cli --ri curl
./bin/swoole-cli --ri gd
./bin/swoole-cli --ri imagick
./bin/swoole-cli --ri swoole
file ./bin/swoole-cli
otool -L ./bin/swoole-cli
APP_VERSION=$(./bin/swoole-cli -v | awk '{print $2}')
echo "APP_VERSION=${APP_VERSION}" >> $GITHUB_ENV
./bin/swoole-cli -r "echo PHP_VERSION;"
./bin/swoole-cli ./vendor/bin/phpunit ./sapi/src/UnitTest/MainTest.php --list-tests
./bin/swoole-cli ./vendor/bin/phpunit ./sapi/src/UnitTest/MainTest.php
- name: Archive production artifacts debug
uses: actions/upload-artifact@v5
with:
name: swoole-cli-v${{ env.APP_VERSION }}-macos-x64-debug
retention-days: 90
path: ./bin/swoole-cli
- name: Archive production artifacts
uses: actions/upload-artifact@v5
with:
name: swoole-cli-v${{ env.APP_VERSION }}-macos-x64
retention-days: 90
path: ./bin/dist/swoole-cli
- name: gh release
uses: softprops/action-gh-release@v2
if: startsWith(github.ref, 'refs/tags/')
with:
files: swoole-cli-v${{ env.APP_VERSION }}-macos-x64.tar.xz
- name: upload artifacts to cloud object storage
if: ${{ (github.repository == 'swoole/swoole-cli') && (startsWith(github.ref, 'refs/tags/')) }}
env:
OSS_SECRET_ID: ${{ secrets.QCLOUD_OSS_SECRET_ID }}
OSS_SECRET_KEY: ${{ secrets.QCLOUD_OSS_SECRET_KEY }}
OSS_BUCKET: ${{ vars.QCLOUD_OSS_BUCKET }}
OSS_REGION: ${{ vars.QCLOUD_OSS_REGION }}
run: |
bash sapi/scripts/tencent-cloud-object-storage.sh --upload-file ${{ github.workspace }}/swoole-cli-v${{ env.APP_VERSION }}-macos-x64.tar.xz
================================================
FILE: .github/workflows/runner-images.md
================================================
[runner-images](https://github.com/actions/runner-images/tree/main/images)
[available-images](https://github.com/actions/runner-images?tab=readme-ov-file#available-images)
[choosing-github-hosted-runners](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#choosing-github-hosted-runners)
================================================
FILE: .github/workflows/windows-cygwin.yml
================================================
name: build-swoole-cli-windows-cygwin
on: [ push, pull_request ]
jobs:
windows-cygwin:
if: ${{ !contains(github.event.head_commit.message, '--filter=') || contains(github.event.head_commit.message, '[windows-cygwin]') }}
runs-on: windows-2022
steps:
- name: Show Environment Info
shell: cmd
run: |
ver
wmic cpu get name, caption, maxclockspeed, status
systeminfo
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
systeminfo | findstr /B /C:"Manufacturer" /C:"Product" /C:"Version"
set
ipconfig
- name: Prepare git
run: |
git config --global core.autocrlf false
git config --global core.eol lf
git config --global core.ignorecase false
git config --global --add safe.directory ${{ github.workspace }}
- uses: actions/checkout@v5
- name: Prepare submodule
run: |
git submodule update --init
- name: Cache pool
id: cache-cygwin-pool
uses: actions/cache@v5
with:
path: "${{ github.workspace }}\\pool\\"
key: ${{ runner.os }}-build-pool-cache
- name: Install Cygwin
uses: cygwin/cygwin-install-action@v6
with:
site: https://mirrors.kernel.org/sourceware/cygwin/
# with:
# platform: x64
# packages: make wget tar libtool re2c bison gcc-g++ autoconf automake openssl libpcre2-devel libssl-devel libcurl-devel libxml2-devel libxslt-devel libgmp-devel ImageMagick libpng-devel libjpeg-devel libfreetype-devel libwebp-devel libsqlite3-devel zlib-devel libbz2-devel liblz4-devel liblzma-devel libzip-devel libicu-devel libonig-devel libcares-devel libsodium-devel libyaml-devel libMagick-devel libzstd-devel libbrotli-devel libreadline-devel libintl-devel libpq-devel libssh2-devel libidn2-devel gettext-devel coreutils openssl-devel zip unzip
- name: Install Cygwin Packages with bash
if: 0
shell: C:\cygwin\bin\bash.EXE --noprofile --norc -e -o pipefail -o igncr {0}
run: |
ls -lah /cygdrive/c/
ls -lah /cygdrive/d/
cp -f /cygdrive/c/setup.exe /cygdrive/c/cygwin/bin/setup-x86_64.exe
bash ./sapi/scripts/cygwin/install-cygwin.sh
- name: Install Cygwin Packages with powershell
# 备注:github action 在 windows 上执行命令默认的 shell 是 powershell,如果要使用其它shell , 需要手动指定,例如此也可以使用 bash 来安装 cygwin packages
if: 1
run: |
Copy-Item -Path "d:\setup.exe" -Destination "${{ github.workspace }}\setup-x86_64.exe"
cmd /c .\sapi\quickstart\windows\cygwin-build\install-cygwin.bat
- name: Install re2c
shell: C:\cygwin\bin\bash.EXE --noprofile --norc -e -o pipefail -o igncr {0}
run: |
bash ./sapi/scripts/cygwin/install-re2c.sh
- name: install deps lib with source code
shell: C:\cygwin\bin\bash.EXE --noprofile --norc -e -o pipefail -o igncr {0}
run: |
bash sapi/download-box/download-box-get-archive-from-server.sh
bash ./sapi/scripts/msys2/install-libzip.sh
bash ./sapi/scripts/msys2/install-libyuv.sh
bash ./sapi/scripts/msys2/install-libavif.sh
- name: Configure
shell: C:\cygwin\bin\bash.EXE --noprofile --norc -e -o pipefail -o igncr {0}
run: |
uname -a
# git config --global --add safe.directory /cygdrive/d/a/swoole-cli/swoole-cli
# git submodule update --init
bash ./sapi/scripts/cygwin/cygwin-config-ext.sh
bash ./sapi/scripts/cygwin/cygwin-config.sh
- name: Build
shell: C:\cygwin\bin\bash.EXE --noprofile --norc -e -o pipefail -o igncr {0}
run: |
bash ./sapi/scripts/cygwin/cygwin-build.sh
- name: Archive
run: |
bash ./sapi/scripts/cygwin/cygwin-archive.sh
- name: Show Build Result
run: |
./bin/swoole-cli -v
./bin/swoole-cli -m
./bin/swoole-cli --ri curl
./bin/swoole-cli --ri gd
./bin/swoole-cli --ri imagick
./bin/swoole-cli --ri swoole
./bin/swoole-cli -r "echo PHP_VERSION;"
./bin/swoole-cli -r "echo getcwd(), PHP_EOL;"
- name: get app version with bash
# 参考 https://github.com/marketplace/actions/install-cygwin
shell: C:\cygwin\bin\bash.EXE --noprofile --norc -e -o pipefail -o igncr {0}
# shell: C:\cygwin\bin\bash.EXE --login --noprofile --norc -e -o pipefail -o igncr {0}
run: |
./bin/swoole-cli -v | awk '{print $2}'
APP_VERSION=$(./bin/swoole-cli -v | awk '{print $2}')
echo $APP_VERSION
echo "APP_VERSION=${APP_VERSION}" >> $GITHUB_ENV
- name: get app version with PowerShell
run: |
./bin/swoole-cli -v
$cmdOutput=./bin/swoole-cli -v
$cmdOutput -match "(\d{1,2}\.\d{1,2}\.\d{1,2})"
$CYGWIN_APP_VERSION=$Matches[1]
echo $CYGWIN_APP_VERSION
echo "CYGWIN_APP_VERSION=$CYGWIN_APP_VERSION" >> $Env:GITHUB_ENV
# 参考 https://github.com/orgs/community/discussions/26641
# echo "APP_VERSION=${APP_VERSION}" >> $Env:GITHUB_ENV
# echo "APP_VERSION=$APP_VERSION" | Out-File -FilePath $env:GITHUB_ENV -Append
# Add-Content -Path $env:GITHUB_ENV -Value "name=$value"
# Add-Content -Path $env:GITHUB_ENV -Value "APP_VERSION=$APP_VERSION"
- name: production artifacts
uses: actions/upload-artifact@v5
with:
name: swoole-cli-v${{ env.APP_VERSION }}-cygwin-x64
retention-days: 90
path: swoole-cli-v${{ env.APP_VERSION }}-cygwin-x64.zip
- name: gh release
uses: softprops/action-gh-release@v2
if: ${{ startsWith(github.ref, 'refs/tags/') }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
files: swoole-cli-v${{ env.APP_VERSION }}-cygwin-x64.zip
upload-to-cloud-object-storage:
if: 1
runs-on: ubuntu-latest
needs: windows-cygwin
steps:
- name: Prepare Run Environment
run:
sudo apt install -y curl
- uses: actions/checkout@v5
- uses: actions/download-artifact@v4
- name: upload artifacts to cloud object storage
if: ${{ (github.repository == 'swoole/swoole-cli') && (startsWith(github.ref, 'refs/tags/')) }}
env:
OSS_SECRET_ID: ${{ secrets.QCLOUD_OSS_SECRET_ID }}
OSS_SECRET_KEY: ${{ secrets.QCLOUD_OSS_SECRET_KEY }}
OSS_BUCKET: ${{ vars.QCLOUD_OSS_BUCKET }}
OSS_REGION: ${{ vars.QCLOUD_OSS_REGION }}
run: |
FILE_NAME=$(ls -d swoole-cli-v*-cygwin-x64)
FILE="${{ github.workspace }}/${FILE_NAME}/${FILE_NAME}.zip"
bash sapi/scripts/tencent-cloud-object-storage.sh --upload-file ${FILE}
================================================
FILE: .github/workflows/windows-msys2.yml
================================================
name: build-swoole-cli-windows-msys2
on:
push:
pull_request:
jobs:
windows-msys2:
if: 1
runs-on: windows-2022
steps:
- name: Show Environment Info
shell: cmd
run: |
ver
wmic cpu get name, caption, maxclockspeed, status
systeminfo
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
systeminfo | findstr /B /C:"Manufacturer" /C:"Product" /C:"Version"
set
ipconfig
uname -a
pwd
ipconfig /all
- name: Prepare git
run: |
git config --global core.autocrlf false
git config --global core.eol lf
git config --global core.ignorecase false
git config --global --add safe.directory ${{ github.workspace }}
- uses: actions/checkout@v5
- name: Cache pool
id: cache-msys2-pool
uses: actions/cache@v5
with:
path: "${{ github.workspace }}\\pool\\"
key: "${{ runner.os }}-build-pool-cache"
- uses: msys2/setup-msys2@v2
# https://github.com/msys2/setup-msys2
with:
msystem: MSYS
location: C:\msys2-packages
- name: prepare build environment
shell: msys2 {0}
run: |
bash ./sapi/quickstart/windows/msys2-build/install-msys2.sh
- name: install deps lib with source code
shell: msys2 {0}
run: |
bash sapi/download-box/download-box-get-archive-from-server.sh
bash ./sapi/scripts/msys2/install-deps-lib.sh
- name: Prepare
shell: msys2 {0}
run: |
bash ./sapi/scripts/msys2/config-ext.sh
- name: Configure
shell: msys2 {0}
run: |
bash ./sapi/scripts/msys2/config.sh
- name: Build
shell: msys2 {0}
run: |
bash ./sapi/scripts/msys2/build.sh
- name: Archive
shell: msys2 {0}
run: |
bash ./sapi/scripts/msys2/archive.sh
- name: Show Build Result
shell: msys2 {0}
run: |
./bin/swoole-cli.exe -v
./bin/swoole-cli.exe -m
./bin/swoole-cli.exe --ri curl
./bin/swoole-cli.exe --ri swoole
./bin/swoole-cli.exe -r "echo PHP_VERSION;"
ldd ./bin/swoole-cli.exe
- name: get app version with bash
shell: msys2 {0}
run: |
APP_VERSION=$(cat ./APP_VERSION)
APP_NAME=$(cat ./APP_NAME)
echo $APP_VERSION
echo $APP_NAME
echo "APP_VERSION=${APP_VERSION}" >> $GITHUB_ENV
echo "APP_NAME=${APP_NAME}" >> $GITHUB_ENV
- name: production artifacts
uses: actions/upload-artifact@v5
with:
name: ${{ env.APP_NAME }}-${{ env.APP_VERSION }}-msys2-x64
retention-days: 90
path: ${{ env.APP_NAME }}-${{ env.APP_VERSION }}-msys2-x64.zip
- name: gh release
uses: softprops/action-gh-release@v2
if: ${{ startsWith(github.ref, 'refs/tags/') }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
files: ${{ env.APP_NAME }}-${{ env.APP_VERSION }}-msys2-x64.zip
upload-to-cloud-object-storage:
if: 1
runs-on: ubuntu-latest
needs: windows-msys2
steps:
- name: Prepare Run Environment
run:
sudo apt install -y curl
- uses: actions/checkout@v5
- uses: actions/download-artifact@v4
- name: upload artifacts to cloud object storage
if: ${{ (github.repository == 'swoole/swoole-cli') && (startsWith(github.ref, 'refs/tags/')) }}
env:
OSS_SECRET_ID: ${{ secrets.QCLOUD_OSS_SECRET_ID }}
OSS_SECRET_KEY: ${{ secrets.QCLOUD_OSS_SECRET_KEY }}
OSS_BUCKET: ${{ vars.QCLOUD_OSS_BUCKET }}
OSS_REGION: ${{ vars.QCLOUD_OSS_REGION }}
run: |
FILE_NAME=$(ls -d swoole-cli-v*-msys2-x64)
FILE="${{ github.workspace }}/${FILE_NAME}/${FILE_NAME}.zip"
bash sapi/scripts/tencent-cloud-object-storage.sh --upload-file ${FILE}
================================================
FILE: .gitignore
================================================
# These files are generated during building or development and are intentionally
# untracked to ignore by Git. For other development environment specific files,
# such as editor configuration, a good practice is to exclude them using the
# .git/info/exclude in the cloned repository or a global .gitignore file.
# ------------------------------------------------------------------------------
# Common files ignored across the repository
# ------------------------------------------------------------------------------
# Backup copies created by various editors or development tools
*~
# Patches downloaded to patch files or to apply open source contributions
*.patch
# Swap files created by editors and tools to indicate a locked file
*.swp
# Various temporary generated files
*.tmp
# ------------------------------------------------------------------------------
# Generated by the PHP build system
# ------------------------------------------------------------------------------
# Archive library containing .o files, generated during build process
*.a
# Libtool library files generated during build process
*.la
# Directories created by Libtool for storing generated library files
.libs/
# Library object files generated during build process
*.lo
# Temporary library object files generated by compiler and libtool due to failure
*.loT
# Standard object files generated during build process
*.o
# Dependency files generated during build process
*.dep
# Cache directories created by Autoconf tools
autom4te.cache/
# Cache file(s) generated by Autoconf's configure when run as `configure -C`
config.cache
# A log file(s) generated by Autoconf during *nix build system
config.log
# Helper(s) generated by *nix build system to save the last configure command
config.nice
# Generated by Autoconf's configure script for instantiating templates
config.status
# Main *nix build system configuration script(s) generated by Autoconf
configure
# Generated by `./configure` when test programs create temporary files
confdefs.h
conftest*
# Generated by configure scripts on all systems
/main/internal_functions.c
/main/internal_functions_cli.c
# The Libtool script(s) generated by the *nix build system
libtool
# Makefile(s) generated from Makefile fragment templates by `./configure`
Makefile
Makefile.fragments
Makefile.objects
# Directories for shared object files and headers generated by `./configure`
include/
libs/
modules/
# Used by build/gen_stub.php
build/PHP-Parser-*
# ------------------------------------------------------------------------------
# Configuration headers generated by the PHP build system
# ------------------------------------------------------------------------------
config.h
config.h.in
/ext/date/lib/timelib_config.h
/main/build-defs.h
/main/php_config.h.in
/main/php_config.h
/Zend/zend_config.h
# ------------------------------------------------------------------------------
# Manual (man 1 and 8) pages generated from templates for *nix alike systems
# ------------------------------------------------------------------------------
/ext/phar/phar.1
/ext/phar/phar.phar.1
/sapi/cgi/php-cgi.1
/sapi/cli/php.1
/main/cli/php.1
/sapi/fpm/php-fpm.1
/sapi/fpm/php-fpm.8
/sapi/phpdbg/phpdbg.1
/scripts/man1/*.1
# ------------------------------------------------------------------------------
# SAPIs specific ignores
# ------------------------------------------------------------------------------
/sapi/apache2handler/libphp.module
/sapi/fpm/fpm/php-cgi
/sapi/fpm/init.d.php-fpm
/sapi/fpm/php-fpm.conf
/sapi/fpm/php-fpm.service
/sapi/fpm/status.html
/sapi/fpm/www.conf
# ------------------------------------------------------------------------------
# Executable binaries and scripts generated during the build process
# ------------------------------------------------------------------------------
/ext/phar/phar.phar
/ext/phar/phar.php
/pear/install-pear-nozlib.phar
/sapi/cgi/php-cgi
/sapi/fpm/php-fpm
/sapi/phpdbg/phpdbg
/scripts/php-config
/scripts/phpize
bin/swoole-cli
# ------------------------------------------------------------------------------
# Lexer files generated by re2c
# ------------------------------------------------------------------------------
/ext/json/json_scanner.c
/ext/json/php_json_scanner_defs.h
/ext/pdo/pdo_sql_parser.c
/ext/phar/phar_path_check.c
/ext/standard/url_scanner_ex.c
/ext/standard/var_unserializer.c
/sapi/phpdbg/phpdbg_lexer.c
/Zend/zend_ini_scanner.c
/Zend/zend_ini_scanner_defs.h
/Zend/zend_language_scanner.c
/Zend/zend_language_scanner_defs.h
# ------------------------------------------------------------------------------
# PHP parser files generated by bison during the build process
# ------------------------------------------------------------------------------
/ext/json/json_parser.tab.h
/ext/json/json_parser.tab.c
/sapi/phpdbg/phpdbg_parser.c
/sapi/phpdbg/phpdbg_parser.h
/sapi/phpdbg/phpdbg_parser.output
/Zend/zend_ini_parser.c
/Zend/zend_ini_parser.h
/Zend/zend_ini_parser.output
/Zend/zend_language_parser.c
/Zend/zend_language_parser.h
/Zend/zend_language_parser.output
# ------------------------------------------------------------------------------
# Extensions files
# ------------------------------------------------------------------------------
# Miscellaneous extensions files
/ext/opcache/jit/zend_jit_x86.c
/ext/opcache/minilua
# Generated by `cd ext/name && phpize && ./configure`
/ext/*/build/
/ext/*/configure.ac
/ext/*/run-tests.php
# ------------------------------------------------------------------------------
# Generated by Windows build system
# ------------------------------------------------------------------------------
# Generated by `/buildconf.bat`
/configure.bat
/configure.js
# Generated by `/configure.(bat|js)` (architecture dependent)
/config.nice.bat
# NTS debug build x86
/Debug/
# ZTS debug build x86
/Debug_TS/
# NTS build x86
/Release/
# ZTS build x86
/Release_TS/
# Generated by x64 compiler, includes Debug, Debug_TS, Release, Release_TS
/x64/
# Miscellaneous files generated by Windows build system
/main/config.w32.h
/win32/build/deplister.exe
/win32/build/deplister.obj
/win32/*.aps
/win32/*.positions
/win32/*.suo
/win32/ext
/win32/syslog.reg
/win32/wsyslog.h
# Standard object files generated by Visual Studio
*.obj
# ------------------------------------------------------------------------------
# Tests
# ------------------------------------------------------------------------------
# Generated by `./run-tests.php` upon failure
**/tests/**/*.diff
**/tests/**/*.out*
**/tests/**/*.php
**/tests/**/*.exp
**/tests/**/*.log
**/tests/**/*.sh
# Generated by some test cases
**/tests/**/*.db
# Microsoft Access database created for passing to tests
/ext/pdo_odbc/tests/*.mdb
# Files generated by `./run-tests.php -m` when checking for memory leaks
**/tests/**/*.mem
# Test results generated by `./run-tests.php`
php_test_results_*.txt
# Temporary test information generated by `./run-tests.php`
/run-test-info.php
# Temporary POST data placeholder files generated by `./run-tests.php`
phpt.*
# Temporary PHP INI configuration file(s) for tests, generated by `make test`
tmp-php.ini
# ------------------------------------------------------------------------------
# Generated by GCC's gcov and LCOV via build/Makefile.gcov and gcov.php.net
# ------------------------------------------------------------------------------
*.gcda
*.gcno
/gcovr.xml
/gcovr_html/
/lcov_html/
/php_lcov.info
# ------------------------------------------------------------------------------
# Archives generated during the PHP release process
# ------------------------------------------------------------------------------
/*.tar.gz
/*.tar.bz2
/*.tar.xz
/*.tar.gz.asc
/*.tar.bz2.asc
/*.tar.xz.asc
# ------------------------------------------------------------------------------
# Generated by `./configure --enable-dtrace` for using DTrace framework
# ------------------------------------------------------------------------------
/ext/oci8/oci8_dtrace_gen.h
/ext/oci8/oci8_dtrace_gen.h.bak
/Zend/zend_dtrace_gen.h
/Zend/zend_dtrace_gen.h.bak
# ------------------------------------------------------------------------------
# Special cases to invert previous ignore patterns
# ------------------------------------------------------------------------------
!/ext/bcmath/libbcmath/src/config.h
!/ext/fileinfo/libmagic/config.h
!/ext/fileinfo/libmagic.patch
!/ext/fileinfo/magicdata.patch
!/ext/pcre/pcre2lib/config.h
!/win32/build/Makefile
# ------------------------------------------------------------------------------
# Project settings
# ------------------------------------------------------------------------------
/.idea
/.settings
/.project
/.cproject
/.vscode
/make.sh
/bin
/pool/
/vendor
/thirdparty
/var
/ext/redis
/ext/memcached
/ext/imagick
/ext/yaml
/ext/mongodb
/ext/inotify
/ext/swoole_tracker_agent
/ext/loader8
/ext/swoole
/ext/ds
/ext/xlswriter
/ext/uuid
/ext/phpy
/.phpunit.result.cache
/samples/sfx/*.phar
.php-cs-fixer.cache
ldflags.log
cppflags.log
/packages
/conf.d.loader
Makefile.backup
libs.log
/runtime
!/runtime/.gitkeep
*.deb
*.rpm
nfpm-pkg.yaml
/APP_VERSION
/APP_NAME
!/var/.gitkeep
================================================
FILE: .gitmodules
================================================
================================================
FILE: README.md
================================================
# swoole-cli
`Swoole-Cli` 是一个 `PHP`的二进制发行版,<br/>
集成了 `swoole`、`php 内核`、`php-cli`、`php-fpm`以及多个常用扩展。<br/>
`Swoole-Cli`是全部静态编译打包的,不依赖任何操作系统的`so`
动态链接库,具备非常好的移植性,<br/>
可以在任意 `Linux`/`macOS`/`Windows(CygWin)`系统之间复制,下载即可使用。
> 作为 PHP 开发者都应该知道 PHP 有两种运行模式:php-fpm和php-cli,<br/>
> 那么在 Swoole 5.0 中将迎来一种新的运行模式:swoole-cli。<br/>
> <strong>
> Swoole将像node.js这样作为独立程序提供给用户,而不是作为PHP的一个扩展。
> </strong><br/>
> 除此之外swoole-cli会尽可能地对php-src进行裁剪,<br/>
> 移除一些不用的机制、模块、扩展、函数、类型、常量、代码,使得整个程序可以在几分钟之内编译完成。
## 相关文章
- [Swoole-Cli 介绍、使用说明](https://wenda.swoole.com/detail/108876)
- [Swoole-Cli 6.1 版本已发布,PHP 更新至 8.4](https://mp.weixin.qq.com/s/V9HrgUZav6gws1_d6Sucig)
- [Swoole-Cli v6.1 将允许对 array/string/stream 类型使用内置方法](https://mp.weixin.qq.com/s/RmdKC5TLREwjcJFc-upZLQ)
- [Swoole-Cli v5.0.2 增加 opcache/readline 扩展,强化 Cli-Server](https://wenda.swoole.com/detail/108931)
- [Swoole-Cli v5.0.1 使用说明](https://wenda.swoole.com/detail/108876)
- [Swoole-Cli v5.0.0 版本新特性预览之新的运行模式](https://wenda.swoole.com/detail/108706)
- [Swoole-Cli 已提供 Windows 平台 (cygwin64)支持](https://wenda.swoole.com/detail/108743)
- [Swoole 6.2 正式版已发布,增加 10 项新功能](https://mp.weixin.qq.com/s/VsUfNVN-HLFeix1VfLILYw)
- [Swoole 6.2 革命性升级:iouring 替代 epoll,异步 IO 性能飙升至 Golang 的 3 倍、Node.js 的 4.4 倍!](https://mp.weixin.qq.com/s/bcrHZeF1Yu5ITstsl7rLlQ)
- [Swoole v6.2 已悄然构建起媲美 Golang/Node.js 的完整 PHP 异步并发编程生态体系](https://mp.weixin.qq.com/s/6Qr2SZ68hkoRmhugTxnIQA)
- [Swoole 6.2 将内置全新的阻塞 IO 检测工具](https://mp.weixin.qq.com/s/wSyIltuQ0brZMBjpUBUolQ)
- [基于 Swoole RemoteObject 模块实现 MongoDB 协程客户端](https://mp.weixin.qq.com/s/hOVWeg091Ygm4MREugCOfA)
- [Swoole v6.1 关于 mutex、rwlock、spinlock 的重构](https://mp.weixin.qq.com/s/0cQ9t0dwAJ7dPynk3RVWYQ)
- [Swoole v6.1 将提供 typed array 强类型数组实现,增强 PHP 标准库](https://mp.weixin.qq.com/s/yFuxYdNMqxI1VuZg0J07Wg)
- [Swoole v6 2024 重磅更新:Swoole v6 正式发布,增加 16 项新功能](https://mp.weixin.qq.com/s/Ks1x1LNTLdl5jk0sIS6V_w)
- [Swoole v6 协程是否支持 PHP 的 JIT ](https://mp.weixin.qq.com/s/Tm-6XVGQSlz0vDENLB3ylA)
- [Swoole v6 Alpha 版本已发布,为 PHP 带来稳定可靠、生产可用的多线程方案](https://mp.weixin.qq.com/s/IeCGVRFQDVbzVWCIZRGFNg)
- [Swoole v6 将引入 Linux io_uring ,并发读写文件性能提升了 5 倍](https://mp.weixin.qq.com/s/5qnqmjCEb_zxLaT4sR1HAg)
- [Swoole v6 线程池的使用](https://mp.weixin.qq.com/s/wzdH7voOWcHCLuf16SLeIA)
- [Swoole v6 PHP 多线程实现原理 深度剖析](https://mp.weixin.qq.com/s/HzPEg7g3PuN2Xky4EQfnHw)
- [Swoole v6 要来了!即将增加多线程支持](https://segmentfault.com/a/1190000044737434)
- [Swoole v6 开发计划 - 支持多线程运行模式](https://github.com/swoole/rfc/issues/85)
- [Swoole v5.1 增加更多数据库协程客户端支持](https://wenda.swoole.com/detail/109023)
- [phpy v2.2 支持了操作符重载,可直接使用 PHP 语法编写 Numpy 程序](https://mp.weixin.qq.com/s/Xxb6r_IXtnXTrv7CpTvcFg)
- [phpy 2025 支持了更多高级语法](https://mp.weixin.qq.com/s/YCG5ENAVOKzxcdD1Qdepbg)
- [phpy 1.0.8 已发布,现在 PHP 类可以继承 Python 类了](https://mp.weixin.qq.com/s/mosUpNpm-iY2-vlGZQMlsA)
- [phpy 中如何调用自定义 Python 模块](https://mp.weixin.qq.com/s/KOV-XZQVqZSXkMQoiDrsMA)
- [phpy 连接 PHP 与 Python 互调用库,为 PHP 引入 Python 生态,PHP 也可以写 AI 了](https://wenda.swoole.com/detail/109176)
### 相关文章 知乎
- [Swoole-Cli v5.0.1 PHP 的二进制发行版](https://zhuanlan.zhihu.com/p/581695339)
- [Swoole-Cli v5.0.2 增加 opcache/readline 扩展,强化 Cli-Server](https://zhuanlan.zhihu.com/p/610014616)
- [Swoole v6 即将增加多线程支持](https://zhuanlan.zhihu.com/p/688462525)
- [phpy:连接 PHP 与 Python 互调用库,为 PHP 引入 Python 生态,PHP 也可以写 AI 了](https://zhuanlan.zhihu.com/p/670373512)
## [常见问题解答](https://github.com/swoole/swoole-cli/blob/main/docs/FAQ.md)
## 下载`swoole-cli`发行版
- [https://www.swoole.com/download](https://www.swoole.com/download) (recommend)
- [https://github.com/swoole/swoole-cli/releases](https://github.com/swoole/swoole-cli/releases)
- [https://github.com/swoole/swoole-src/releases](https://github.com/swoole/swoole-src/releases)
## 立即使用 swoole-cli
```shell
curl -fSL https://github.com/swoole/swoole-cli/blob/main/setup-swoole-cli-runtime.sh?raw=true | bash
# windows powershell
irm https://github.com/swoole/swoole-cli/blob/main/setup-swoole-cli-runtime.ps1?raw=true | iex
# 来自 https://www.swoole.com/download
curl -fSL https://github.com/swoole/swoole-cli/blob/main/setup-swoole-cli-runtime.sh?raw=true | bash -s -- --mirror china
# 指定发布版本
curl -fSL https://github.com/swoole/swoole-cli/blob/main/setup-swoole-cli-runtime.sh?raw=true | bash -s -- --version v5.1.6.0
```
## `swoole-cli`构建文档
- [linux 版构建文档](docs/linux.md)
- [macOS 版构建文档](docs/macOS.md)
- [windows Cygwin 版构建文档](docs/Cygwin.md)
- [windows WSL 版构建文档](docs/wsl.md)
- [swoole-cli 构建选项文档](docs/options.md)
- [打包成二进制可执行文件 文档](sapi/samples/sfx/README.md)
- [swoole-cli 搭建依赖库镜像服务](sapi/download-box/README.md)
- [快速初始化构建环境](sapi/quickstart/README.md)
## Clone
```shell
git clone https://github.com/swoole/swoole-cli.git
```
```shell
git clone https://github.com/swoole/swoole-cli.git
```
## 快速准备 PHP 运行时
```shell
cd swoole-cli
bash setup-php-runtime.sh
# 来自 https://www.swoole.com/download
bash setup-php-runtime.sh --mirror china
# 使用swoole-cli
# shell脚本中启用别名扩展功能
shopt -s expand_aliases
__DIR__=$(pwd)
export PATH="${__DIR__}/runtime/php/:$PATH"
alias php="php -d curl.cainfo=${__DIR__}/runtime/php/cacert.pem -d openssl.cafile=${__DIR__}/runtime/php/cacert.pem"
which php
php -v
```
## 生成构建脚本
```shell
composer install
php prepare.php
php prepare.php +inotify +mongodb -mysqli
```
* 脚本会自动下载相关的`C/C++`库以及`PECL`扩展
* 可使用`+{ext}`或者`-{ext}`增减扩展
## 进入 Docker Bash
```shell
./make.sh docker-bash
```
> 需要将 `swoole-cli` 的目录映射到容器的 `/work` 目录
## 构建 `C/C++` 依赖库
```shell
./make.sh all-library
```
## 编译配置
```shell
./make.sh config
```
## 构建 swoole-cli
```shell
./make.sh build
```
> 编译成功后会生成`bin/swoole-cli`
## 打包
```shell
./make.sh archive
```
> 打包成功后会生成 `swoole-cli-{version}-{os}-{arch}.tar.xz`
> 压缩包,包含 `swoole-cli` 可执行文件、`LICENSE` 授权协议文件。
## 授权协议
* `swoole-cli` 使用了多个其他开源项目,请认真阅读自动生成的 `bin/LICENSE`
文件中版权协议,遵守对应开源项目的 `LICENSE`
* `swoole-cli`
本身的软件源代码、文档等内容以 `Apache 2.0 LICENSE`+`SWOOLE-CLI LICENSE`
作为双重授权协议,用户需要同时遵守 `Apache 2.0 LICENSE`和`SWOOLE-CLI LICENSE`
所规定的条款
## SWOOLE-CLI LICENSE
* 对 `swoole-cli` 代码进行使用、修改、发布的新项目必须含有 `SWOOLE-CLI LICENSE`
的全部内容
* 使用 `swoole-cli`
代码重新发布为新项目或者产品时,项目或产品名称不得包含 `swoole` 单词
================================================
FILE: TSRM/LICENSE
================================================
Copyright (c) 1999-2006, Andi Gutmans, Sascha Schumann, Zeev Suraski.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
- Neither name of the copyright holders nor the names of their contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
================================================
FILE: TSRM/TSRM.c
================================================
/*
+----------------------------------------------------------------------+
| Thread Safe Resource Manager |
+----------------------------------------------------------------------+
| Copyright (c) 1999-2011, Andi Gutmans, Sascha Schumann, Zeev Suraski |
| This source file is subject to the TSRM license, that is bundled |
| with this package in the file LICENSE |
+----------------------------------------------------------------------+
| Authors: Zeev Suraski <zeev@php.net> |
+----------------------------------------------------------------------+
*/
#include "TSRM.h"
#ifdef ZTS
#include <stdio.h>
#include <stdarg.h>
#if ZEND_DEBUG
# include <assert.h>
# define TSRM_ASSERT(c) assert(c)
#else
# define TSRM_ASSERT(c)
#endif
typedef struct _tsrm_tls_entry tsrm_tls_entry;
/* TSRMLS_CACHE_DEFINE; is already done in Zend, this is being always compiled statically. */
TSRMLS_CACHE_EXTERN();
struct _tsrm_tls_entry {
void **storage;
int count;
THREAD_T thread_id;
tsrm_tls_entry *next;
};
typedef struct {
size_t size;
ts_allocate_ctor ctor;
ts_allocate_dtor dtor;
size_t fast_offset;
int done;
} tsrm_resource_type;
/* The memory manager table */
static tsrm_tls_entry **tsrm_tls_table=NULL;
static int tsrm_tls_table_size;
static ts_rsrc_id id_count;
/* The resource sizes table */
static tsrm_resource_type *resource_types_table=NULL;
static int resource_types_table_size;
/* Reserved space for fast globals access */
static size_t tsrm_reserved_pos = 0;
static size_t tsrm_reserved_size = 0;
static MUTEX_T tsmm_mutex; /* thread-safe memory manager mutex */
static MUTEX_T tsrm_env_mutex; /* tsrm environ mutex */
/* New thread handlers */
static tsrm_thread_begin_func_t tsrm_new_thread_begin_handler = NULL;
static tsrm_thread_end_func_t tsrm_new_thread_end_handler = NULL;
static tsrm_shutdown_func_t tsrm_shutdown_handler = NULL;
/* Debug support */
int tsrm_error(int level, const char *format, ...);
/* Read a resource from a thread's resource storage */
static int tsrm_error_level;
static FILE *tsrm_error_file;
#ifdef TSRM_DEBUG
#define TSRM_ERROR(args) tsrm_error args
#define TSRM_SAFE_RETURN_RSRC(array, offset, range) \
{ \
int unshuffled_offset = TSRM_UNSHUFFLE_RSRC_ID(offset); \
\
if (offset==0) { \
return &array; \
} else if ((unshuffled_offset)>=0 && (unshuffled_offset)<(range)) { \
TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Successfully fetched resource id %d for thread id %ld - 0x%0.8X", \
unshuffled_offset, (long) thread_resources->thread_id, array[unshuffled_offset])); \
return array[unshuffled_offset]; \
} else { \
TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Resource id %d is out of range (%d..%d)", \
unshuffled_offset, TSRM_SHUFFLE_RSRC_ID(0), TSRM_SHUFFLE_RSRC_ID(thread_resources->count-1))); \
return NULL; \
} \
}
#else
#define TSRM_ERROR(args)
#define TSRM_SAFE_RETURN_RSRC(array, offset, range) \
if (offset==0) { \
return &array; \
} else { \
return array[TSRM_UNSHUFFLE_RSRC_ID(offset)]; \
}
#endif
#ifdef TSRM_WIN32
static DWORD tls_key;
# define tsrm_tls_set(what) TlsSetValue(tls_key, (void*)(what))
# define tsrm_tls_get() TlsGetValue(tls_key)
#else
static pthread_key_t tls_key;
# define tsrm_tls_set(what) pthread_setspecific(tls_key, (void*)(what))
# define tsrm_tls_get() pthread_getspecific(tls_key)
#endif
TSRM_TLS bool in_main_thread = false;
TSRM_TLS bool is_thread_shutdown = false;
/* Startup TSRM (call once for the entire process) */
TSRM_API bool tsrm_startup(int expected_threads, int expected_resources, int debug_level, const char *debug_filename)
{/*{{{*/
#ifdef TSRM_WIN32
tls_key = TlsAlloc();
#else
pthread_key_create(&tls_key, 0);
#endif
/* ensure singleton */
in_main_thread = true;
is_thread_shutdown = false;
tsrm_error_file = stderr;
tsrm_error_set(debug_level, debug_filename);
tsrm_tls_table_size = expected_threads;
tsrm_tls_table = (tsrm_tls_entry **) calloc(tsrm_tls_table_size, sizeof(tsrm_tls_entry *));
if (!tsrm_tls_table) {
TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Unable to allocate TLS table"));
is_thread_shutdown = true;
return 0;
}
id_count=0;
resource_types_table_size = expected_resources;
resource_types_table = (tsrm_resource_type *) calloc(resource_types_table_size, sizeof(tsrm_resource_type));
if (!resource_types_table) {
TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Unable to allocate resource types table"));
is_thread_shutdown = true;
free(tsrm_tls_table);
return 0;
}
tsmm_mutex = tsrm_mutex_alloc();
TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Started up TSRM, %d expected threads, %d expected resources", expected_threads, expected_resources));
tsrm_reserved_pos = 0;
tsrm_reserved_size = 0;
tsrm_env_mutex = tsrm_mutex_alloc();
return 1;
}/*}}}*/
static void ts_free_resources(tsrm_tls_entry *thread_resources)
{
/* Need to destroy in reverse order to respect dependencies. */
for (int i = thread_resources->count - 1; i >= 0; i--) {
if (!resource_types_table[i].done) {
if (resource_types_table[i].dtor) {
resource_types_table[i].dtor(thread_resources->storage[i]);
}
if (!resource_types_table[i].fast_offset) {
free(thread_resources->storage[i]);
}
}
}
free(thread_resources->storage);
}
/* Shutdown TSRM (call once for the entire process) */
TSRM_API void tsrm_shutdown(void)
{/*{{{*/
if (is_thread_shutdown) {
/* shutdown must only occur once */
return;
}
is_thread_shutdown = true;
if (!in_main_thread) {
/* only the main thread may shutdown tsrm */
return;
}
for (int i=0; i<tsrm_tls_table_size; i++) {
tsrm_tls_entry *p = tsrm_tls_table[i], *next_p;
while (p) {
next_p = p->next;
if (resource_types_table) {
/* This call will already free p->storage for us */
ts_free_resources(p);
} else {
free(p->storage);
}
free(p);
p = next_p;
}
}
free(tsrm_tls_table);
free(resource_types_table);
tsrm_mutex_free(tsmm_mutex);
tsrm_mutex_free(tsrm_env_mutex);
TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Shutdown TSRM"));
if (tsrm_error_file!=stderr) {
fclose(tsrm_error_file);
}
#ifdef TSRM_WIN32
TlsFree(tls_key);
#else
pthread_setspecific(tls_key, 0);
pthread_key_delete(tls_key);
#endif
if (tsrm_shutdown_handler) {
tsrm_shutdown_handler();
}
tsrm_new_thread_begin_handler = NULL;
tsrm_new_thread_end_handler = NULL;
tsrm_shutdown_handler = NULL;
tsrm_reserved_pos = 0;
tsrm_reserved_size = 0;
}/*}}}*/
/* {{{ */
/* environ lock api */
TSRM_API void tsrm_env_lock(void) {
tsrm_mutex_lock(tsrm_env_mutex);
}
TSRM_API void tsrm_env_unlock(void) {
tsrm_mutex_unlock(tsrm_env_mutex);
} /* }}} */
/* enlarge the arrays for the already active threads */
static void tsrm_update_active_threads(void)
{/*{{{*/
for (int i=0; i<tsrm_tls_table_size; i++) {
tsrm_tls_entry *p = tsrm_tls_table[i];
while (p) {
if (p->count < id_count) {
int j;
p->storage = (void *) realloc(p->storage, sizeof(void *)*id_count);
for (j=p->count; j<id_count; j++) {
if (resource_types_table[j].fast_offset) {
p->storage[j] = (void *) (((char*)p) + resource_types_table[j].fast_offset);
} else {
p->storage[j] = (void *) malloc(resource_types_table[j].size);
}
if (resource_types_table[j].ctor) {
resource_types_table[j].ctor(p->storage[j]);
}
}
p->count = id_count;
}
p = p->next;
}
}
}/*}}}*/
/* allocates a new thread-safe-resource id */
TSRM_API ts_rsrc_id ts_allocate_id(ts_rsrc_id *rsrc_id, size_t size, ts_allocate_ctor ctor, ts_allocate_dtor dtor)
{/*{{{*/
TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Obtaining a new resource id, %d bytes", size));
tsrm_mutex_lock(tsmm_mutex);
/* obtain a resource id */
*rsrc_id = TSRM_SHUFFLE_RSRC_ID(id_count++);
TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Obtained resource id %d", *rsrc_id));
/* store the new resource type in the resource sizes table */
if (resource_types_table_size < id_count) {
tsrm_resource_type *_tmp;
_tmp = (tsrm_resource_type *) realloc(resource_types_table, sizeof(tsrm_resource_type)*id_count);
if (!_tmp) {
TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Unable to allocate storage for resource"));
*rsrc_id = 0;
tsrm_mutex_unlock(tsmm_mutex);
return 0;
}
resource_types_table = _tmp;
resource_types_table_size = id_count;
}
resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].size = size;
resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].ctor = ctor;
resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].dtor = dtor;
resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].fast_offset = 0;
resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].done = 0;
tsrm_update_active_threads();
tsrm_mutex_unlock(tsmm_mutex);
TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Successfully allocated new resource id %d", *rsrc_id));
return *rsrc_id;
}/*}}}*/
/* Reserve space for fast thread-safe-resources */
TSRM_API void tsrm_reserve(size_t size)
{/*{{{*/
tsrm_reserved_pos = 0;
tsrm_reserved_size = TSRM_ALIGNED_SIZE(size);
}/*}}}*/
/* allocates a new fast thread-safe-resource id */
TSRM_API ts_rsrc_id ts_allocate_fast_id(ts_rsrc_id *rsrc_id, size_t *offset, size_t size, ts_allocate_ctor ctor, ts_allocate_dtor dtor)
{/*{{{*/
TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Obtaining a new fast resource id, %d bytes", size));
tsrm_mutex_lock(tsmm_mutex);
/* obtain a resource id */
*rsrc_id = TSRM_SHUFFLE_RSRC_ID(id_count++);
TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Obtained resource id %d", *rsrc_id));
size = TSRM_ALIGNED_SIZE(size);
if (tsrm_reserved_size - tsrm_reserved_pos < size) {
TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Unable to allocate space for fast resource"));
*rsrc_id = 0;
*offset = 0;
tsrm_mutex_unlock(tsmm_mutex);
return 0;
}
*offset = TSRM_ALIGNED_SIZE(sizeof(tsrm_tls_entry)) + tsrm_reserved_pos;
tsrm_reserved_pos += size;
/* store the new resource type in the resource sizes table */
if (resource_types_table_size < id_count) {
tsrm_resource_type *_tmp;
_tmp = (tsrm_resource_type *) realloc(resource_types_table, sizeof(tsrm_resource_type)*id_count);
if (!_tmp) {
TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Unable to allocate storage for resource"));
*rsrc_id = 0;
tsrm_mutex_unlock(tsmm_mutex);
return 0;
}
resource_types_table = _tmp;
resource_types_table_size = id_count;
}
resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].size = size;
resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].ctor = ctor;
resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].dtor = dtor;
resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].fast_offset = *offset;
resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].done = 0;
tsrm_update_active_threads();
tsrm_mutex_unlock(tsmm_mutex);
TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Successfully allocated new resource id %d", *rsrc_id));
return *rsrc_id;
}/*}}}*/
static void set_thread_local_storage_resource_to(tsrm_tls_entry *thread_resource)
{
tsrm_tls_set(thread_resource);
TSRMLS_CACHE = thread_resource;
}
/* Must be called with tsmm_mutex held */
static void allocate_new_resource(tsrm_tls_entry **thread_resources_ptr, THREAD_T thread_id)
{/*{{{*/
TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Creating data structures for thread %x", thread_id));
(*thread_resources_ptr) = (tsrm_tls_entry *) malloc(TSRM_ALIGNED_SIZE(sizeof(tsrm_tls_entry)) + tsrm_reserved_size);
(*thread_resources_ptr)->storage = NULL;
if (id_count > 0) {
(*thread_resources_ptr)->storage = (void **) malloc(sizeof(void *)*id_count);
}
(*thread_resources_ptr)->count = id_count;
(*thread_resources_ptr)->thread_id = thread_id;
(*thread_resources_ptr)->next = NULL;
/* Set thread local storage to this new thread resources structure */
set_thread_local_storage_resource_to(*thread_resources_ptr);
if (tsrm_new_thread_begin_handler) {
tsrm_new_thread_begin_handler(thread_id);
}
for (int i=0; i<id_count; i++) {
if (resource_types_table[i].done) {
(*thread_resources_ptr)->storage[i] = NULL;
} else {
if (resource_types_table[i].fast_offset) {
(*thread_resources_ptr)->storage[i] = (void *) (((char*)(*thread_resources_ptr)) + resource_types_table[i].fast_offset);
} else {
(*thread_resources_ptr)->storage[i] = (void *) malloc(resource_types_table[i].size);
}
if (resource_types_table[i].ctor) {
resource_types_table[i].ctor((*thread_resources_ptr)->storage[i]);
}
}
}
if (tsrm_new_thread_end_handler) {
tsrm_new_thread_end_handler(thread_id);
}
}/*}}}*/
/* fetches the requested resource for the current thread */
TSRM_API void *ts_resource_ex(ts_rsrc_id id, THREAD_T *th_id)
{/*{{{*/
THREAD_T thread_id;
int hash_value;
tsrm_tls_entry *thread_resources, **last_thread_resources;
if (!th_id) {
/* Fast path for looking up the resources for the current
* thread. Its used by just about every call to
* ts_resource_ex(). This avoids the need for a mutex lock
* and our hashtable lookup.
*/
thread_resources = tsrm_tls_get();
if (thread_resources) {
TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Fetching resource id %d for current thread %d", id, (long) thread_resources->thread_id));
/* Read a specific resource from the thread's resources.
* This is called outside of a mutex, so have to be aware about external
* changes to the structure as we read it.
*/
TSRM_SAFE_RETURN_RSRC(thread_resources->storage, id, thread_resources->count);
}
thread_id = tsrm_thread_id();
} else {
thread_id = *th_id;
}
TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Fetching resource id %d for thread %ld", id, (long) thread_id));
tsrm_mutex_lock(tsmm_mutex);
hash_value = THREAD_HASH_OF(thread_id, tsrm_tls_table_size);
thread_resources = tsrm_tls_table[hash_value];
if (!thread_resources) {
allocate_new_resource(&tsrm_tls_table[hash_value], thread_id);
tsrm_mutex_unlock(tsmm_mutex);
return ts_resource_ex(id, &thread_id);
} else {
last_thread_resources = &tsrm_tls_table[hash_value];
while (thread_resources->thread_id != thread_id) {
last_thread_resources = &thread_resources->next;
if (thread_resources->next) {
thread_resources = thread_resources->next;
} else {
allocate_new_resource(&thread_resources->next, thread_id);
tsrm_mutex_unlock(tsmm_mutex);
return ts_resource_ex(id, &thread_id);
}
}
}
/* It's possible that the current thread resources are requested, and that we get here.
* This means that the TSRM key pointer and cached pointer are NULL, but there is still
* a thread resource associated with this ID in the hashtable. This can occur if a thread
* goes away, but its resources are never cleaned up, and then that thread ID is reused.
* Since we don't always have a way to know when a thread goes away, we can't clean up
* the thread's resources before the new thread spawns.
* To solve this issue, we'll free up the old thread resources gracefully (gracefully
* because there might still be resources open like database connection which need to
* be shut down cleanly). After freeing up, we'll create the new resources for this thread
* as if the stale resources never existed in the first place. From that point forward,
* it is as if that situation never occurred.
* The fact that this situation happens isn't that bad because a child process containing
* threads will eventually be respawned anyway by the SAPI, so the stale threads won't last
* forever. */
TSRM_ASSERT(thread_resources->thread_id == thread_id);
if (thread_id == tsrm_thread_id() && !tsrm_tls_get()) {
tsrm_tls_entry *next = thread_resources->next;
/* In case that extensions don't use the pointer passed from the dtor, but incorrectly
* use the global pointer, we need to setup the global pointer temporarily here. */
set_thread_local_storage_resource_to(thread_resources);
/* Free up the old resource from the old thread instance */
ts_free_resources(thread_resources);
free(thread_resources);
/* Allocate a new resource at the same point in the linked list, and relink the next pointer */
allocate_new_resource(last_thread_resources, thread_id);
thread_resources = *last_thread_resources;
thread_resources->next = next;
/* We don't have to tail-call ts_resource_ex, we can take the fast path to the return
* because we already have the correct pointer. */
}
tsrm_mutex_unlock(tsmm_mutex);
/* Read a specific resource from the thread's resources.
* This is called outside of a mutex, so have to be aware about external
* changes to the structure as we read it.
*/
TSRM_SAFE_RETURN_RSRC(thread_resources->storage, id, thread_resources->count);
}/*}}}*/
/* frees all resources allocated for the current thread */
void ts_free_thread(void)
{/*{{{*/
tsrm_tls_entry *thread_resources;
THREAD_T thread_id = tsrm_thread_id();
int hash_value;
tsrm_tls_entry *last=NULL;
TSRM_ASSERT(!in_main_thread);
tsrm_mutex_lock(tsmm_mutex);
hash_value = THREAD_HASH_OF(thread_id, tsrm_tls_table_size);
thread_resources = tsrm_tls_table[hash_value];
while (thread_resources) {
if (thread_resources->thread_id == thread_id) {
ts_free_resources(thread_resources);
if (last) {
last->next = thread_resources->next;
} else {
tsrm_tls_table[hash_value] = thread_resources->next;
}
tsrm_tls_set(0);
free(thread_resources);
break;
}
if (thread_resources->next) {
last = thread_resources;
}
thread_resources = thread_resources->next;
}
tsrm_mutex_unlock(tsmm_mutex);
}/*}}}*/
/* deallocates all occurrences of a given id */
void ts_free_id(ts_rsrc_id id)
{/*{{{*/
int rsrc_id = TSRM_UNSHUFFLE_RSRC_ID(id);
tsrm_mutex_lock(tsmm_mutex);
TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Freeing resource id %d", id));
if (tsrm_tls_table) {
for (int i=0; i<tsrm_tls_table_size; i++) {
tsrm_tls_entry *p = tsrm_tls_table[i];
while (p) {
if (p->count > rsrc_id && p->storage[rsrc_id]) {
if (resource_types_table) {
if (resource_types_table[rsrc_id].dtor) {
resource_types_table[rsrc_id].dtor(p->storage[rsrc_id]);
}
if (!resource_types_table[rsrc_id].fast_offset) {
free(p->storage[rsrc_id]);
}
}
p->storage[rsrc_id] = NULL;
}
p = p->next;
}
}
}
resource_types_table[rsrc_id].done = 1;
tsrm_mutex_unlock(tsmm_mutex);
TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Successfully freed resource id %d", id));
}/*}}}*/
TSRM_API void ts_apply_for_id(ts_rsrc_id id, void (*cb)(void *))
{
int rsrc_id = TSRM_UNSHUFFLE_RSRC_ID(id);
tsrm_mutex_lock(tsmm_mutex);
if (tsrm_tls_table && resource_types_table) {
for (int i = 0; i < tsrm_tls_table_size; i++) {
tsrm_tls_entry *p = tsrm_tls_table[i];
while (p) {
if (p->count > rsrc_id && p->storage[rsrc_id]) {
cb(p->storage[rsrc_id]);
}
p = p->next;
}
}
}
tsrm_mutex_unlock(tsmm_mutex);
}
/*
* Utility Functions
*/
/* Obtain the current thread id */
TSRM_API THREAD_T tsrm_thread_id(void)
{/*{{{*/
#ifdef TSRM_WIN32
return GetCurrentThreadId();
#else
return pthread_self();
#endif
}/*}}}*/
/* Allocate a mutex */
TSRM_API MUTEX_T tsrm_mutex_alloc(void)
{/*{{{*/
MUTEX_T mutexp;
#ifdef TSRM_WIN32
mutexp = malloc(sizeof(CRITICAL_SECTION));
InitializeCriticalSection(mutexp);
#else
mutexp = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
pthread_mutex_init(mutexp,NULL);
#endif
#ifdef THR_DEBUG
printf("Mutex created thread: %d\n",mythreadid());
#endif
return( mutexp );
}/*}}}*/
/* Free a mutex */
TSRM_API void tsrm_mutex_free(MUTEX_T mutexp)
{/*{{{*/
if (mutexp) {
#ifdef TSRM_WIN32
DeleteCriticalSection(mutexp);
free(mutexp);
#else
pthread_mutex_destroy(mutexp);
free(mutexp);
#endif
}
#ifdef THR_DEBUG
printf("Mutex freed thread: %d\n",mythreadid());
#endif
}/*}}}*/
/*
Lock a mutex.
A return value of 0 indicates success
*/
TSRM_API int tsrm_mutex_lock(MUTEX_T mutexp)
{/*{{{*/
TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Mutex locked thread: %ld", tsrm_thread_id()));
#ifdef TSRM_WIN32
EnterCriticalSection(mutexp);
return 0;
#else
return pthread_mutex_lock(mutexp);
#endif
}/*}}}*/
/*
Unlock a mutex.
A return value of 0 indicates success
*/
TSRM_API int tsrm_mutex_unlock(MUTEX_T mutexp)
{/*{{{*/
TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Mutex unlocked thread: %ld", tsrm_thread_id()));
#ifdef TSRM_WIN32
LeaveCriticalSection(mutexp);
return 0;
#else
return pthread_mutex_unlock(mutexp);
#endif
}/*}}}*/
/*
Changes the signal mask of the calling thread
*/
#ifdef HAVE_SIGPROCMASK
TSRM_API int tsrm_sigmask(int how, const sigset_t *set, sigset_t *oldset)
{/*{{{*/
TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Changed sigmask in thread: %ld", tsrm_thread_id()));
return pthread_sigmask(how, set, oldset);
}/*}}}*/
#endif
TSRM_API void *tsrm_set_new_thread_begin_handler(tsrm_thread_begin_func_t new_thread_begin_handler)
{/*{{{*/
void *retval = (void *) tsrm_new_thread_begin_handler;
tsrm_new_thread_begin_handler = new_thread_begin_handler;
return retval;
}/*}}}*/
TSRM_API void *tsrm_set_new_thread_end_handler(tsrm_thread_end_func_t new_thread_end_handler)
{/*{{{*/
void *retval = (void *) tsrm_new_thread_end_handler;
tsrm_new_thread_end_handler = new_thread_end_handler;
return retval;
}/*}}}*/
TSRM_API void *tsrm_set_shutdown_handler(tsrm_shutdown_func_t shutdown_handler)
{/*{{{*/
void *retval = (void *) tsrm_shutdown_handler;
tsrm_shutdown_handler = shutdown_handler;
return retval;
}/*}}}*/
/*
* Debug support
*/
#ifdef TSRM_DEBUG
int tsrm_error(int level, const char *format, ...)
{/*{{{*/
if (level<=tsrm_error_level) {
va_list args;
int size;
fprintf(tsrm_error_file, "TSRM: ");
va_start(args, format);
size = vfprintf(tsrm_error_file, format, args);
va_end(args);
fprintf(tsrm_error_file, "\n");
fflush(tsrm_error_file);
return size;
} else {
return 0;
}
}/*}}}*/
#endif
void tsrm_error_set(int level, const char *debug_filename)
{/*{{{*/
tsrm_error_level = level;
#ifdef TSRM_DEBUG
if (tsrm_error_file!=stderr) { /* close files opened earlier */
fclose(tsrm_error_file);
}
if (debug_filename) {
tsrm_error_file = fopen(debug_filename, "w");
if (!tsrm_error_file) {
tsrm_error_file = stderr;
}
} else {
tsrm_error_file = stderr;
}
#endif
}/*}}}*/
TSRM_API void *tsrm_get_ls_cache(void)
{/*{{{*/
return tsrm_tls_get();
}/*}}}*/
#ifdef HAVE_JIT
/* Returns offset of tsrm_ls_cache slot from Thread Control Block address */
TSRM_API size_t tsrm_get_ls_cache_tcb_offset(void)
{/*{{{*/
#if defined(__APPLE__) && defined(__x86_64__)
// TODO: Implement support for fast JIT ZTS code ???
return 0;
#elif defined(__x86_64__) && defined(__GNUC__) && !defined(__FreeBSD__) && \
!defined(__NetBSD__) && !defined(__OpenBSD__) && !defined(__MUSL__) && \
!defined(__HAIKU__)
size_t ret;
asm ("movq _tsrm_ls_cache@gottpoff(%%rip),%0"
: "=r" (ret));
return ret;
#elif defined(__i386__) && defined(__GNUC__) && !defined(__FreeBSD__) && \
!defined(__NetBSD__) && !defined(__OpenBSD__) && !defined(__MUSL__) && \
!defined(__HAIKU__)
size_t ret;
asm ("leal _tsrm_ls_cache@ntpoff,%0"
: "=r" (ret));
return ret;
#elif defined(__aarch64__)
size_t ret;
# ifdef __APPLE__
// Points to struct TLVDecriptor for _tsrm_ls_cache in macOS.
asm("adrp %0, #__tsrm_ls_cache@TLVPPAGE\n\t"
"ldr %0, [%0, #__tsrm_ls_cache@TLVPPAGEOFF]"
: "=r" (ret));
# elif defined(TSRM_TLS_MODEL_DEFAULT)
/* Surplus Static TLS space isn't guaranteed. */
ret = 0;
# elif defined(TSRM_TLS_MODEL_INITIAL_EXEC)
asm("adrp %0, :gottprel:_tsrm_ls_cache\n\t"
"ldr %0, [%0, #:gottprel_lo12:_tsrm_ls_cache]"
: "=r" (ret));
# elif defined(TSRM_TLS_MODEL_LOCAL_EXEC)
asm("mov %0, xzr\n\t"
"add %0, %0, #:tprel_hi12:_tsrm_ls_cache, lsl #12\n\t"
"add %0, %0, #:tprel_lo12_nc:_tsrm_ls_cache"
: "=r" (ret));
# else
# error "TSRM TLS model not set"
# endif
return ret;
#else
return 0;
#endif
}/*}}}*/
#endif
TSRM_API bool tsrm_is_main_thread(void)
{/*{{{*/
return in_main_thread;
}/*}}}*/
TSRM_API bool tsrm_is_shutdown(void)
{/*{{{*/
return is_thread_shutdown;
}/*}}}*/
TSRM_API const char *tsrm_api_name(void)
{/*{{{*/
#ifdef TSRM_WIN32
return "Windows Threads";
#else
return "POSIX Threads";
#endif
}/*}}}*/
TSRM_API bool tsrm_is_managed_thread(void)
{/*{{{*/
return tsrm_tls_get() ? true : false;
}/*}}}*/
#endif /* ZTS */
================================================
FILE: TSRM/TSRM.h
================================================
/*
+----------------------------------------------------------------------+
| Thread Safe Resource Manager |
+----------------------------------------------------------------------+
| Copyright (c) 1999-2011, Andi Gutmans, Sascha Schumann, Zeev Suraski |
| This source file is subject to the TSRM license, that is bundled |
| with this package in the file LICENSE |
+----------------------------------------------------------------------+
| Authors: Zeev Suraski <zeev@php.net> |
+----------------------------------------------------------------------+
*/
#ifndef TSRM_H
#define TSRM_H
#if !defined(__CYGWIN__) && defined(_WIN32)
# define TSRM_WIN32
# include <Zend/zend_config.w32.h>
#else
# include <main/php_config.h>
#endif
#include <stdint.h>
#include <stdbool.h>
#ifdef TSRM_WIN32
# ifdef TSRM_EXPORTS
# define TSRM_API __declspec(dllexport)
# else
# define TSRM_API __declspec(dllimport)
# endif
#elif defined(__GNUC__) && __GNUC__ >= 4
# define TSRM_API __attribute__ ((visibility("default")))
#else
# define TSRM_API
#endif
typedef intptr_t tsrm_intptr_t;
typedef uintptr_t tsrm_uintptr_t;
/* Only compile multi-threading functions if we're in ZTS mode */
#ifdef ZTS
#ifdef TSRM_WIN32
# ifndef TSRM_INCLUDE_FULL_WINDOWS_HEADERS
# define WIN32_LEAN_AND_MEAN
# endif
#else
# include <pthread.h>
#endif
#if SIZEOF_SIZE_T == 4
# define TSRM_ALIGNED_SIZE(size) \
(((size) + INT32_C(15)) & ~INT32_C(15))
#else
# define TSRM_ALIGNED_SIZE(size) \
(((size) + INT64_C(15)) & ~INT64_C(15))
#endif
typedef int ts_rsrc_id;
/* Define THREAD_T and MUTEX_T */
#ifdef TSRM_WIN32
# define THREAD_T DWORD
# define MUTEX_T CRITICAL_SECTION *
#else
# define THREAD_T pthread_t
# define MUTEX_T pthread_mutex_t *
#endif
#include <signal.h>
typedef void (*ts_allocate_ctor)(void *);
typedef void (*ts_allocate_dtor)(void *);
#define THREAD_HASH_OF(thr,ts) (unsigned long)thr%(unsigned long)ts
#ifdef __cplusplus
extern "C" {
#endif
/* startup/shutdown */
TSRM_API bool tsrm_startup(int expected_threads, int expected_resources, int debug_level, const char *debug_filename);
TSRM_API void tsrm_shutdown(void);
/* environ lock API */
TSRM_API void tsrm_env_lock(void);
TSRM_API void tsrm_env_unlock(void);
/* allocates a new thread-safe-resource id */
TSRM_API ts_rsrc_id ts_allocate_id(ts_rsrc_id *rsrc_id, size_t size, ts_allocate_ctor ctor, ts_allocate_dtor dtor);
/* Fast resource in reserved (pre-allocated) space */
TSRM_API void tsrm_reserve(size_t size);
TSRM_API ts_rsrc_id ts_allocate_fast_id(ts_rsrc_id *rsrc_id, size_t *offset, size_t size, ts_allocate_ctor ctor, ts_allocate_dtor dtor);
/* fetches the requested resource for the current thread */
TSRM_API void *ts_resource_ex(ts_rsrc_id id, THREAD_T *th_id);
#define ts_resource(id) ts_resource_ex(id, NULL)
/* frees all resources allocated for the current thread */
TSRM_API void ts_free_thread(void);
/* deallocates all occurrences of a given id */
TSRM_API void ts_free_id(ts_rsrc_id id);
/* Runs a callback on all resources of the given id.
* The caller is responsible for ensuring the underlying resources don't data-race. */
TSRM_API void ts_apply_for_id(ts_rsrc_id id, void (*cb)(void *));
/* Debug support */
#define TSRM_ERROR_LEVEL_ERROR 1
#define TSRM_ERROR_LEVEL_CORE 2
#define TSRM_ERROR_LEVEL_INFO 3
typedef void (*tsrm_thread_begin_func_t)(THREAD_T thread_id);
typedef void (*tsrm_thread_end_func_t)(THREAD_T thread_id);
typedef void (*tsrm_shutdown_func_t)(void);
TSRM_API int tsrm_error(int level, const char *format, ...);
TSRM_API void tsrm_error_set(int level, const char *debug_filename);
/* utility functions */
TSRM_API THREAD_T tsrm_thread_id(void);
TSRM_API MUTEX_T tsrm_mutex_alloc(void);
TSRM_API void tsrm_mutex_free(MUTEX_T mutexp);
TSRM_API int tsrm_mutex_lock(MUTEX_T mutexp);
TSRM_API int tsrm_mutex_unlock(MUTEX_T mutexp);
#ifdef HAVE_SIGPROCMASK
TSRM_API int tsrm_sigmask(int how, const sigset_t *set, sigset_t *oldset);
#endif
TSRM_API void *tsrm_set_new_thread_begin_handler(tsrm_thread_begin_func_t new_thread_begin_handler);
TSRM_API void *tsrm_set_new_thread_end_handler(tsrm_thread_end_func_t new_thread_end_handler);
TSRM_API void *tsrm_set_shutdown_handler(tsrm_shutdown_func_t shutdown_handler);
TSRM_API void *tsrm_get_ls_cache(void);
#ifdef HAVE_JIT
TSRM_API size_t tsrm_get_ls_cache_tcb_offset(void);
#endif
TSRM_API bool tsrm_is_main_thread(void);
TSRM_API bool tsrm_is_shutdown(void);
TSRM_API const char *tsrm_api_name(void);
TSRM_API bool tsrm_is_managed_thread(void);
#ifdef TSRM_WIN32
# define TSRM_TLS __declspec(thread)
#else
# define TSRM_TLS __thread
#endif
#ifndef __has_attribute
# define __has_attribute(x) 0
#endif
#if !__has_attribute(tls_model) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__MUSL__) || defined(__HAIKU__)
# define TSRM_TLS_MODEL_ATTR
# define TSRM_TLS_MODEL_DEFAULT
#elif __PIC__
# define TSRM_TLS_MODEL_ATTR __attribute__((tls_model("initial-exec")))
# define TSRM_TLS_MODEL_INITIAL_EXEC
#else
# define TSRM_TLS_MODEL_ATTR __attribute__((tls_model("local-exec")))
# define TSRM_TLS_MODEL_LOCAL_EXEC
#endif
#define TSRM_SHUFFLE_RSRC_ID(rsrc_id) ((rsrc_id)+1)
#define TSRM_UNSHUFFLE_RSRC_ID(rsrc_id) ((rsrc_id)-1)
#define TSRMG(id, type, element) (TSRMG_BULK(id, type)->element)
#define TSRMG_BULK(id, type) ((type) (*((void ***) tsrm_get_ls_cache()))[TSRM_UNSHUFFLE_RSRC_ID(id)])
#define TSRMG_FAST(offset, type, element) (TSRMG_FAST_BULK(offset, type)->element)
#define TSRMG_FAST_BULK(offset, type) ((type) (((char*) tsrm_get_ls_cache())+(offset)))
#define TSRMG_STATIC(id, type, element) (TSRMG_BULK_STATIC(id, type)->element)
#define TSRMG_BULK_STATIC(id, type) ((type) (*((void ***) TSRMLS_CACHE))[TSRM_UNSHUFFLE_RSRC_ID(id)])
#define TSRMG_FAST_STATIC(offset, type, element) (TSRMG_FAST_BULK_STATIC(offset, type)->element)
#define TSRMG_FAST_BULK_STATIC(offset, type) ((type) (((char*) TSRMLS_CACHE)+(offset)))
#define TSRMLS_MAIN_CACHE_EXTERN() extern TSRM_TLS void *TSRMLS_CACHE TSRM_TLS_MODEL_ATTR;
#define TSRMLS_MAIN_CACHE_DEFINE() TSRM_TLS void *TSRMLS_CACHE TSRM_TLS_MODEL_ATTR = NULL;
#define TSRMLS_CACHE_EXTERN() extern TSRM_TLS void *TSRMLS_CACHE;
#define TSRMLS_CACHE_DEFINE() TSRM_TLS void *TSRMLS_CACHE = NULL;
#define TSRMLS_CACHE_UPDATE() TSRMLS_CACHE = tsrm_get_ls_cache()
#define TSRMLS_CACHE _tsrm_ls_cache
#ifdef __cplusplus
}
#endif
#else /* non ZTS */
#define tsrm_env_lock()
#define tsrm_env_unlock()
#define TSRMG_STATIC(id, type, element)
#define TSRMLS_MAIN_CACHE_EXTERN()
#define TSRMLS_MAIN_CACHE_DEFINE()
#define TSRMLS_CACHE_EXTERN()
#define TSRMLS_CACHE_DEFINE()
#define TSRMLS_CACHE_UPDATE()
#define TSRMLS_CACHE
#define TSRM_TLS
#endif /* ZTS */
#endif /* TSRM_H */
================================================
FILE: TSRM/config.w32
================================================
// vim:ft=javascript
ADD_SOURCES("TSRM", "TSRM.c tsrm_win32.c");
ADD_FLAG("CFLAGS_BD_TSRM", "/D ZEND_ENABLE_STATIC_TSRMLS_CACHE=1");
================================================
FILE: TSRM/threads.m4
================================================
dnl Copyright (c) 1999, 2000 Sascha Schumann. All rights reserved.
dnl
dnl Redistribution and use in source and binary forms, with or without
dnl modification, are permitted provided that the following conditions
dnl are met:
dnl
dnl 1. Redistributions of source code must retain the above copyright
dnl notice, this list of conditions and the following disclaimer.
dnl
dnl 2. Redistributions in binary form must reproduce the above copyright
dnl notice, this list of conditions and the following disclaimer in
dnl the documentation and/or other materials provided with the
dnl distribution.
dnl
dnl THIS SOFTWARE IS PROVIDED BY SASCHA SCHUMANN ``AS IS'' AND ANY
dnl EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
dnl IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
dnl PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SASCHA SCHUMANN OR
dnl HIS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
dnl SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
dnl NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
dnl LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
dnl HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
dnl STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
dnl ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
dnl OF THE POSSIBILITY OF SUCH DAMAGE.
dnl
dnl PTHREADS_FLAGS
dnl
dnl Set some magic defines to achieve POSIX threads conformance.
dnl
AC_DEFUN([PTHREADS_FLAGS],[
case $host_alias in
*solaris*)
PTHREAD_FLAGS="-D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT";;
*freebsd*)
PTHREAD_FLAGS="-D_REENTRANT -D_THREAD_SAFE";;
*linux*)
PTHREAD_FLAGS=-D_REENTRANT;;
*aix*)
PTHREAD_FLAGS=-D_THREAD_SAFE;;
*hpux*)
PTHREAD_FLAGS=-D_REENTRANT;;
*sco*)
PTHREAD_FLAGS=-D_REENTRANT;;
esac
if test -n "$PTHREAD_FLAGS"; then
CPPFLAGS="$CPPFLAGS $PTHREAD_FLAGS"
fi
])
dnl
dnl PTHREADS_CHECK_COMPILE
dnl
dnl Check whether the current setup can use POSIX threads calls.
dnl
AC_DEFUN([PTHREADS_CHECK_COMPILE], [
AC_LINK_IFELSE([ AC_LANG_SOURCE([
#include <pthread.h>
#include <stddef.h>
void *thread_routine(void *data) {
return data;
}
int main(void) {
pthread_t thd;
pthread_mutexattr_t mattr;
int data = 1;
pthread_mutexattr_init(&mattr);
return pthread_create(&thd, NULL, thread_routine, &data);
} ]) ], [
pthreads_checked=yes
], [
pthreads_checked=no
]
) ] )
dnl
dnl PTHREADS_CHECK
dnl
dnl Try to find a way to enable POSIX threads.
dnl
dnl Magic flags
dnl -kthread gcc (FreeBSD)
dnl -Kthread UDK cc (UnixWare)
dnl -mt WorkShop cc (Solaris)
dnl -mthreads gcc (AIX)
dnl -pthread gcc (Linux, FreeBSD, NetBSD, OpenBSD)
dnl -pthreads gcc (Solaris)
dnl -qthreaded AIX cc V5
dnl -threads gcc (HP-UX)
dnl
AC_DEFUN([PTHREADS_CHECK],[
AC_CACHE_CHECK(for pthreads_cflags,ac_cv_pthreads_cflags,[
ac_cv_pthreads_cflags=
if test "$pthreads_working" != "yes"; then
for flag in -kthread -pthread -pthreads -mthreads -Kthread -threads -mt -qthreaded; do
ac_save=$CFLAGS
CFLAGS="$CFLAGS $flag"
PTHREADS_CHECK_COMPILE
CFLAGS=$ac_save
if test "$pthreads_checked" = "yes"; then
ac_cv_pthreads_cflags=$flag
break
fi
done
fi
])
AC_CACHE_CHECK(for pthreads_lib, ac_cv_pthreads_lib,[
ac_cv_pthreads_lib=
if test "$pthreads_working" != "yes"; then
for lib in pthread pthreads c_r; do
ac_save=$LIBS
LIBS="$LIBS -l$lib"
PTHREADS_CHECK_COMPILE
LIBS=$ac_save
if test "$pthreads_checked" = "yes"; then
ac_cv_pthreads_lib=$lib
break
fi
done
fi
])
if test "x$ac_cv_pthreads_cflags" != "x" || test "x$ac_cv_pthreads_lib" != "x"; then
pthreads_working="yes"
fi
])
================================================
FILE: TSRM/tsrm.m4
================================================
dnl This file contains TSRM specific autoconf macros.
dnl
dnl TSRM_CHECK_PTHREADS
dnl
AC_DEFUN([TSRM_CHECK_PTHREADS],[
PTHREADS_CHECK
if test "$pthreads_working" != "yes"; then
AC_MSG_ERROR(Your system seems to lack POSIX threads.)
fi
AC_DEFINE(PTHREADS, 1, Whether to use Pthreads)
AC_MSG_CHECKING(for POSIX threads)
AC_MSG_RESULT(yes)
])
================================================
FILE: TSRM/tsrm_win32.c
================================================
/*
+----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| https://www.php.net/license/3_01.txt |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Daniel Beulshausen <daniel@php4win.de> |
+----------------------------------------------------------------------+
*/
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <process.h>
#include <time.h>
#include <errno.h>
#define TSRM_INCLUDE_FULL_WINDOWS_HEADERS
#include "SAPI.h"
#include "TSRM.h"
#ifdef TSRM_WIN32
#include <Sddl.h>
#include "tsrm_win32.h"
#include "zend_virtual_cwd.h"
#include "win32/ioutil.h"
#include "win32/winutil.h"
#ifdef ZTS
static ts_rsrc_id win32_globals_id;
#else
static tsrm_win32_globals win32_globals;
#endif
static void tsrm_win32_ctor(tsrm_win32_globals *globals)
{/*{{{*/
#ifdef ZTS
TSRMLS_CACHE_UPDATE();
#endif
globals->process = NULL;
globals->shm = NULL;
globals->process_size = 0;
globals->shm_size = 0;
globals->comspec = _strdup("cmd.exe");
/* Set it to INVALID_HANDLE_VALUE
* It will be initialized correctly in tsrm_win32_access or set to
* NULL if no impersonation has been done.
* the impersonated token can't be set here as the impersonation
* will happen later, in fcgi_accept_request (or whatever is the
* SAPI being used).
*/
globals->impersonation_token = INVALID_HANDLE_VALUE;
globals->impersonation_token_sid = NULL;
}/*}}}*/
static void tsrm_win32_dtor(tsrm_win32_globals *globals)
{/*{{{*/
shm_pair *ptr;
if (globals->process) {
free(globals->process);
}
if (globals->shm) {
for (ptr = globals->shm; ptr < (globals->shm + globals->shm_size); ptr++) {
UnmapViewOfFile(ptr->descriptor);
CloseHandle(ptr->segment);
}
free(globals->shm);
}
free(globals->comspec);
if (globals->impersonation_token && globals->impersonation_token != INVALID_HANDLE_VALUE ) {
CloseHandle(globals->impersonation_token);
}
if (globals->impersonation_token_sid) {
free(globals->impersonation_token_sid);
}
}/*}}}*/
TSRM_API void tsrm_win32_startup(void)
{/*{{{*/
#ifdef ZTS
ts_allocate_id(&win32_globals_id, sizeof(tsrm_win32_globals), (ts_allocate_ctor)tsrm_win32_ctor, (ts_allocate_dtor)tsrm_win32_dtor);
#else
tsrm_win32_ctor(&win32_globals);
#endif
}/*}}}*/
TSRM_API void tsrm_win32_shutdown(void)
{/*{{{*/
#ifndef ZTS
tsrm_win32_dtor(&win32_globals);
#endif
}/*}}}*/
const char * tsrm_win32_get_path_sid_key(const char *pathname, size_t pathname_len, size_t *key_len)
{/*{{{*/
PSID pSid = TWG(impersonation_token_sid);
char *ptcSid = NULL;
char *bucket_key = NULL;
size_t ptc_sid_len;
if (!pSid) {
*key_len = pathname_len;
return pathname;
}
if (!ConvertSidToStringSid(pSid, &ptcSid)) {
*key_len = 0;
return NULL;
}
ptc_sid_len = strlen(ptcSid);
*key_len = pathname_len + ptc_sid_len;
bucket_key = (char *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, *key_len + 1);
if (!bucket_key) {
LocalFree(ptcSid);
*key_len = 0;
return NULL;
}
memcpy(bucket_key, ptcSid, ptc_sid_len);
memcpy(bucket_key + ptc_sid_len, pathname, pathname_len + 1);
LocalFree(ptcSid);
return bucket_key;
}/*}}}*/
PSID tsrm_win32_get_token_sid(HANDLE hToken)
{/*{{{*/
DWORD dwLength = 0;
PTOKEN_USER pTokenUser = NULL;
DWORD sid_len;
PSID pResultSid = NULL;
/* Get the actual size of the TokenUser structure */
if (!GetTokenInformation(
hToken, TokenUser, (LPVOID) pTokenUser, 0, &dwLength)) {
if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
goto Finished;
}
pTokenUser = (PTOKEN_USER)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwLength);
if (pTokenUser == NULL) {
goto Finished;
}
}
/* and fetch it now */
if (!GetTokenInformation(
hToken, TokenUser, (LPVOID) pTokenUser, dwLength, &dwLength)) {
goto Finished;
}
sid_len = GetLengthSid(pTokenUser->User.Sid);
/* ConvertSidToStringSid(pTokenUser->User.Sid, &ptcSidOwner); */
pResultSid = malloc(sid_len);
if (!pResultSid) {
goto Finished;
}
if (!CopySid(sid_len, pResultSid, pTokenUser->User.Sid)) {
goto Finished;
}
HeapFree(GetProcessHeap(), 0, (LPVOID)pTokenUser);
return pResultSid;
Finished:
if (pResultSid) {
free(pResultSid);
}
/* Free the buffer for the token groups. */
if (pTokenUser != NULL) {
HeapFree(GetProcessHeap(), 0, (LPVOID)pTokenUser);
}
return NULL;
}/*}}}*/
TSRM_API int tsrm_win32_access(const char *pathname, int mode)
{/*{{{*/
time_t t;
HANDLE thread_token = NULL;
PSID token_sid;
SECURITY_INFORMATION sec_info = OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION;
GENERIC_MAPPING gen_map = { FILE_GENERIC_READ, FILE_GENERIC_WRITE, FILE_GENERIC_EXECUTE, FILE_ALL_ACCESS };
DWORD priv_set_length = sizeof(PRIVILEGE_SET);
PRIVILEGE_SET privilege_set = {0};
DWORD sec_desc_length = 0, desired_access = 0, granted_access = 0;
BYTE * psec_desc = NULL;
BOOL fAccess = FALSE;
realpath_cache_bucket * bucket = NULL;
char real_path[MAXPATHLEN] = {0};
if(!IS_ABSOLUTE_PATH(pathname, strlen(pathname)+1)) {
if(tsrm_realpath(pathname, real_path) == NULL) {
SET_ERRNO_FROM_WIN32_CODE(ERROR_FILE_NOT_FOUND);
return -1;
}
pathname = real_path;
}
PHP_WIN32_IOUTIL_INIT_W(pathname)
if (!pathw) {
return -1;
}
/* Either access call failed, or the mode was asking for a specific check.*/
int ret = php_win32_ioutil_access_w(pathw, mode);
if (0 > ret || X_OK == mode || F_OK == mode) {
PHP_WIN32_IOUTIL_CLEANUP_W()
return ret;
}
/* Only in NTS when impersonate==1 (aka FastCGI) */
/*
AccessCheck() requires an impersonation token. We first get a primary
token and then create a duplicate impersonation token. The
impersonation token is not actually assigned to the thread, but is
used in the call to AccessCheck. Thus, this function itself never
impersonates, but does use the identity of the thread. If the thread
was impersonating already, this function uses that impersonation context.
*/
if(!OpenThreadToken(GetCurrentThread(), TOKEN_ALL_ACCESS, TRUE, &thread_token)) {
if (GetLastError() == ERROR_NO_TOKEN) {
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &thread_token)) {
TWG(impersonation_token) = NULL;
goto Finished;
}
}
}
/* token_sid will be freed in tsrmwin32_dtor */
token_sid = tsrm_win32_get_token_sid(thread_token);
if (!token_sid) {
if (TWG(impersonation_token_sid)) {
free(TWG(impersonation_token_sid));
}
TWG(impersonation_token_sid) = NULL;
goto Finished;
}
/* Different identity, we need a new impersonated token as well */
if (!TWG(impersonation_token_sid) || !EqualSid(token_sid, TWG(impersonation_token_sid))) {
if (TWG(impersonation_token_sid)) {
free(TWG(impersonation_token_sid));
}
TWG(impersonation_token_sid) = token_sid;
/* Duplicate the token as impersonated token */
if (!DuplicateToken(thread_token, SecurityImpersonation, &TWG(impersonation_token))) {
goto Finished;
}
} else {
/* we already have it, free it then */
free(token_sid);
}
if (CWDG(realpath_cache_size_limit)) {
t = time(0);
bucket = realpath_cache_lookup(pathname, strlen(pathname), t);
if(bucket == NULL && !real_path[0]) {
/* We used the pathname directly. Call tsrm_realpath */
/* so that entry is created in realpath cache */
if(tsrm_realpath(pathname, real_path) != NULL) {
pathname = real_path;
bucket = realpath_cache_lookup(pathname, strlen(pathname), t);
PHP_WIN32_IOUTIL_REINIT_W(pathname);
}
}
}
/* Do a full access check because access() will only check read-only attribute */
if(mode == 0 || mode > 6) {
if(bucket != NULL && bucket->is_rvalid) {
fAccess = bucket->is_readable;
goto Finished;
}
desired_access = FILE_GENERIC_READ;
} else if(mode <= 2) {
if(bucket != NULL && bucket->is_wvalid) {
fAccess = bucket->is_writable;
goto Finished;
}
desired_access = FILE_GENERIC_WRITE;
} else if(mode <= 4) {
if(bucket != NULL && bucket->is_rvalid) {
fAccess = bucket->is_readable;
goto Finished;
}
desired_access = FILE_GENERIC_READ|FILE_FLAG_BACKUP_SEMANTICS;
} else { // if(mode <= 6)
if(bucket != NULL && bucket->is_rvalid && bucket->is_wvalid) {
fAccess = bucket->is_readable & bucket->is_writable;
goto Finished;
}
desired_access = FILE_GENERIC_READ | FILE_GENERIC_WRITE;
}
if(TWG(impersonation_token) == NULL) {
goto Finished;
}
/* Get size of security buffer. Call is expected to fail */
if(GetFileSecurityW(pathw, sec_info, NULL, 0, &sec_desc_length)) {
goto Finished;
}
psec_desc = (BYTE *)malloc(sec_desc_length);
if(psec_desc == NULL ||
!GetFileSecurityW(pathw, sec_info, (PSECURITY_DESCRIPTOR)psec_desc, sec_desc_length, &sec_desc_length)) {
goto Finished;
}
MapGenericMask(&desired_access, &gen_map);
if(!AccessCheck((PSECURITY_DESCRIPTOR)psec_desc, TWG(impersonation_token), desired_access, &gen_map, &privilege_set, &priv_set_length, &granted_access, &fAccess)) {
goto Finished_Impersonate;
}
/* Keep the result in realpath_cache */
if(bucket != NULL) {
if(desired_access == (FILE_GENERIC_READ|FILE_FLAG_BACKUP_SEMANTICS)) {
bucket->is_rvalid = 1;
bucket->is_readable = fAccess;
}
else if(desired_access == FILE_GENERIC_WRITE) {
bucket->is_wvalid = 1;
bucket->is_writable = fAccess;
} else if (desired_access == (FILE_GENERIC_READ | FILE_GENERIC_WRITE)) {
bucket->is_rvalid = 1;
bucket->is_readable = fAccess;
bucket->is_wvalid = 1;
bucket->is_writable = fAccess;
}
}
Finished_Impersonate:
if(psec_desc != NULL) {
free(psec_desc);
psec_desc = NULL;
}
Finished:
if(thread_token != NULL) {
CloseHandle(thread_token);
}
PHP_WIN32_IOUTIL_CLEANUP_W()
if(fAccess == FALSE) {
errno = EACCES;
return errno;
} else {
return 0;
}
}/*}}}*/
static process_pair *process_get(FILE *stream)
{/*{{{*/
process_pair *ptr;
process_pair *newptr;
if (TWG(process) != NULL) {
for (ptr = TWG(process); ptr < (TWG(process) + TWG(process_size)); ptr++) {
if (ptr->stream == stream) {
break;
}
}
if (ptr < (TWG(process) + TWG(process_size))) {
return ptr;
}
}
newptr = (process_pair*)realloc((void*)TWG(process), (TWG(process_size)+1)*sizeof(process_pair));
if (newptr == NULL) {
return NULL;
}
TWG(process) = newptr;
ptr = newptr + TWG(process_size);
TWG(process_size)++;
return ptr;
}/*}}}*/
static shm_pair *shm_get(key_t key, void *addr)
{/*{{{*/
shm_pair *ptr;
shm_pair *newptr;
if (TWG(shm) != NULL) {
for (ptr = TWG(shm); ptr < (TWG(shm) + TWG(shm_size)); ptr++) {
if (!ptr->descriptor) {
continue;
}
if (!addr && ptr->descriptor->shm_perm.key == key) {
break;
} else if (ptr->addr == addr) {
break;
}
}
if (ptr < (TWG(shm) + TWG(shm_size))) {
return ptr;
}
}
newptr = (shm_pair*)realloc((void*)TWG(shm), (TWG(shm_size)+1)*sizeof(shm_pair));
if (newptr == NULL) {
return NULL;
}
TWG(shm) = newptr;
ptr = newptr + TWG(shm_size);
TWG(shm_size)++;
memset(ptr, 0, sizeof(*ptr));
return ptr;
}/*}}}*/
static HANDLE dupHandle(HANDLE fh, BOOL inherit)
{/*{{{*/
HANDLE copy, self = GetCurrentProcess();
if (!DuplicateHandle(self, fh, self, ©, 0, inherit, DUPLICATE_SAME_ACCESS|DUPLICATE_CLOSE_SOURCE)) {
return NULL;
}
return copy;
}/*}}}*/
TSRM_API FILE *popen(const char *command, const char *type)
{/*{{{*/
return popen_ex(command, type, NULL, NULL);
}/*}}}*/
TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd, const char *env)
{/*{{{*/
FILE *stream = NULL;
int fno, type_len, read, mode;
STARTUPINFOW startup;
PROCESS_INFORMATION process;
SECURITY_ATTRIBUTES security;
HANDLE in, out;
DWORD dwCreateFlags = 0;
BOOL res;
process_pair *proc;
char *cmd = NULL;
wchar_t *cmdw = NULL, *cwdw = NULL, *envw = NULL;
char *ptype = (char *)type;
HANDLE thread_token = NULL;
HANDLE token_user = NULL;
BOOL asuser = TRUE;
if (!type) {
return NULL;
}
type_len = (int)strlen(type);
if (type_len < 1 || type_len > 2) {
return NULL;
}
if (ptype[0] != 'r' && ptype[0] != 'w') {
return NULL;
}
if (type_len > 1 && (ptype[1] != 'b' && ptype[1] != 't')) {
return NULL;
}
size_t cmd_buffer_size = strlen(command) + strlen(TWG(comspec)) + sizeof(" /s /c ") + 2;
cmd = malloc(cmd_buffer_size);
if (!cmd) {
return NULL;
}
snprintf(cmd, cmd_buffer_size, "%s /s /c \"%s\"", TWG(comspec), command);
cmdw = php_win32_cp_any_to_w(cmd);
if (!cmdw) {
free(cmd);
return NULL;
}
if (cwd) {
cwdw = php_win32_ioutil_any_to_w(cwd);
if (!cwdw) {
free(cmd);
free(cmdw);
return NULL;
}
}
security.nLength = sizeof(SECURITY_ATTRIBUTES);
security.bInheritHandle = TRUE;
security.lpSecurityDescriptor = NULL;
if (!type_len || !CreatePipe(&in, &out, &security, 2048L)) {
free(cmdw);
free(cwdw);
free(cmd);
return NULL;
}
memset(&startup, 0, sizeof(STARTUPINFOW));
memset(&process, 0, sizeof(PROCESS_INFORMATION));
startup.cb = sizeof(STARTUPINFOW);
startup.dwFlags = STARTF_USESTDHANDLES;
startup.hStdError = GetStdHandle(STD_ERROR_HANDLE);
read = (type[0] == 'r') ? TRUE : FALSE;
mode = ((type_len == 2) && (type[1] == 'b')) ? O_BINARY : O_TEXT;
if (read) {
in = dupHandle(in, FALSE);
startup.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
startup.hStdOutput = out;
} else {
out = dupHandle(out, FALSE);
startup.hStdInput = in;
startup.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
}
dwCreateFlags = NORMAL_PRIORITY_CLASS;
if (strcmp(sapi_module.name, "cli") != 0) {
dwCreateFlags |= CREATE_NO_WINDOW;
}
/* Get a token with the impersonated user. */
if(OpenThreadToken(GetCurrentThread(), TOKEN_ALL_ACCESS, TRUE, &thread_token)) {
DuplicateTokenEx(thread_token, MAXIMUM_ALLOWED, &security, SecurityImpersonation, TokenPrimary, &token_user);
} else {
DWORD err = GetLastError();
if (err == ERROR_NO_TOKEN) {
asuser = FALSE;
}
}
envw = php_win32_cp_env_any_to_w(env);
if (envw) {
dwCreateFlags |= CREATE_UNICODE_ENVIRONMENT;
} else {
if (env) {
free(cmd);
free(cmdw);
free(cwdw);
return NULL;
}
}
if (asuser) {
res = CreateProcessAsUserW(token_user, NULL, cmdw, &security, &security, security.bInheritHandle, dwCreateFlags, envw, cwdw, &startup, &process);
CloseHandle(token_user);
} else {
res = CreateProcessW(NULL, cmdw, &security, &security, security.bInheritHandle, dwCreateFlags, envw, cwdw, &startup, &process);
}
free(cmd);
free(cmdw);
free(cwdw);
free(envw);
if (!res) {
return NULL;
}
CloseHandle(process.hThread);
proc = process_get(NULL);
if (read) {
fno = _open_osfhandle((tsrm_intptr_t)in, _O_RDONLY | mode);
CloseHandle(out);
} else {
fno = _open_osfhandle((tsrm_intptr_t)out, _O_WRONLY | mode);
CloseHandle(in);
}
stream = _fdopen(fno, type);
proc->prochnd = process.hProcess;
proc->stream = stream;
return stream;
}/*}}}*/
TSRM_API int pclose(FILE *stream)
{/*{{{*/
DWORD termstat = 0;
process_pair *process;
if ((process = process_get(stream)) == NULL) {
return 0;
}
fflush(process->stream);
fclose(process->stream);
WaitForSingleObject(process->prochnd, INFINITE);
GetExitCodeProcess(process->prochnd, &termstat);
process->stream = NULL;
CloseHandle(process->prochnd);
return termstat;
}/*}}}*/
#define SEGMENT_PREFIX "TSRM_SHM_SEGMENT:"
#define INT_MIN_AS_STRING "-2147483648"
#define TSRM_BASE_SHM_KEY_ADDRESS 0x20000000
/* Returns a number between 0x2000_0000 and 0x3fff_ffff. On Windows, key_t is int. */
static key_t tsrm_choose_random_shm_key(key_t prev_key) {
unsigned char buf[4];
if (php_win32_get_random_bytes(buf, 4) != SUCCESS) {
return prev_key + 2;
}
uint32_t n =
((uint32_t)(buf[0]) << 24) |
(((uint32_t)buf[1]) << 16) |
(((uint32_t)buf[2]) << 8) |
(((uint32_t)buf[3]));
return (n & 0x1fffffff) + TSRM_BASE_SHM_KEY_ADDRESS;
}
TSRM_API int shmget(key_t key, size_t size, int flags)
{/*{{{*/
shm_pair *shm;
char shm_segment[sizeof(SEGMENT_PREFIX INT_MIN_AS_STRING)];
HANDLE shm_handle = NULL, info_handle = NULL;
BOOL created = FALSE;
if (key != IPC_PRIVATE) {
snprintf(shm_segment, sizeof(shm_segment), SEGMENT_PREFIX "%d", key);
shm_handle = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, shm_segment);
} else {
/* IPC_PRIVATE always creates a new segment even if IPC_CREAT flag isn't passed. */
flags |= IPC_CREAT;
}
if (!shm_handle) {
if (flags & IPC_CREAT) {
if (size == 0 || size > SIZE_MAX - sizeof(shm->descriptor)) {
return -1;
}
size += sizeof(shm->descriptor);
#if SIZEOF_SIZE_T == 8
DWORD high = size >> 32;
DWORD low = (DWORD)size;
#else
DWORD high = 0;
DWORD low = size;
#endif
shm_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, high, low, key == IPC_PRIVATE ? NULL : shm_segment);
created = TRUE;
}
if (!shm_handle) {
return -1;
}
} else {
if (flags & IPC_EXCL) {
CloseHandle(shm_handle);
return -1;
}
}
if (key == IPC_PRIVATE) {
/* This should call shm_get with a brand new key id that isn't used yet. See https://man7.org/linux/man-pages/man2/shmget.2.html
* Because extensions such as shmop/sysvshm can be used in userland to attach to shared memory segments, use unpredictable high positive numbers to avoid accidentally conflicting with userland. */
key = tsrm_choose_random_shm_key(TSRM_BASE_SHM_KEY_ADDRESS);
for (shm_pair *ptr = TWG(shm); ptr < (TWG(shm) + TWG(shm_size)); ptr++) {
if (ptr->descriptor && ptr->descriptor->shm_perm.key == key) {
key = tsrm_choose_random_shm_key(key);
ptr = TWG(shm);
continue;
}
}
}
shm = shm_get(key, NULL);
if (!shm) {
CloseHandle(shm_handle);
return -1;
}
shm->segment = shm_handle;
shm->descriptor = MapViewOfFileEx(shm->segment, FILE_MAP_ALL_ACCESS, 0, 0, 0, NULL);
if (NULL != shm->descriptor && created) {
shm->descriptor->shm_perm.key = key;
shm->descriptor->shm_segsz = size;
shm->descriptor->shm_ctime = time(NULL);
shm->descriptor->shm_cpid = getpid();
shm->descriptor->shm_perm.mode = flags;
shm->descriptor->shm_perm.cuid = shm->descriptor->shm_perm.cgid= 0;
shm->descriptor->shm_perm.gid = shm->descriptor->shm_perm.uid = 0;
shm->descriptor->shm_atime = shm->descriptor->shm_dtime = 0;
shm->descriptor->shm_lpid = shm->descriptor->shm_nattch = 0;
shm->descriptor->shm_perm.mode = shm->descriptor->shm_perm.seq = 0;
}
if (NULL != shm->descriptor && (shm->descriptor->shm_perm.key != key || size > shm->descriptor->shm_segsz)) {
if (NULL != shm->segment) {
CloseHandle(shm->segment);
shm->segment = INVALID_HANDLE_VALUE;
}
UnmapViewOfFile(shm->descriptor);
shm->descriptor = NULL;
return -1;
}
return key;
}/*}}}*/
TSRM_API void *shmat(int key, const void *shmaddr, int flags)
{/*{{{*/
shm_pair *shm = shm_get(key, NULL);
if (!shm || !shm->segment) {
return (void*)-1;
}
shm->addr = shm->descriptor + sizeof(shm->descriptor);
shm->descriptor->shm_atime = time(NULL);
shm->descriptor->shm_lpid = getpid();
shm->descriptor->shm_nattch++;
return shm->addr;
}/*}}}*/
TSRM_API int shmdt(const void *shmaddr)
{/*{{{*/
shm_pair *shm = shm_get(0, (void*)shmaddr);
int ret;
if (!shm || !shm->segment) {
return -1;
}
shm->descriptor->shm_dtime = time(NULL);
shm->descriptor->shm_lpid = getpid();
shm->descriptor->shm_nattch--;
ret = 0;
if (shm->descriptor->shm_nattch <= 0) {
ret = UnmapViewOfFile(shm->descriptor) ? 0 : -1;
shm->descriptor = NULL;
}
return ret;
}/*}}}*/
TSRM_API int shmctl(int key, int cmd, struct shmid_ds *buf)
{/*{{{*/
shm_pair *shm = shm_get(key, NULL);
if (!shm || !shm->segment) {
return -1;
}
switch (cmd) {
case IPC_STAT:
memcpy(buf, shm->descriptor, sizeof(struct shmid_ds));
return 0;
case IPC_SET:
shm->descriptor->shm_ctime = time(NULL);
shm->descriptor->shm_perm.uid = buf->shm_perm.uid;
shm->descriptor->shm_perm.gid = buf->shm_perm.gid;
shm->descriptor->shm_perm.mode = buf->shm_perm.mode;
return 0;
case IPC_RMID:
if (shm->descriptor->shm_nattch < 1) {
shm->descriptor->shm_perm.key = -1;
}
return 0;
default:
return -1;
}
}/*}}}*/
static zend_always_inline void UnixTimeToFileTime(time_t t, LPFILETIME pft) /* {{{ */
{
// Note that LONGLONG is a 64-bit value
LONGLONG ll;
ll = t * 10000000LL + 116444736000000000LL;
pft->dwLowDateTime = (DWORD)ll;
pft->dwHighDateTime = ll >> 32;
}
/* }}} */
TSRM_API int win32_utime(const char *filename, struct utimbuf *buf) /* {{{ */
{
FILETIME mtime, atime;
HANDLE hFile;
PHP_WIN32_IOUTIL_INIT_W(filename)
if (!pathw) {
return -1;
}
hFile = CreateFileW(pathw, GENERIC_WRITE, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL,
OPEN_ALWAYS, FILE_FLAG_BACKUP_SEMANTICS, NULL);
PHP_WIN32_IOUTIL_CLEANUP_W()
/* OPEN_ALWAYS mode sets the last error to ERROR_ALREADY_EXISTS but
the CreateFile operation succeeds */
if (GetLastError() == ERROR_ALREADY_EXISTS) {
SetLastError(0);
}
if ( hFile == INVALID_HANDLE_VALUE ) {
return -1;
}
if (!buf) {
SYSTEMTIME st;
GetSystemTime(&st);
SystemTimeToFileTime(&st, &mtime);
atime = mtime;
} else {
UnixTimeToFileTime(buf->modtime, &mtime);
UnixTimeToFileTime(buf->actime, &atime);
}
if (!SetFileTime(hFile, NULL, &atime, &mtime)) {
CloseHandle(hFile);
return -1;
}
CloseHandle(hFile);
return 1;
}
/* }}} */
#endif
================================================
FILE: TSRM/tsrm_win32.h
================================================
/*
+----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| https://www.php.net/license/3_01.txt |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Daniel Beulshausen <daniel@php4win.de> |
+----------------------------------------------------------------------+
*/
#ifndef TSRM_WIN32_H
#define TSRM_WIN32_H
#include "TSRM.h"
#include <windows.h>
#include <sys/utime.h>
#include "win32/ipc.h"
struct ipc_perm {
key_t key;
unsigned short uid;
unsigned short gid;
unsigned short cuid;
unsigned short cgid;
unsigned short mode;
unsigned short seq;
};
struct shmid_ds {
struct ipc_perm shm_perm;
size_t shm_segsz;
time_t shm_atime;
time_t shm_dtime;
time_t shm_ctime;
unsigned short shm_cpid;
unsigned short shm_lpid;
short shm_nattch;
};
typedef struct {
FILE *stream;
HANDLE prochnd;
} process_pair;
typedef struct {
void *addr;
HANDLE segment;
struct shmid_ds *descriptor;
} shm_pair;
typedef struct {
process_pair *process;
shm_pair *shm;
int process_size;
int shm_size;
char *comspec;
HANDLE impersonation_token;
PSID impersonation_token_sid;
} tsrm_win32_globals;
#ifdef ZTS
# define TWG(v) TSRMG_STATIC(win32_globals_id, tsrm_win32_globals *, v)
TSRMLS_CACHE_EXTERN()
#else
# define TWG(v) (win32_globals.v)
#endif
#define IPC_PRIVATE 0
#define IPC_CREAT 00001000
#define IPC_EXCL 00002000
#define IPC_NOWAIT 00004000
#define IPC_RMID 0
#define IPC_SET 1
#define IPC_STAT 2
#define IPC_INFO 3
#define SHM_R PAGE_READONLY
#define SHM_W PAGE_READWRITE
#define SHM_RDONLY FILE_MAP_READ
#define SHM_RND FILE_MAP_WRITE
#define SHM_REMAP FILE_MAP_COPY
const char * tsrm_win32_get_path_sid_key(const char *pathname, size_t pathname_len, size_t *key_len);
TSRM_API void tsrm_win32_startup(void);
TSRM_API void tsrm_win32_shutdown(void);
TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd, const char *env);
TSRM_API FILE *popen(const char *command, const char *type);
TSRM_API int pclose(FILE *stream);
TSRM_API int tsrm_win32_access(const char *pathname, int mode);
TSRM_API int win32_utime(const char *filename, struct utimbuf *buf);
TSRM_API int shmget(key_t key, size_t size, int flags);
TSRM_API void *shmat(int key, const void *shmaddr, int flags);
TSRM_API int shmdt(const void *shmaddr);
TSRM_API int shmctl(int key, int cmd, struct shmid_ds *buf);
#endif
================================================
FILE: Zend/LICENSE
================================================
--------------------------------------------------------------------
The Zend Engine License, Version 2.00
Copyright (c) 1999-2006 Zend Technologies Ltd. All rights reserved.
--------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
modification, is permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
3. The names "Zend" and "Zend Engine" must not be used to endorse
or promote products derived from this software without prior
permission from Zend Technologies Ltd. For written permission,
please contact license@zend.com.
4. Zend Technologies Ltd. may publish revised and/or new versions
of the license from time to time. Each version will be given a
distinguishing version number.
Once covered code has been published under a particular version
of the license, you may always continue to use it under the
terms of that version. You may also choose to use such covered
code under the terms of any subsequent version of the license
published by Zend Technologies Ltd. No one other than Zend
Technologies Ltd. has the right to modify the terms applicable
to covered code created under this License.
5. Redistributions of any form whatsoever must retain the following
acknowledgment:
"This product includes the Zend Engine, freely available at
http://www.zend.com"
6. All advertising materials mentioning features or use of this
software must display the following acknowledgment:
"The Zend Engine is freely available at http://www.zend.com"
THIS SOFTWARE IS PROVIDED BY ZEND TECHNOLOGIES LTD. ``AS IS'' AND
ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ZEND
TECHNOLOGIES LTD. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
--------------------------------------------------------------------
================================================
FILE: Zend/Makefile.frag
================================================
#
# Zend
#
$(builddir)/zend_language_scanner.lo: $(srcdir)/zend_language_parser.h
$(builddir)/zend_ini_scanner.lo: $(srcdir)/zend_ini_parser.h
$(srcdir)/zend_language_scanner.c $(srcdir)/zend_language_scanner_defs.h: $(srcdir)/zend_language_scanner.l
@(cd $(top_srcdir); $(RE2C) $(RE2C_FLAGS) --case-inverted -cbdFt Zend/zend_language_scanner_defs.h -oZend/zend_language_scanner.c Zend/zend_language_scanner.l)
$(srcdir)/zend_language_parser.h: $(srcdir)/zend_language_parser.c
$(srcdir)/zend_language_parser.c: $(srcdir)/zend_language_parser.y
# Tweak zendparse to be exported through ZEND_API. This has to be revisited once
# bison supports foreign skeletons and that bison version is used. Read
# https://git.savannah.gnu.org/cgit/bison.git/tree/data/README.md for more.
@$(YACC) $(YFLAGS) -v -d $(srcdir)/zend_language_parser.y -o $@
@$(SED) -e 's,^int zendparse\(.*\),ZEND_API int zendparse\1,g' < $@ \
> $@.tmp && \
mv $@.tmp $@
@$(SED) -e 's,^int zendparse\(.*\),ZEND_API int zendparse\1,g' < $(srcdir)/zend_language_parser.h \
> $(srcdir)/zend_language_parser.h.tmp && \
mv $(srcdir)/zend_language_parser.h.tmp $(srcdir)/zend_language_parser.h
$(srcdir)/zend_ini_parser.h: $(srcdir)/zend_ini_parser.c
$(srcdir)/zend_ini_parser.c: $(srcdir)/zend_ini_parser.y
@$(YACC) $(YFLAGS) -v -d $(srcdir)/zend_ini_parser.y -o $@
$(srcdir)/zend_ini_scanner.c: $(srcdir)/zend_ini_scanner.l
@(cd $(top_srcdir); $(RE2C) $(RE2C_FLAGS) --case-inverted -cbdFt Zend/zend_ini_scanner_defs.h -oZend/zend_ini_scanner.c Zend/zend_ini_scanner.l)
# Use an intermediate target to indicate that zend_vm_gen.php produces both files
# at the same time, rather than the same recipe applying for two different targets.
# The "grouped targets" feature, which would solve this directly, is only available
# since GNU Make 4.3.
$(srcdir)/zend_vm_execute.h $(srcdir)/zend_vm_opcodes.c: vm.gen.intermediate ;
.INTERMEDIATE: vm.gen.intermediate
vm.gen.intermediate: $(srcdir)/zend_vm_def.h $(srcdir)/zend_vm_execute.skl $(srcdir)/zend_vm_gen.php
@if test ! -z "$(PHP)"; then \
$(PHP) $(srcdir)/zend_vm_gen.php; \
fi;
$(builddir)/zend_highlight.lo $(builddir)/zend_compile.lo: $(srcdir)/zend_language_parser.h
Zend/zend_execute.lo: $(srcdir)/zend_vm_execute.h $(srcdir)/zend_vm_opcodes.h
================================================
FILE: Zend/Optimizer/block_pass.c
================================================
/*
+----------------------------------------------------------------------+
| Zend OPcache |
+----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| https://www.php.net/license/3_01.txt |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@php.net> |
| Zeev Suraski <zeev@php.net> |
| Stanislav Malyshev <stas@zend.com> |
| Dmitry Stogov <dmitry@php.net> |
+----------------------------------------------------------------------+
*/
#include "Optimizer/zend_optimizer.h"
#include "Optimizer/zend_optimizer_internal.h"
#include "zend_API.h"
#include "zend_constants.h"
#include "zend_execute.h"
#include "zend_vm.h"
#include "zend_bitset.h"
#include "zend_cfg.h"
#include "zend_dump.h"
/* Checks if a constant (like "true") may be replaced by its value */
bool zend_optimizer_get_persistent_constant(zend_string *name, zval *result, int copy)
{
zend_constant *c = zend_hash_find_ptr(EG(zend_constants), name);
if (c) {
if ((ZEND_CONSTANT_FLAGS(c) & CONST_PERSISTENT)
&& !(ZEND_CONSTANT_FLAGS(c) & CONST_DEPRECATED)
&& (!(ZEND_CONSTANT_FLAGS(c) & CONST_NO_FILE_CACHE)
|| !(CG(compiler_options) & ZEND_COMPILE_WITH_FILE_CACHE))) {
ZVAL_COPY_VALUE(result, &c->value);
if (copy) {
Z_TRY_ADDREF_P(result);
}
return 1;
} else {
return 0;
}
}
/* Special constants null/true/false can always be substituted. */
c = zend_get_special_const(ZSTR_VAL(name), ZSTR_LEN(name));
if (c) {
ZVAL_COPY_VALUE(result, &c->value);
return 1;
}
return 0;
}
/* Data dependencies macros */
#define VAR_SOURCE(op) Tsource[VAR_NUM(op.var)]
#define SET_VAR_SOURCE(opline) Tsource[VAR_NUM(opline->result.var)] = opline
static void strip_leading_nops(zend_op_array *op_array, zend_basic_block *b)
{
zend_op *opcodes = op_array->opcodes;
do {
b->start++;
b->len--;
} while (b->len > 0 && opcodes[b->start].opcode == ZEND_NOP);
}
static void strip_nops(zend_op_array *op_array, zend_basic_block *b)
{
uint32_t i, j;
if (b->len == 0) {
return;
}
if (op_array->opcodes[b->start].opcode == ZEND_NOP) {
strip_leading_nops(op_array, b);
}
if (b->len == 0) {
return;
}
/* strip the inside NOPs */
i = j = b->start + 1;
while (i < b->start + b->len) {
if (op_array->opcodes[i].opcode != ZEND_NOP) {
if (i != j) {
op_array->opcodes[j] = op_array->opcodes[i];
}
j++;
}
i++;
}
b->len = j - b->start;
while (j < i) {
MAKE_NOP(op_array->opcodes + j);
j++;
}
}
static int get_const_switch_target(zend_cfg *cfg, zend_op_array *op_array, zend_basic_block *block, zend_op *opline, zval *val) {
HashTable *jumptable = Z_ARRVAL(ZEND_OP2_LITERAL(opline));
zval *zv;
if ((opline->opcode == ZEND_SWITCH_LONG && Z_TYPE_P(val) != IS_LONG)
|| (opline->opcode == ZEND_SWITCH_STRING && Z_TYPE_P(val) != IS_STRING)) {
/* fallback to next block */
return block->successors[block->successors_count - 1];
}
if (opline->opcode == ZEND_MATCH && Z_TYPE_P(val) != IS_LONG && Z_TYPE_P(val) != IS_STRING) {
/* always jump to the default arm */
return block->successors[block->successors_count - 1];
}
if (Z_TYPE_P(val) == IS_LONG) {
zv = zend_hash_index_find(jumptable, Z_LVAL_P(val));
} else {
ZEND_ASSERT(Z_TYPE_P(val) == IS_STRING);
zv = zend_hash_find(jumptable, Z_STR_P(val));
}
if (!zv) {
/* default */
return block->successors[block->successors_count - (opline->opcode == ZEND_MATCH ? 1 : 2)];
}
return cfg->map[ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, Z_LVAL_P(zv))];
}
static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array, zend_bitset used_ext, zend_cfg *cfg, zend_op **Tsource, uint32_t *opt_count)
{
zend_op *opline, *src;
zend_op *end, *last_op = NULL;
if (block->len == 0) {
return;
}
if (op_array->opcodes[block->start].opcode == ZEND_NOP) {
/* remove leading NOPs */
strip_leading_nops(op_array, block);
}
opline = op_array->opcodes + block->start;
end = opline + block->len;
while (opline < end) {
/* Constant Propagation: strip X = QM_ASSIGN(const) */
if (opline->op1_type == IS_TMP_VAR &&
opline->opcode != ZEND_FREE) {
src = VAR_SOURCE(opline->op1);
if (src &&
src->opcode == ZEND_QM_ASSIGN &&
src->op1_type == IS_CONST
) {
znode_op op1 = opline->op1;
if (opline->opcode == ZEND_VERIFY_RETURN_TYPE) {
COPY_NODE(opline->result, opline->op1);
COPY_NODE(opline->op1, src->op1);
VAR_SOURCE(op1) = NULL;
MAKE_NOP(src);
++(*opt_count);
} else {
zval c;
ZVAL_COPY(&c, &ZEND_OP1_LITERAL(src));
if (opline->opcode != ZEND_CASE
&& opline->opcode != ZEND_CASE_STRICT
&& opline->opcode != ZEND_FETCH_LIST_R
&& opline->opcode != ZEND_SWITCH_LONG
&& opline->opcode != ZEND_SWITCH_STRING
&& opline->opcode != ZEND_MATCH
&& opline->opcode != ZEND_MATCH_ERROR
&& zend_optimizer_update_op1_const(op_array, opline, &c)) {
VAR_SOURCE(op1) = NULL;
if (opline->opcode != ZEND_JMP_NULL
&& !zend_bitset_in(used_ext, VAR_NUM(src->result.var))) {
literal_dtor(&ZEND_OP1_LITERAL(src));
MAKE_NOP(src);
}
++(*opt_count);
} else {
zval_ptr_dtor_nogc(&c);
}
}
}
}
/* Constant Propagation: strip X = QM_ASSIGN(const) */
if (opline->op2_type == IS_TMP_VAR) {
src = VAR_SOURCE(opline->op2);
if (src &&
src->opcode == ZEND_QM_ASSIGN &&
src->op1_type == IS_CONST) {
znode_op op2 = opline->op2;
zval c;
ZVAL_COPY(&c, &ZEND_OP1_LITERAL(src));
if (zend_optimizer_update_op2_const(op_array, opline, &c)) {
VAR_SOURCE(op2) = NULL;
if (!zend_bitset_in(used_ext, VAR_NUM(src->result.var))) {
literal_dtor(&ZEND_OP1_LITERAL(src));
MAKE_NOP(src);
}
++(*opt_count);
} else {
zval_ptr_dtor_nogc(&c);
}
}
}
switch (opline->opcode) {
case ZEND_ECHO:
if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
src = VAR_SOURCE(opline->op1);
if (src &&
src->opcode == ZEND_CAST &&
src->extended_value == IS_STRING) {
/* T = CAST(X, String), ECHO(T) => NOP, ECHO(X) */
VAR_SOURCE(opline->op1) = NULL;
COPY_NODE(opline->op1, src->op1);
MAKE_NOP(src);
++(*opt_count);
}
} else if (opline->op1_type == IS_CONST &&
Z_TYPE(ZEND_OP1_LITERAL(opline)) != IS_DOUBLE) {
if (last_op == opline - 1) {
/* compress consecutive ECHO's.
* Float to string conversion may be affected by current
* locale setting.
*/
size_t l, old_len;
if (Z_TYPE(ZEND_OP1_LITERAL(opline)) != IS_STRING) {
convert_to_string(&ZEND_OP1_LITERAL(opline));
}
if (Z_TYPE(ZEND_OP1_LITERAL(last_op)) != IS_STRING) {
convert_to_string(&ZEND_OP1_LITERAL(last_op));
}
old_len = Z_STRLEN(ZEND_OP1_LITERAL(last_op));
l = old_len + Z_STRLEN(ZEND_OP1_LITERAL(opline));
if (!Z_REFCOUNTED(ZEND_OP1_LITERAL(last_op))) {
zend_string *tmp = zend_string_alloc(l, 0);
memcpy(ZSTR_VAL(tmp), Z_STRVAL(ZEND_OP1_LITERAL(last_op)), old_len);
Z_STR(ZEND_OP1_LITERAL(last_op)) = tmp;
} else {
Z_STR(ZEND_OP1_LITERAL(last_op)) = zend_string_extend(Z_STR(ZEND_OP1_LITERAL(last_op)), l, 0);
}
Z_TYPE_INFO(ZEND_OP1_LITERAL(last_op)) = IS_STRING_EX;
memcpy(Z_STRVAL(ZEND_OP1_LITERAL(last_op)) + old_len, Z_STRVAL(ZEND_OP1_LITERAL(opline)), Z_STRLEN(ZEND_OP1_LITERAL(opline)));
Z_STRVAL(ZEND_OP1_LITERAL(last_op))[l] = '\0';
zval_ptr_dtor_nogc(&ZEND_OP1_LITERAL(opline));
ZVAL_STR(&ZEND_OP1_LITERAL(opline), zend_new_interned_string(Z_STR(ZEND_OP1_LITERAL(last_op))));
ZVAL_NULL(&ZEND_OP1_LITERAL(last_op));
MAKE_NOP(last_op);
++(*opt_count);
}
last_op = opline;
}
break;
case ZEND_MATCH_ERROR:
if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
src = VAR_SOURCE(opline->op1);
VAR_SOURCE(opline->op1) = NULL;
}
break;
case ZEND_FREE:
/* Note: Only remove the source if the source is local to this block.
* If it's not local, then the other blocks successors must also eventually either FREE or consume the temporary,
* hence removing the temporary is not safe in the general case, especially when other consumers are not FREE.
* A FREE may not be removed without also removing the source's result, because otherwise that would cause a memory leak. */
if (opline->op1_type == IS_TMP_VAR) {
src = VAR_SOURCE(opline->op1);
if (src) {
switch (src->opcode) {
case ZEND_BOOL:
case ZEND_BOOL_NOT:
/* T = BOOL(X), FREE(T) => T = BOOL(X) */
/* The remaining BOOL is removed by a separate optimization */
/* The source is a bool, no source removals take place, so this may be done non-locally. */
VAR_SOURCE(opline->op1) = NULL;
MAKE_NOP(opline);
++(*opt_count);
break;
case ZEND_ASSIGN:
case ZEND_ASSIGN_DIM:
case ZEND_ASSIGN_OBJ:
case ZEND_ASSIGN_STATIC_PROP:
case ZEND_ASSIGN_OP:
case ZEND_ASSIGN_DIM_OP:
case ZEND_ASSIGN_OBJ_OP:
case ZEND_ASSIGN_STATIC_PROP_OP:
case ZEND_PRE_INC:
case ZEND_PRE_DEC:
case ZEND_PRE_INC_OBJ:
case ZEND_PRE_DEC_OBJ:
case ZEND_PRE_INC_STATIC_PROP:
case ZEND_PRE_DEC_STATIC_PROP:
if (src < op_array->opcodes + block->start) {
break;
}
src->result_type = IS_UNUSED;
VAR_SOURCE(opline->op1) = NULL;
MAKE_NOP(opline);
++(*opt_count);
break;
default:
break;
}
}
} else if (opline->op1_type == IS_VAR) {
src = VAR_SOURCE(opline->op1);
/* V = OP, FREE(V) => OP. NOP */
if (src >= op_array->opcodes + block->start &&
src->opcode != ZEND_FETCH_R &&
src->opcode != ZEND_FETCH_STATIC_PROP_R &&
src->opcode != ZEND_FETCH_DIM_R &&
src->opcode != ZEND_FETCH_OBJ_R &&
src->opcode != ZEND_NEW &&
src->opcode != ZEND_FETCH_THIS) {
src->result_type = IS_UNUSED;
MAKE_NOP(opline);
++(*opt_count);
if (src->opcode == ZEND_QM_ASSIGN) {
if (src->op1_type & (IS_VAR|IS_TMP_VAR)) {
src->opcode = ZEND_FREE;
} else {
MAKE_NOP(src);
}
}
}
}
break;
#if 0
/* pre-evaluate functions:
constant(x)
function_exists(x)
extension_loaded(x)
BAD: interacts badly with Accelerator
*/
if((opline->op1_type & IS_VAR) &&
VAR_SOURCE(opline->op1) && VAR_SOURCE(opline->op1)->opcode == ZEND_DO_CF_FCALL &&
VAR_SOURCE(opline->op1)->extended_value == 1) {
zend_op *fcall = VAR_SOURCE(opline->op1);
zend_op *sv = fcall-1;
if(sv >= block->start_opline && sv->opcode == ZEND_SEND_VAL &&
sv->op1_type == IS_CONST && Z_TYPE(OPLINE_OP1_LITERAL(sv)) == IS_STRING &&
Z_LVAL(OPLINE_OP2_LITERAL(sv)) == 1
) {
zval *arg = &OPLINE_OP1_LITERAL(sv);
char *fname = FUNCTION_CACHE->funcs[Z_LVAL(ZEND_OP1_LITERAL(fcall))].function_name;
size_t flen = FUNCTION_CACHE->funcs[Z_LVAL(ZEND_OP1_LITERAL(fcall))].name_len;
if((flen == sizeof("function_exists")-1 && zend_binary_strcasecmp(fname, flen, "function_exists", sizeof("function_exists")-1) == 0) ||
(flen == sizeof("is_callable")-1 && zend_binary_strcasecmp(fname, flen, "is_callable", sizeof("is_callable")-1) == 0)
) {
zend_function *function;
if((function = zend_hash_find_ptr(EG(function_table), Z_STR_P(arg))) != NULL) {
literal_dtor(arg);
MAKE_NOP(sv);
MAKE_NOP(fcall);
LITERAL_BOOL(opline->op1, 1);
opline->op1_type = IS_CONST;
}
} else if(flen == sizeof("constant")-1 && zend_binary_strcasecmp(fname, flen, "constant", sizeof("constant")-1) == 0) {
zval c;
if (zend_optimizer_get_persistent_constant(Z_STR_P(arg), &c, 1 ELS_CC)) {
literal_dtor(arg);
MAKE_NOP(sv);
MAKE_NOP(fcall);
ZEND_OP1_LITERAL(opline) = zend_optimizer_add_literal(op_array, &c);
/* no copy ctor - get already copied it */
opline->op1_type = IS_CONST;
}
} else if(flen == sizeof("extension_loaded")-1 && zend_binary_strcasecmp(fname, flen, "extension_loaded", sizeof("extension_loaded")-1) == 0) {
if(zend_hash_exists(&module_registry, Z_STR_P(arg))) {
literal_dtor(arg);
MAKE_NOP(sv);
MAKE_NOP(fcall);
LITERAL_BOOL(opline->op1, 1);
opline->op1_type = IS_CONST;
}
}
}
}
#endif
case ZEND_FETCH_LIST_R:
case ZEND_FETCH_LIST_W:
if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
/* LIST variable will be deleted later by FREE */
Tsource[VAR_NUM(opline->op1.var)] = NULL;
}
break;
case ZEND_SWITCH_LONG:
case ZEND_SWITCH_STRING:
case ZEND_MATCH:
if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
/* SWITCH variable will be deleted later by FREE, so we can't optimize it */
Tsource[VAR_NUM(opline->op1.var)] = NULL;
break;
}
if (opline->op1_type == IS_CONST) {
int target = get_const_switch_target(cfg, op_array, block, opline, &ZEND_OP1_LITERAL(opline));
literal_dtor(&ZEND_OP1_LITERAL(opline));
literal_dtor(&ZEND_OP2_LITERAL(opline));
opline->opcode = ZEND_JMP;
opline->op1_type = IS_UNUSED;
opline->op2_type = IS_UNUSED;
block->successors_count = 1;
block->successors[0] = target;
}
break;
case ZEND_CASE:
case ZEND_CASE_STRICT:
case ZEND_COPY_TMP:
if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
/* Variable will be deleted later by FREE, so we can't optimize it */
Tsource[VAR_NUM(opline->op1.var)] = NULL;
break;
}
ZEND_FALLTHROUGH;
case ZEND_IS_EQUAL:
case ZEND_IS_NOT_EQUAL:
if (opline->op1_type == IS_CONST &&
opline->op2_type == IS_CONST) {
goto optimize_constant_binary_op;
}
/* IS_EQ(TRUE, X) => BOOL(X)
* IS_EQ(FALSE, X) => BOOL_NOT(X)
* IS_NOT_EQ(TRUE, X) => BOOL_NOT(X)
* IS_NOT_EQ(FALSE, X) => BOOL(X)
* CASE(TRUE, X) => BOOL(X)
* CASE(FALSE, X) => BOOL_NOT(X)
*/
if (opline->op1_type == IS_CONST &&
(Z_TYPE(ZEND_OP1_LITERAL(opline)) == IS_FALSE ||
Z_TYPE(ZEND_OP1_LITERAL(opline)) == IS_TRUE)) {
/* Optimization of comparison with "null" is not safe,
* because ("0" == null) is not equal to !("0")
*/
opline->opcode =
((opline->opcode != ZEND_IS_NOT_EQUAL) == ((Z_TYPE(ZEND_OP1_LITERAL(opline))) == IS_TRUE)) ?
ZEND_BOOL : ZEND_BOOL_NOT;
COPY_NODE(opline->op1, opline->op2);
SET_UNUSED(opline->op2);
++(*opt_count);
goto optimize_bool;
} else if (opline->op2_type == IS_CONST &&
(Z_TYPE(ZEND_OP2_LITERAL(opline)) == IS_FALSE ||
Z_TYPE(ZEND_OP2_LITERAL(opline)) == IS_TRUE)) {
/* Optimization of comparison with "null" is not safe,
* because ("0" == null) is not equal to !("0")
*/
opline->opcode =
((opline->opcode != ZEND_IS_NOT_EQUAL) == ((Z_TYPE(ZEND_OP2_LITERAL(opline))) == IS_TRUE)) ?
ZEND_BOOL : ZEND_BOOL_NOT;
SET_UNUSED(opline->op2);
++(*opt_count);
goto optimize_bool;
}
break;
case ZEND_BOOL:
case ZEND_BOOL_NOT:
optimize_bool:
if (opline->op1_type == IS_CONST) {
goto optimize_const_unary_op;
}
if (opline->op1_type == IS_TMP_VAR &&
!zend_bitset_in(used_ext, VAR_NUM(opline->op1.var))) {
src = VAR_SOURCE(opline->op1);
if (src) {
switch (src->opcode) {
case ZEND_BOOL_NOT:
/* T = BOOL_NOT(X) + BOOL(T) -> NOP, BOOL_NOT(X) */
VAR_SOURCE(opline->op1) = NULL;
COPY_NODE(opline->op1, src->op1);
opline->opcode = (opline->opcode == ZEND_BOOL) ? ZEND_BOOL_NOT : ZEND_BOOL;
MAKE_NOP(src);
++(*opt_count);
goto optimize_bool;
case ZEND_BOOL:
/* T = BOOL(X) + BOOL(T) -> NOP, BOOL(X) */
VAR_SOURCE(opline->op1) = NULL;
COPY_NODE(opline->op1, src->op1);
MAKE_NOP(src);
++(*opt_count);
goto optimize_bool;
case ZEND_IS_EQUAL:
if (opline->opcode == ZEND_BOOL_NOT) {
src->opcode = ZEND_IS_NOT_EQUAL;
}
COPY_NODE(src->result, opline->result);
SET_VAR_SOURCE(src);
MAKE_NOP(opline);
++(*opt_count);
break;
case ZEND_IS_NOT_EQUAL:
if (opline->opcode == ZEND_BOOL_NOT) {
src->opcode = ZEND_IS_EQUAL;
}
COPY_NODE(src->result, opline->result);
SET_VAR_SOURCE(src);
MAKE_NOP(opline);
++(*opt_count);
break;
case ZEND_IS_IDENTICAL:
if (opline->opcode == ZEND_BOOL_NOT) {
src->opcode = ZEND_IS_NOT_IDENTICAL;
}
COPY_NODE(src->result, opline->result);
SET_VAR_SOURCE(src);
MAKE_NOP(opline);
++(*opt_count);
break;
case ZEND_IS_NOT_IDENTICAL:
if (opline->opcode == ZEND_BOOL_NOT) {
src->opcode = ZEND_IS_IDENTICAL;
}
COPY_NODE(src->result, opline->result);
SET_VAR_SOURCE(src);
MAKE_NOP(opline);
++(*opt_count);
break;
case ZEND_IS_SMALLER:
if (opline->opcode == ZEND_BOOL_NOT) {
uint8_t tmp_type;
uint32_t tmp;
src->opcode = ZEND_IS_SMALLER_OR_EQUAL;
tmp_type = src->op1_type;
src->op1_type = src->op2_type;
src->op2_type = tmp_type;
tmp = src->op1.num;
src->op1.num = src->op2.num;
src->op2.num = tmp;
}
COPY_NODE(src->result, opline->result);
SET_VAR_SOURCE(src);
MAKE_NOP(opline);
++(*opt_count);
break;
case ZEND_IS_SMALLER_OR_EQUAL:
if (opline->opcode == ZEND_BOOL_NOT) {
uint8_t tmp_type;
uint32_t tmp;
src->opcode = ZEND_IS_SMALLER;
tmp_type = src->op1_type;
src->op1_type = src->op2_type;
src->op2_type = tmp_type;
tmp = src->op1.num;
src->op1.num = src->op2.num;
src->op2.num = tmp;
}
COPY_NODE(src->result, opline->result);
SET_VAR_SOURCE(src);
MAKE_NOP(opline);
++(*opt_count);
break;
case ZEND_ISSET_ISEMPTY_CV:
case ZEND_ISSET_ISEMPTY_VAR:
case ZEND_ISSET_ISEMPTY_DIM_OBJ:
case ZEND_ISSET_ISEMPTY_PROP_OBJ:
case ZEND_ISSET_ISEMPTY_STATIC_PROP:
case ZEND_INSTANCEOF:
case ZEND_TYPE_CHECK:
case ZEND_DEFINED:
case ZEND_IN_ARRAY:
case ZEND_ARRAY_KEY_EXISTS:
if (opline->opcode == ZEND_BOOL_NOT) {
break;
}
COPY_NODE(src->result, opline->result);
SET_VAR_SOURCE(src);
MAKE_NOP(opline);
++(*opt_count);
break;
}
}
}
break;
case ZEND_JMPZ:
case ZEND_JMPNZ:
while (1) {
if (opline->op1_type == IS_CONST) {
++(*opt_count);
block->successors_count = 1;
if (zend_is_true(&ZEND_OP1_LITERAL(opline)) ==
(opline->opcode == ZEND_JMPZ)) {
MAKE_NOP(opline);
block->successors[0] = block->successors[1];
block->len--;
cfg->blocks[block->successors[0]].flags |= ZEND_BB_FOLLOW;
break;
} else {
zend_basic_block *next = cfg->blocks + block->successors[1];
next->flags &= ~ZEND_BB_FOLLOW;
if (!(next->flags & (ZEND_BB_TARGET|ZEND_BB_PROTECTED))) {
next->flags &= ~ZEND_BB_REACHABLE;
}
opline->opcode = ZEND_JMP;
COPY_NODE(opline->op1, opline->op2);
break;
}
} else if (opline->op1_type == IS_TMP_VAR &&
!zend_bitset_in(used_ext, VAR_NUM(opline->op1.var))) {
src = VAR_SOURCE(opline->op1);
if (src) {
if (src->opcode == ZEND_BOOL_NOT) {
VAR_SOURCE(opline->op1) = NULL;
COPY_NODE(opline->op1, src->op1);
/* T = BOOL_NOT(X) + JMPZ(T) -> NOP, JMPNZ(X) */
opline->opcode = INV_COND(opline->opcode);
MAKE_NOP(src);
++(*opt_count);
continue;
} else if (src->opcode == ZEND_BOOL ||
src->opcode == ZEND_QM_ASSIGN) {
VAR_SOURCE(opline->op1) = NULL;
COPY_NODE(opline->op1, src->op1);
MAKE_NOP(src);
++(*opt_count);
continue;
}
}
}
break;
}
break;
case ZEND_JMPZ_EX:
case ZEND_JMPNZ_EX:
while (1) {
if (opline->op1_type == IS_CONST) {
bool is_jmpz_ex = opline->opcode == ZEND_JMPZ_EX;
if (zend_is_true(&ZEND_OP1_LITERAL(opline)) == is_jmpz_ex) {
++(*opt_count);
opline->opcode = ZEND_QM_ASSIGN;
zval_ptr_dtor_nogc(&ZEND_OP1_LITERAL(opline));
ZVAL_BOOL(&ZEND_OP1_LITERAL(opline), is_jmpz_ex);
opline->op2.num = 0;
block->successors_count = 1;
block->successors[0] = block->successors[1];
cfg->blocks[block->successors[0]].flags |= ZEND_BB_FOLLOW;
break;
}
} else if (opline->op1_type == IS_TMP_VAR &&
(!zend_bitset_in(used_ext, VAR_NUM(opline->op1.var)) ||
opline->result.var == opline->op1.var)) {
src = VAR_SOURCE(opline->op1);
if (src) {
if (src->opcode == ZEND_BOOL ||
src->opcode == ZEND_QM_ASSIGN) {
VAR_SOURCE(opline->op1) = NULL;
COPY_NODE(opline->op1, src->op1);
MAKE_NOP(src);
++(*opt_count);
continue;
}
}
}
break;
}
break;
case ZEND_CONCAT:
case ZEND_FAST_CONCAT:
if (opline->op1_type == IS_CONST &&
opline->op2_type == IS_CONST) {
goto optimize_constant_binary_op;
}
if (opline->op2_type == IS_CONST &&
opline->op1_type == IS_TMP_VAR) {
src = VAR_SOURCE(opline->op1);
if (src &&
(src->opcode == ZEND_CONCAT ||
src->opcode == ZEND_FAST_CONCAT) &&
src->op2_type == IS_CONST) {
/* compress consecutive CONCATs */
size_t l, old_len;
if (Z_TYPE(ZEND_OP2_LITERAL(opline)) != IS_STRING) {
convert_to_string(&ZEND_OP2_LITERAL(opline));
}
if (Z_TYPE(ZEND_OP2_LITERAL(src)) != IS_STRING) {
convert_to_string(&ZEND_OP2_LITERAL(src));
}
VAR_SOURCE(opline->op1) = NULL;
COPY_NODE(opline->op1, src->op1);
old_len = Z_STRLEN(ZEND_OP2_LITERAL(src));
l = old_len + Z_STRLEN(ZEND_OP2_LITERAL(opline));
if (!Z_REFCOUNTED(ZEND_OP2_LITERAL(src))) {
zend_string *tmp = zend_string_alloc(l, 0);
memcpy(ZSTR_VAL(tmp), Z_STRVAL(ZEND_OP2_LITERAL(src)), old_len);
Z_STR(ZEND_OP2_LITERAL(src)) = tmp;
} else {
Z_STR(ZEND_OP2_LITERAL(src)) = zend_string_extend(Z_STR(ZEND_OP2_LITERAL(src)), l, 0);
}
Z_TYPE_INFO(ZEND_OP2_LITERAL(src)) = IS_STRING_EX;
memcpy(Z_STRVAL(ZEND_OP2_LITERAL(src)) + old_len, Z_STRVAL(ZEND_OP2_LITERAL(opline)), Z_STRLEN(ZEND_OP2_LITERAL(opline)));
Z_STRVAL(ZEND_OP2_LITERAL(src))[l] = '\0';
zval_ptr_dtor_str(&ZEND_OP2_LITERAL(opline));
ZVAL_STR(&ZEND_OP2_LITERAL(opline), zend_new_interned_string(Z_STR(ZEND_OP2_LITERAL(src))));
ZVAL_NULL(&ZEND_OP2_LITERAL(src));
MAKE_NOP(src);
++(*opt_count);
}
}
if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
src = VAR_SOURCE(opline->op1);
if (src &&
src->opcode == ZEND_CAST &&
src->extended_value == IS_STRING &&
src->op1_type != IS_CONST) {
/* convert T1 = CAST(STRING, X), T2 = CONCAT(T1, Y) to T2 = CONCAT(X,Y) */
VAR_SOURCE(opline->op1) = NULL;
COPY_NODE(opline->op1, src->op1);
MAKE_NOP(src);
++(*opt_count);
}
}
if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
src = VAR_SOURCE(opline->op2);
if (src &&
src->opcode == ZEND_CAST &&
src->extended_value == IS_STRING &&
src->op1_type != IS_CONST) {
/* convert T1 = CAST(STRING, X), T2 = CONCAT(Y, T1) to T2 = CONCAT(Y,X) */
zend_op *src = VAR_SOURCE(opline->op2);
VAR_SOURCE(opline->op2) = NULL;
COPY_NODE(opline->op2, src->op1);
MAKE_NOP(src);
++(*opt_count);
}
}
if (opline->op1_type == IS_CONST &&
Z_TYPE(ZEND_OP1_LITERAL(opline)) == IS_STRING &&
Z_STRLEN(ZEND_OP1_LITERAL(opline)) == 0) {
/* convert CONCAT('', X) => CAST(STRING, X) */
literal_dtor(&ZEND_OP1_LITERAL(opline));
opline->opcode = ZEND_CAST;
opline->extended_value = IS_STRING;
COPY_NODE(opline->op1, opline->op2);
opline->op2_type = IS_UNUSED;
opline->op2.var = 0;
++(*opt_count);
} else if (opline->op2_type == IS_CONST &&
Z_TYPE(ZEND_OP2_LITERAL(opline)) == IS_STRING &&
Z_STRLEN(ZEND_OP2_LITERAL(opline)) == 0) {
/* convert CONCAT(X, '') => CAST(STRING, X) */
literal_dtor(&ZEND_OP2_LITERAL(opline));
opline->opcode = ZEND_CAST;
opline->extended_value = IS_STRING;
opline->op2_type = IS_UNUSED;
opline->op2.var = 0;
++(*opt_count);
} else if (opline->opcode == ZEND_CONCAT &&
(opline->op1_type == IS_CONST ||
(opline->op1_type == IS_TMP_VAR &&
VAR_SOURCE(opline->op1) &&
(VAR_SOURCE(opline->op1)->opcode == ZEND_FAST_CONCAT ||
VAR_SOURCE(opline->op1)->opcode == ZEND_ROPE_END ||
VAR_SOURCE(opline->op1)->opcode == ZEND_FETCH_CONSTANT ||
VAR_SOURCE(opline->op1)->opcode == ZEND_FETCH_CLASS_CONSTANT))) &&
(opline->op2_type == IS_CONST ||
(opline->op2_type == IS_TMP_VAR &&
VAR_SOURCE(opline->op2) &&
(VAR_SOURCE(opline->op2)->opcode == ZEND_FAST_CONCAT ||
VAR_SOURCE(opline->op2)->opcode == ZEND_ROPE_END ||
VAR_SOURCE(opline->op2)->opcode == ZEND_FETCH_CONSTANT ||
VAR_SOURCE(opline->op2)->opcode == ZEND_FETCH_CLASS_CONSTANT)))) {
opline->opcode = ZEND_FAST_CONCAT;
++(*opt_count);
}
break;
case ZEND_ADD:
case ZEND_SUB:
case ZEND_MUL:
case ZEND_DIV:
case ZEND_MOD:
case ZEND_SL:
case ZEND_SR:
case ZEND_IS_SMALLER:
case ZEND_IS_SMALLER_OR_EQUAL:
case ZEND_IS_IDENTICAL:
case ZEND_IS_NOT_IDENTICAL:
case ZEND_BOOL_XOR:
case ZEND_BW_OR:
case ZEND_BW_AND:
case ZEND_BW_XOR:
if (opline->op1_type == IS_CONST &&
opline->op2_type == IS_CONST) {
/* evaluate constant expressions */
zval result;
optimize_constant_binary_op:
if (zend_optimizer_eval_binary_op(&result, opline->opcode, &ZEND_OP1_LITERAL(opline), &ZEND_OP2_LITERAL(opline)) == SUCCESS) {
literal_dtor(&ZEND_OP1_LITERAL(opline));
literal_dtor(&ZEND_OP2_LITERAL(opline));
opline->opcode = ZEND_QM_ASSIGN;
SET_UNUSED(opline->op2);
zend_optimizer_update_op1_const(op_array, opline, &result);
++(*opt_count);
}
}
break;
case ZEND_BW_NOT:
if (opline->op1_type == IS_CONST) {
/* evaluate constant unary ops */
zval result;
optimize_const_unary_op:
if (zend_optimizer_eval_unary_op(&result, opline->opcode, &ZEND_OP1_LITERAL(opline)) == SUCCESS) {
literal_dtor(&ZEND_OP1_LITERAL(opline));
opline->opcode = ZEND_QM_ASSIGN;
zend_optimizer_update_op1_const(op_array, opline, &result);
++(*opt_count);
}
}
break;
case ZEND_CAST:
if (opline->op1_type == IS_CONST) {
/* cast of constant operand */
zval result;
if (zend_optimizer_eval_cast(&result, opline->extended_value, &ZEND_OP1_LITERAL(opline)) == SUCCESS) {
literal_dtor(&ZEND_OP1_LITERAL(opline));
opline->opcode = ZEND_QM_ASSIGN;
opline->extended_value = 0;
zend_optimizer_update_op1_const(op_array, opline, &result);
++(*opt_count);
}
}
break;
case ZEND_STRLEN:
if (opline->op1_type == IS_CONST) {
zval result;
if (zend_optimizer_eval_strlen(&result, &ZEND_OP1_LITERAL(opline)) == SUCCESS) {
literal_dtor(&ZEND_OP1_LITERAL(opline));
opline->opcode = ZEND_QM_ASSIGN;
zend_optimizer_update_op1_const(op_array, opline, &result);
++(*opt_count);
}
}
break;
case ZEND_RETURN:
if (opline->op1_type == IS_TMP_VAR) {
src = VAR_SOURCE(opline->op1);
if (src && src->opcode == ZEND_QM_ASSIGN) {
zend_op *op = src + 1;
bool optimize = 1;
while (op < opline) {
if ((op->op1_type == opline->op1_type
&& op->op1.var == opline->op1.var)
|| (op->op2_type == opline->op1_type
&& op->op2.var == opline->op1.var)) {
optimize = 0;
break;
}
op++;
}
if (optimize) {
/* T = QM_ASSIGN(X), RETURN(T) to NOP, RETURN(X) */
VAR_SOURCE(opline->op1) = NULL;
COPY_NODE(opline->op1, src->op1);
MAKE_NOP(src);
++(*opt_count);
}
}
}
break;
case ZEND_QM_ASSIGN:
if (opline->op1_type == opline->result_type &&
opline->op1.var == opline->result.var) {
/* strip T = QM_ASSIGN(T) */
MAKE_NOP(opline);
++(*opt_count);
} else if (opline->op1_type == IS_TMP_VAR &&
opline->result_type == IS_TMP_VAR &&
!zend_bitset_in(used_ext, VAR_NUM(opline->op1.var))) {
/* T1 = ..., T2 = QM_ASSIGN(T1) to T2 = ..., NOP */
src = VAR_SOURCE(opline->op1);
if (src &&
src->opcode != ZEND_COPY_TMP &&
src->opcode != ZEND_ADD_ARRAY_ELEMENT &&
src->opcode != ZEND_ADD_ARRAY_UNPACK &&
(src->opcode != ZEND_DECLARE_LAMBDA_FUNCTION ||
src == opline -1)) {
src->result.var = opline->result.var;
VAR_SOURCE(opline->op1) = NULL;
VAR_SOURCE(opline->result) = src;
MAKE_NOP(opline);
++(*opt_count);
}
}
break;
}
/* get variable source */
if (opline->result_type & (IS_VAR|IS_TMP_VAR)) {
SET_VAR_SOURCE(opline);
}
opline++;
}
}
/* Rebuild plain (optimized) op_array from CFG */
static void assemble_code_blocks(zend_cfg *cfg, zend_op_array *op_array, zend_optimizer_ctx *ctx)
{
zend_basic_block *blocks = cfg->blocks;
zend_basic_block *end = blocks + cfg->blocks_count;
zend_basic_block *b;
zend_op *new_opcodes;
zend_op *opline;
uint32_t len = 0;
for (b = blocks; b < end; b++) {
if (b->len == 0) {
continue;
}
if (b->flags & (ZEND_BB_REACHABLE|ZEND_BB_UNREACHABLE_FREE)) {
opline = op_array->opcodes + b->start + b->len - 1;
if (opline->opcode == ZEND_JMP) {
zend_basic_block *next = b + 1;
while (next < end && !(next->flags & ZEND_BB_REACHABLE)) {
next++;
}
if (next < end && next == blocks + b->successors[0]) {
/* JMP to the next block - strip it */
MAKE_NOP(opline);
b->len--;
}
} else if (b->len == 1 && opline->opcode == ZEND_NOP) {
/* skip empty block */
b->len--;
}
len += b->len;
} else {
/* this block will not be used, delete all constants there */
zend_op *op = op_array->opcodes + b->start;
zend_op *end = op + b->len;
for (; op < end; op++) {
if (op->op1_type == IS_CONST) {
literal_dtor(&ZEND_OP1_LITERAL(op));
}
if (op->op2_type == IS_CONST) {
literal_dtor(&ZEND_OP2_LITERAL(op));
}
}
}
}
new_opcodes = emalloc(len * sizeof(zend_op));
opline = new_opcodes;
/* Copy code of reachable blocks into a single buffer */
for (b = blocks; b < end; b++) {
if (b->flags & (ZEND_BB_REACHABLE|ZEND_BB_UNREACHABLE_FREE)) {
memcpy(opline, op_array->opcodes + b->start, b->len * sizeof(zend_op));
b->start = opline - new_opcodes;
opline += b->len;
}
}
/* adjust jump targets */
efree(op_array->opcodes);
op_array->opcodes = new_opcodes;
op_array->last = len;
for (b = blocks; b < end; b++) {
if (!(b->flags & ZEND_BB_REACHABLE) || b->len == 0) {
continue;
}
opline = op_array->opcodes + b->start + b->len - 1;
switch (opline->opcode) {
case ZEND_FAST_CALL:
case ZEND_JMP:
ZEND_SET_OP_JMP_ADDR(opline, opline->op1, new_opcodes + blocks[b->successors[0]].start);
break;
case ZEND_JMPZ:
case ZEND_JMPNZ:
case ZEND_JMPZ_EX:
case ZEND_JMPNZ_EX:
case ZEND_FE_RESET_R:
case ZEND_FE_RESET_RW:
case ZEND_JMP_SET:
case ZEND_COALESCE:
case ZEND_ASSERT_CHECK:
case ZEND_JMP_NULL:
case ZEND_BIND_INIT_STATIC_OR_JMP:
case ZEND_JMP_FRAMELESS:
ZEND_SET_OP_JMP_ADDR(opline, opline->op2, new_opcodes + blocks[b->successors[0]].start);
break;
case ZEND_CATCH:
if (!(opline->extended_value & ZEND_LAST_CATCH)) {
ZEND_SET_OP_JMP_ADDR(opline, opline->op2, new_opcodes + blocks[b->successors[0]].start);
}
break;
case ZEND_FE_FETCH_R:
case ZEND_FE_FETCH_RW:
opline->extended_value = ZEND_OPLINE_TO_OFFSET(opline, new_opcodes + blocks[b->successors[0]].start);
break;
case ZEND_SWITCH_LONG:
case ZEND_SWITCH_STRING:
case ZEND_MATCH:
{
HashTable *jumptable = Z_ARRVAL(ZEND_OP2_LITERAL(opline));
zval *zv;
uint32_t s = 0;
ZEND_ASSERT(b->successors_count == (opline->opcode == ZEND_MATCH ? 1 : 2) + zend_hash_num_elements(jumptable));
ZEND_HASH_FOREACH_VAL(jumptable, zv) {
Z_LVAL_P(zv) = ZEND_OPLINE_TO_OFFSET(opline, new_opcodes + blocks[b->successors[s++]].start);
} ZEND_HASH_FOREACH_END();
opline->extended_value = ZEND_OPLINE_TO_OFFSET(opline, new_opcodes + blocks[b->successors[s++]].start);
break;
}
}
}
/* adjust exception jump targets & remove unused try_catch_array entries */
if (op_array->last_try_catch) {
int i, j;
uint32_t *map;
ALLOCA_FLAG(use_heap);
map = (uint32_t *)do_alloca(sizeof(uint32_t) * op_array->last_try_catch, use_heap);
for (i = 0, j = 0; i< op_array->last_try_catch; i++) {
if (blocks[cfg->map[op_array->try_catch_array[i].try_op]].flags & ZEND_BB_REACHABLE) {
map[i] = j;
op_array->try_catch_array[j].try_op = blocks[cfg->map[op_array->try_catch_array[i].try_op]].start;
if (op_array->try_catch_array[i].catch_op) {
op_array->try_catch_array[j].catch_op = blocks[cfg->map[op_array->try_catch_array[i].catch_op]].start;
} else {
op_array->try_catch_array[j].catch_op = 0;
}
if (op_array->try_catch_array[i].finally_op) {
op_array->try_catch_array[j].finally_op = blocks[cfg->map[op_array->try_catch_array[i].finally_op]].start;
} else {
op_array->try_catch_array[j].finally_op = 0;
}
if (!op_array->try_catch_array[i].finally_end) {
op_array->try_catch_array[j].finally_end = 0;
} else {
op_array->try_catch_array[j].finally_end = blocks[cfg->map[op_array->try_catch_array[i].finally_end]].start;
}
j++;
}
}
if (i != j) {
op_array->last_try_catch = j;
if (j == 0) {
efree(op_array->try_catch_array);
op_array->try_catch_array = NULL;
}
if (op_array->fn_flags & ZEND_ACC_HAS_FINALLY_BLOCK) {
zend_op *opline = new_opcodes;
zend_op *end = opline + len;
while (opline < end) {
if (opline->opcode == ZEND_FAST_RET &&
opline->op2.num != (uint32_t)-1 &&
opline->op2.num < (uint32_t)j) {
opline->op2.num = map[opline->op2.num];
}
opline++;
}
}
}
free_alloca(map, use_heap);
}
/* rebuild map (just for printing) */
memset(cfg->map, -1, sizeof(int) * op_array->last);
for (int n = 0; n < cfg->blocks_count; n++) {
if (cfg->blocks[n].flags & (ZEND_BB_REACHABLE|ZEND_BB_UNREACHABLE_FREE)) {
cfg->map[cfg->blocks[n].start] = n;
}
}
}
static zend_always_inline zend_basic_block *get_target_block(const zend_cfg *cfg, zend_basic_block *block, int n, uint32_t *opt_count)
{
int b;
zend_basic_block *target_block = cfg->blocks + block->successors[n];
if (target_block->len == 0 && !(target_block->flags & ZEND_BB_PROTECTED)) {
do {
b = target_block->successors[0];
target_block = cfg->blocks + b;
} while (target_block->len == 0 && !(target_block->flags & ZEND_BB_PROTECTED));
block->successors[n] = b;
++(*opt_count);
}
return target_block;
}
static zend_always_inline zend_basic_block *get_follow_block(const zend_cfg *cfg, zend_basic_block *block, int n, uint32_t *opt_count)
{
int b;
zend_basic_block *target_block = cfg->blocks + block->successors[n];
if (target_block->len == 0 && !(target_block->flags & ZEND_BB_PROTECTED)) {
do {
b = target_block->successors[0];
target_block = cfg->blocks + b;
} while (target_block->len == 0 && !(target_block->flags & ZEND_BB_PROTECTED));
block->successors[n] = b;
++(*opt_count);
}
return target_block;
}
static zend_always_inline zend_basic_block *get_next_block(const zend_cfg *cfg, zend_basic_block *block)
{
zend_basic_block *next_block = block + 1;
zend_basic_block *end = cfg->blocks + cfg->blocks_count;
while (1) {
if (next_block == end) {
return NULL;
} else if (next_block->flags & ZEND_BB_REACHABLE) {
break;
}
next_block++;
}
while (next_block->len == 0 && !(next_block->flags & ZEND_BB_PROTECTED)) {
next_block = cfg->blocks + next_block->successors[0];
}
return next_block;
}
/* we use "jmp_hitlist" to avoid infinity loops during jmp optimization */
static zend_always_inline bool in_hitlist(int target, int *jmp_hitlist, int jmp_hitlist_count)
{
int i;
for (i = 0; i < jmp_hitlist_count; i++) {
if (jmp_hitlist[i] == target) {
return 1;
}
}
return 0;
}
#define CHECK_LOOP(target) \
if (EXPECTED(!in_hitlist(target, jmp_hitlist, jmp_hitlist_count))) { \
jmp_hitlist[jmp_hitlist_count++] = target; \
} else { \
break; \
}
static void zend_jmp_optimization(zend_basic_block *block, zend_op_array *op_array, const zend_cfg *cfg, int *jmp_hitlist, uint32_t *opt_count)
{
/* last_op is the last opcode of the current block */
zend_basic_block *target_block, *follow_block, *next_block;
zend_op *last_op, *target;
int next, jmp_hitlist_count;
if (block->len == 0) {
return;
}
last_op = op_array->opcodes + block->start + block->len - 1;
switch (last_op->opcode) {
case ZEND_JMP:
jmp_hitlist_count = 0;
target_block = get_target_block(cfg, block, 0, opt_count);
while (target_block->len == 1) {
target = op_array->opcodes + target_block->start;
if (target->opcode == ZEND_JMP) {
/* JMP L, L: JMP L1 -> JMP L1 */
next = target_block->successors[0];
} else {
break;
}
CHECK_LOOP(next);
block->successors[0] = next;
++(*opt_count);
target_block = get_target_block(cfg, block, 0, opt_count);
}
next_block = get_next_block(cfg, block);
if (target_block == next_block) {
/* JMP(next) -> NOP */
MAKE_NOP(last_op);
++(*opt_count);
block->len--;
} else if (target_block->len == 1) {
target = op_array->opcodes + target_block->start;
if ((target->opcode == ZEND_RETURN ||
target->opcode == ZEND_RETURN_BY_REF ||
target->opcode == ZEND_GENERATOR_RETURN) &&
!(op_array->fn_flags & ZEND_ACC_HAS_FINALLY_BLOCK)) {
/* JMP L, L: RETURN to immediate RETURN */
*last_op = *target;
if (last_op->op1_type == IS_CONST) {
zval zv;
ZVAL_COPY(&zv, &ZEND_OP1_LITERAL(last_op));
last_op->op1.constant = zend_optimizer_add_literal(op_array, &zv);
}
block->successors_count = 0;
++(*opt_count);
}
}
break;
case ZEND_JMP_SET:
case ZEND_COALESCE:
case ZEND_JMP_NULL:
jmp_hitlist_count = 0;
target_block = get_target_block(cfg, block, 0, opt_count);
while (target_block->len == 1) {
target = op_array->opcodes + target_block->start;
if (target->opcode == ZEND_JMP) {
/* JMP_SET(X, L), L: JMP(L2) -> JMP_SET(X, L2) */
next = target_block->successors[0];
CHECK_LOOP(next);
block->successors[0] = next;
++(*opt_count);
} else {
break;
}
target_block = get_target_block(cfg, block, 0, opt_count);
}
break;
case ZEND_JMPZ:
case ZEND_JMPNZ:
jmp_hitlist_count = 0;
target_block = get_target_block(cfg, block, 0, opt_count);
while (target_block->len == 1) {
target = op_array->opcodes + target_block->start;
if (target->opcode == ZEND_JMP) {
/* JMPZ(X, L), L: JMP(L2) -> JMPZ(X, L2) */
next = target_block->successors[0];
} else if (target->opcode == last_op->opcode &&
SAME_VAR(target->op1, last_op->op1)) {
/* JMPZ(X, L), L: JMPZ(X, L2) -> JMPZ(X, L2) */
next = target_block->successors[0];
} else if (target->opcode == INV_COND(last_op->opcode) &&
SAME_VAR(target->op1, last_op->op1)) {
/* JMPZ(X, L), L: JMPNZ(X, L2) -> JMPZ(X, L+1) */
next = target_block->successors[1];
} else {
break;
}
CHECK_LOOP(next);
block->successors[0] = next;
++(*opt_count);
target_block = get_target_block(cfg, block, 0, opt_count);
}
follow_block = get_follow_block(cfg, block, 1, opt_count);
if (target_block == follow_block) {
/* L: JMP[N]Z(X, L+1) -> NOP or FREE(X) */
zend_optimizer_convert_to_free_op1(op_array, last_op);
if (last_op->opcode == ZEND_NOP) {
block->len--;
}
block->successors_count = 1;
++(*opt_count);
} else if (follow_block->len == 1) {
target = op_array->opcodes + follow_block->start;
if (target->opcode == ZEND_JMP) {
if (block->successors[0] == follow_block->successors[0]) {
/* JMPZ(X,L1), JMP(L1) -> NOP, JMP(L1) */
zend_optimizer_convert_to_free_op1(op_array, last_op);
if (last_op->opcode == ZEND_NOP) {
block->len--;
}
block->successors[0] = follow_block - cfg->blocks;
block->successors_count = 1;
++(*opt_count);
break;
} else if (!(follow_block->flags & (ZEND_BB_TARGET | ZEND_BB_PROTECTED))) {
next_block = get_next_block(cfg, follow_block);
if (target_block == next_block) {
/* JMPZ(X,L1) JMP(L2) L1: -> JMPNZ(X,L2) NOP*/
last_op->opcode = INV_COND(last_op->opcode);
block->successors[0] = follow_block->successors[0];
block->successors[1] = next_block - cfg->blocks;
follow_block->flags &= ~ZEND_BB_REACHABLE;
MAKE_NOP(target);
follow_block->len = 0;
next_block->flags |= ZEND_BB_FOLLOW;
break;
}
}
}
}
break;
case ZEND_JMPNZ_EX:
case ZEND_JMPZ_EX:
jmp_hitlist_count = 0;
target_block = get_target_block(cfg, block, 0, opt_count);
while (target_block->len == 1) {
target = op_array->opcodes + target_block->start;
if (target->opcode == ZEND_JMP) {
/* T = JMPZ_EX(X, L), L: JMP(L2) -> T = JMPZ(X, L2) */
next = target_block->successors[0];
} else if (target->opcode == last_op->opcode-3 &&
(SAME_VAR(target->op1, last_op->result) ||
SAME_VAR(target->op1, last_op->op1))) {
/* T = JMPZ_EX(X, L1), L1: JMPZ({X|T}, L2) -> T = JMPZ_EX(X, L2) */
next = target_block->successors[0];
} else if (target->opcode == last_op->opcode &&
target->result.var == last_op->result.var &&
(SAME_VAR(target->op1, last_op->result) ||
SAME_VAR(target->op1, last_op->op1))) {
/* T = JMPZ_EX(X, L1), L1: T = JMPZ_EX({X|T}, L2) -> T = JMPZ_EX(X, L2) */
next = target_block->successors[0];
} else if (target->opcode == INV_EX_COND(last_op->opcode) &&
(SAME_VAR(target->op1, last_op->result) ||
SAME_VAR(target->op1, last_op->op1))) {
/* T = JMPZ_EX(X, L1), L1: JMPNZ({X|T1}, L2) -> T = JMPZ_EX(X, L1+1) */
next = target_block->successors[1];
} else if (target->opcode == INV_EX_COND_EX(last_op->opcode) &&
target->result.var == last_op->result.var &&
(SAME_VAR(target->op1, last_op->result) ||
SAME_VAR(target->op1, last_op->op1))) {
/* T = JMPZ_EX(X, L1), L1: T = JMPNZ_EX({X|T}, L2) -> T = JMPZ_EX(X, L1+1) */
next = target_block->successors[1];
} else if (target->opcode == ZEND_BOOL &&
(SAME_VAR(target->op1, last_op->result) ||
SAME_VAR(target->op1, last_op->op1))) {
/* convert Y = JMPZ_EX(X,L1), L1: Z = BOOL(Y) to
Z = JMPZ_EX(X,L1+1) */
/* NOTE: This optimization pattern is not safe, but works, */
/* because result of JMPZ_EX instruction */
/* is not used on the following path and */
/* should be used once on the branch path. */
/* */
/* The pattern works well only if jumps processed in */
/* direct order, otherwise it breaks JMPZ_EX */
/* sequences too early. */
last_op->result.var = target->result.var;
next = target_block->successors[0];
} else {
break;
}
CHECK_LOOP(next);
block->successors[0] = next;
++(*opt_count);
target_block = get_target_block(cfg, block, 0, opt_count);
}
follow_block = get_follow_block(cfg, block, 1, opt_count);
if (target_block == follow_block) {
/* L: T = JMP[N]Z_EX(X, L+1) -> T = BOOL(X) */
last_op->opcode = ZEND_BOOL;
last_op->op2.num = 0;
block->successors_count = 1;
++(*opt_count);
break;
}
break;
}
}
/* Global data dependencies */
/* Find a set of variables which are used outside of the block where they are
* defined. We won't apply some optimization patterns for such variables. */
static void zend_t_usage(zend_cfg *cfg, zend_op_array *op_array, zend_bitset used_ext, zend_optimizer_ctx *ctx)
{
int n;
zend_basic_block *block, *next_block;
uint32_t var_num;
uint32_t bitset_len;
zend_bitset usage;
zend_bitset defined_here;
void *checkpoint;
zend_op *opline, *end;
if (op_array->T == 0) {
/* shortcut - if no Ts, nothing to do */
return;
}
checkpoint = zend_arena_checkpoint(ctx->arena);
bitset_len = zend_bitset_len(op_array->last_var + op_array->T);
defined_here = zend_arena_alloc(&ctx->arena, bitset_len * ZEND_BITSET_ELM_SIZE);
zend_bitset_clear(defined_here, bitset_len);
for (n = 1; n < cfg->blocks_count; n++) {
block = cfg-
Showing preview only (1,128K chars total). Download the full file or copy to clipboard to get everything.
gitextract_r7u7qvcd/ ├── .clang-format ├── .dockerignore ├── .editorconfig ├── .gdbinit ├── .gitattributes ├── .github/ │ └── workflows/ │ ├── artifact-hash.yml │ ├── auto-cache-pool-tarball.yml │ ├── build-alpine-builder-container.sh │ ├── linux-aarch64.yml │ ├── linux-glibc.yml │ ├── linux-x86_64.yml │ ├── macos-aarch64.yml │ ├── macos-x86_64.yml │ ├── runner-images.md │ ├── windows-cygwin.yml │ └── windows-msys2.yml ├── .gitignore ├── .gitmodules ├── README.md ├── TSRM/ │ ├── LICENSE │ ├── TSRM.c │ ├── TSRM.h │ ├── config.w32 │ ├── threads.m4 │ ├── tsrm.m4 │ ├── tsrm_win32.c │ └── tsrm_win32.h ├── Zend/ │ ├── LICENSE │ ├── Makefile.frag │ ├── Optimizer/ │ │ ├── block_pass.c │ │ ├── compact_literals.c │ │ ├── compact_vars.c │ │ ├── dce.c │ │ ├── dfa_pass.c │ │ ├── escape_analysis.c │ │ ├── nop_removal.c │ │ ├── optimize_func_calls.c │ │ ├── optimize_temp_vars_5.c │ │ ├── pass1.c │ │ ├── pass3.c │ │ ├── sccp.c │ │ ├── scdf.c │ │ ├── scdf.h │ │ ├── ssa_integrity.c │ │ ├── zend_call_graph.c │ │ ├── zend_call_graph.h │ │ ├── zend_cfg.c │ │ ├── zend_cfg.h │ │ ├── zend_dfg.c │ │ ├── zend_dfg.h │ │ ├── zend_dump.c │ │ ├── zend_dump.h │ │ ├── zend_func_info.c │ │ ├── zend_func_info.h │ │ ├── zend_func_infos.h │ │ ├── zend_inference.c │ │ ├── zend_inference.h │ │ ├── zend_optimizer.c │ │ ├── zend_optimizer.h │ │ ├── zend_optimizer_internal.h │ │ ├── zend_ssa.c │ │ ├── zend_ssa.h │ │ └── zend_worklist.h │ ├── README.md │ ├── Zend.m4 │ ├── asm/ │ │ ├── LICENSE │ │ ├── jump_arm64_aapcs_elf_gas.S │ │ ├── jump_arm64_aapcs_macho_gas.S │ │ ├── jump_arm64_aapcs_pe_armasm.asm │ │ ├── jump_arm_aapcs_elf_gas.S │ │ ├── jump_arm_aapcs_macho_gas.S │ │ ├── jump_combined_sysv_macho_gas.S │ │ ├── jump_i386_ms_pe_masm.asm │ │ ├── jump_i386_sysv_elf_gas.S │ │ ├── jump_i386_sysv_macho_gas.S │ │ ├── jump_loongarch64_sysv_elf_gas.S │ │ ├── jump_mips32_o32_elf_gas.S │ │ ├── jump_mips64_n64_elf_gas.S │ │ ├── jump_ppc32_sysv_elf_gas.S │ │ ├── jump_ppc32_sysv_macho_gas.S │ │ ├── jump_ppc32_sysv_xcoff_gas.S │ │ ├── jump_ppc64_sysv_elf_gas.S │ │ ├── jump_ppc64_sysv_macho_gas.S │ │ ├── jump_ppc64_sysv_xcoff_gas.S │ │ ├── jump_riscv64_sysv_elf_gas.S │ │ ├── jump_s390x_sysv_elf_gas.S │ │ ├── jump_sparc64_sysv_elf_gas.S │ │ ├── jump_x86_64_ms_pe_gas.S │ │ ├── jump_x86_64_ms_pe_masm.asm │ │ ├── jump_x86_64_sysv_elf_gas.S │ │ ├── jump_x86_64_sysv_macho_gas.S │ │ ├── make_arm64_aapcs_elf_gas.S │ │ ├── make_arm64_aapcs_macho_gas.S │ │ ├── make_arm64_aapcs_pe_armasm.asm │ │ ├── make_arm_aapcs_elf_gas.S │ │ ├── make_arm_aapcs_macho_gas.S │ │ ├── make_combined_sysv_macho_gas.S │ │ ├── make_i386_ms_pe_masm.asm │ │ ├── make_i386_sysv_elf_gas.S │ │ ├── make_i386_sysv_macho_gas.S │ │ ├── make_loongarch64_sysv_elf_gas.S │ │ ├── make_mips32_o32_elf_gas.S │ │ ├── make_mips64_n64_elf_gas.S │ │ ├── make_ppc32_sysv_elf_gas.S │ │ ├── make_ppc32_sysv_macho_gas.S │ │ ├── make_ppc32_sysv_xcoff_gas.S │ │ ├── make_ppc64_sysv_elf_gas.S │ │ ├── make_ppc64_sysv_macho_gas.S │ │ ├── make_ppc64_sysv_xcoff_gas.S │ │ ├── make_riscv64_sysv_elf_gas.S │ │ ├── make_s390x_sysv_elf_gas.S │ │ ├── make_sparc64_sysv_elf_gas.S │ │ ├── make_x86_64_ms_pe_gas.S │ │ ├── make_x86_64_ms_pe_masm.asm │ │ ├── make_x86_64_sysv_elf_gas.S │ │ ├── make_x86_64_sysv_macho_gas.S │ │ └── save_xmm_x86_64_ms_masm.asm │ ├── bench.php │ ├── micro_bench.php │ ├── tests/ │ │ ├── 001.phpt │ │ ├── 002.phpt │ │ ├── 003.phpt │ │ ├── 004.phpt │ │ ├── 005.phpt │ │ ├── 006.phpt │ │ ├── 008.phpt │ │ ├── 009.phpt │ │ ├── 010.phpt │ │ ├── 011.phpt │ │ ├── 012.phpt │ │ ├── 013.phpt │ │ ├── 014.inc │ │ ├── 014.phpt │ │ ├── 015.phpt │ │ ├── 016.phpt │ │ ├── 017.phpt │ │ ├── 018.phpt │ │ ├── 019.phpt │ │ ├── 020.phpt │ │ ├── 021.phpt │ │ ├── 022.phpt │ │ ├── 023.phpt │ │ ├── 024.phpt │ │ ├── 025.phpt │ │ ├── 026.phpt │ │ ├── 027.phpt │ │ ├── 028.phpt │ │ ├── 029.phpt │ │ ├── 030.phpt │ │ ├── 031.phpt │ │ ├── 032.phpt │ │ ├── 033.phpt │ │ ├── 034.phpt │ │ ├── 035.phpt │ │ ├── 036.phpt │ │ ├── 037.phpt │ │ ├── 038.phpt │ │ ├── 67468.phpt │ │ ├── ArrayAccess_indirect_append.phpt │ │ ├── ErrorException_construct.phpt │ │ ├── ErrorException_getSeverity.phpt │ │ ├── abstract-static.phpt │ │ ├── abstract_inheritance_001.phpt │ │ ├── abstract_inheritance_002.phpt │ │ ├── abstract_inheritance_003.phpt │ │ ├── access_modifiers_001.phpt │ │ ├── access_modifiers_002.phpt │ │ ├── access_modifiers_003.phpt │ │ ├── access_modifiers_004.phpt │ │ ├── access_modifiers_005.phpt │ │ ├── access_modifiers_006.phpt │ │ ├── access_modifiers_007.phpt │ │ ├── access_modifiers_008.phpt │ │ ├── access_modifiers_009.phpt │ │ ├── access_modifiers_010.phpt │ │ ├── access_modifiers_011.phpt │ │ ├── access_modifiers_012.phpt │ │ ├── access_modifiers_013.phpt │ │ ├── add_001.phpt │ │ ├── add_002.phpt │ │ ├── add_003.phpt │ │ ├── add_004.phpt │ │ ├── add_005.phpt │ │ ├── add_006.phpt │ │ ├── add_007.phpt │ │ ├── add_optional_by_ref_arg.phpt │ │ ├── allow_dynamic_properties_on_enum.phpt │ │ ├── allow_dynamic_properties_on_interface.phpt │ │ ├── allow_dynamic_properties_on_trait.phpt │ │ ├── alternative_offset_syntax_compile_error_in_const_expr.phpt │ │ ├── alternative_offset_syntax_compile_error_outside_const_expr.phpt │ │ ├── alternative_offset_syntax_in_encaps_string.phpt │ │ ├── and_001.phpt │ │ ├── anon/ │ │ │ ├── 001.phpt │ │ │ ├── 002.phpt │ │ │ ├── 003.phpt │ │ │ ├── 004.phpt │ │ │ ├── 005.phpt │ │ │ ├── 006.phpt │ │ │ ├── 007.phpt │ │ │ ├── 008.phpt │ │ │ ├── 009.phpt │ │ │ ├── 010.phpt │ │ │ ├── 011.phpt │ │ │ ├── 012.phpt │ │ │ ├── 013.phpt │ │ │ ├── 014.phpt │ │ │ ├── 015.phpt │ │ │ └── 016.phpt │ │ ├── anon_class_name.phpt │ │ ├── arg_unpack/ │ │ │ ├── basic.phpt │ │ │ ├── by_ref.phpt │ │ │ ├── by_ref_separation.phpt │ │ │ ├── dynamic.phpt │ │ │ ├── internal.phpt │ │ │ ├── invalid_type.phpt │ │ │ ├── many_args.phpt │ │ │ ├── method.phpt │ │ │ ├── new.phpt │ │ │ ├── non_integer_keys.phpt │ │ │ ├── positional_arg_after_unpack_error.phpt │ │ │ ├── string_keys.phpt │ │ │ ├── traversable_throwing_exception.phpt │ │ │ └── traversable_with_by_ref_parameters.phpt │ │ ├── arginfo_zpp_mismatch.inc │ │ ├── arginfo_zpp_mismatch.phpt │ │ ├── arginfo_zpp_mismatch_strict.phpt │ │ ├── argument_restriction_001.phpt │ │ ├── argument_restriction_002.phpt │ │ ├── argument_restriction_003.phpt │ │ ├── argument_restriction_004.phpt │ │ ├── argument_restriction_005.phpt │ │ ├── argument_restriction_006.phpt │ │ ├── array_add_indirect.phpt │ │ ├── array_addition_not_commutative.phpt │ │ ├── array_append_COW.phpt │ │ ├── array_hash_zero.phpt │ │ ├── array_literal_next_element_error.phpt │ │ ├── array_merge_recursive_next_key_overflow.phpt │ │ ├── array_multisort_exception.phpt │ │ ├── array_offset.phpt │ │ ├── array_offset_002.phpt │ │ ├── array_self_add_globals.phpt │ │ ├── array_splice_empty_ht_iter_removal.phpt │ │ ├── array_unpack/ │ │ │ ├── already_occupied.phpt │ │ │ ├── basic.phpt │ │ │ ├── classes.phpt │ │ │ ├── gh19303.phpt │ │ │ ├── gh9769.phpt │ │ │ ├── in_destructuring.phpt │ │ │ ├── in_destructuring_2.phpt │ │ │ ├── non_integer_keys.phpt │ │ │ ├── ref1.phpt │ │ │ ├── string_keys.phpt │ │ │ ├── undef_var.phpt │ │ │ ├── unpack_invalid_type_compile_time.phpt │ │ │ └── unpack_string_keys_compile_time.phpt │ │ ├── array_unpack_string_keys.phpt │ │ ├── array_unshift_COW.phpt │ │ ├── array_with_refs_identical.phpt │ │ ├── arrow_functions/ │ │ │ ├── 001.phpt │ │ │ ├── 002.phpt │ │ │ ├── 003.phpt │ │ │ ├── 004.phpt │ │ │ ├── 005.phpt │ │ │ ├── 006.phpt │ │ │ ├── 007.phpt │ │ │ └── 008.phpt │ │ ├── assert/ │ │ │ ├── bug70528.phpt │ │ │ ├── disable_assert_function.phpt │ │ │ ├── expect_001.phpt │ │ │ ├── expect_002.phpt │ │ │ ├── expect_003.phpt │ │ │ ├── expect_004.phpt │ │ │ ├── expect_005.phpt │ │ │ ├── expect_006.phpt │ │ │ ├── expect_007.phpt │ │ │ ├── expect_008.phpt │ │ │ ├── expect_009.phpt │ │ │ ├── expect_010.phpt │ │ │ ├── expect_011.phpt │ │ │ ├── expect_012.phpt │ │ │ ├── expect_013.phpt │ │ │ ├── expect_014.phpt │ │ │ ├── expect_015.phpt │ │ │ ├── expect_016.phpt │ │ │ ├── expect_017.phpt │ │ │ ├── expect_018.phpt │ │ │ ├── expect_019.phpt │ │ │ ├── expect_020.phpt │ │ │ └── expect_empty_stmt_bug.phpt │ │ ├── assign_by_val_function_by_ref_return_value.phpt │ │ ├── assign_coalesce_001.phpt │ │ ├── assign_coalesce_002.phpt │ │ ├── assign_coalesce_003.phpt │ │ ├── assign_coalesce_004.phpt │ │ ├── assign_coalesce_005.phpt │ │ ├── assign_coalesce_006.phpt │ │ ├── assign_coalesce_007.phpt │ │ ├── assign_coalesce_008.phpt │ │ ├── assign_coalesce_009.phpt │ │ ├── assign_concat_array_empty_string.phpt │ │ ├── assign_dim_obj_null_return.phpt │ │ ├── assign_dim_op_same_var.phpt │ │ ├── assign_dim_op_undef.phpt │ │ ├── assign_dim_ref_free.phpt │ │ ├── assign_obj_op_cache_slot.phpt │ │ ├── assign_obj_ref_byval_function.phpt │ │ ├── assign_obj_ref_return.phpt │ │ ├── assign_obj_to_ref_inference.phpt │ │ ├── assign_op_type_error.phpt │ │ ├── assign_ref_error_var_handling.phpt │ │ ├── assign_ref_func_leak.phpt │ │ ├── assign_ref_to_overloaded_prop.phpt │ │ ├── assign_to_obj_001.phpt │ │ ├── assign_to_obj_002.phpt │ │ ├── assign_to_var_001.phpt │ │ ├── assign_to_var_002.phpt │ │ ├── assign_to_var_003.phpt │ │ ├── assign_to_var_004.phpt │ │ ├── assign_typed_ref_result.phpt │ │ ├── ast/ │ │ │ ├── ast_serialize_backtick_literal.phpt │ │ │ ├── ast_serialize_floats.phpt │ │ │ └── zend-pow-assign.phpt │ │ ├── ast_serialize_backtick_literal.phpt │ │ ├── asymmetric_visibility/ │ │ │ ├── __set.phpt │ │ │ ├── __unset.phpt │ │ │ ├── ast_printing.phpt │ │ │ ├── bug001.phpt │ │ │ ├── bug002.phpt │ │ │ ├── bug003.phpt │ │ │ ├── bug004.phpt │ │ │ ├── cpp_no_type.phpt │ │ │ ├── cpp_private.phpt │ │ │ ├── cpp_protected.phpt │ │ │ ├── cpp_wider_set_scope.phpt │ │ │ ├── decrease_scope_private_private.phpt │ │ │ ├── decrease_scope_private_protected.phpt │ │ │ ├── decrease_scope_protected_protected.phpt │ │ │ ├── dim_add.phpt │ │ │ ├── duplicate_modifier.phpt │ │ │ ├── duplicate_modifier_2.phpt │ │ │ ├── gh19044.phpt │ │ │ ├── nested_write.phpt │ │ │ ├── no_type.phpt │ │ │ ├── object_reference.phpt │ │ │ ├── override_private_public.phpt │ │ │ ├── override_protected_private.phpt │ │ │ ├── override_protected_public.phpt │ │ │ ├── override_public_private.phpt │ │ │ ├── override_public_protected.phpt │ │ │ ├── private.phpt │ │ │ ├── protected.phpt │ │ │ ├── readonly.phpt │ │ │ ├── reference.phpt │ │ │ ├── reference_2.phpt │ │ │ ├── scope_rebinding.phpt │ │ │ ├── static_props.phpt │ │ │ ├── unset.phpt │ │ │ ├── unshared_rw_cache_slot.phpt │ │ │ ├── variation.phpt │ │ │ ├── variation_nested.phpt │ │ │ ├── virtual_get_only.phpt │ │ │ └── virtual_set_only.phpt │ │ ├── attributes/ │ │ │ ├── 001_placement.phpt │ │ │ ├── 002_rfcexample.phpt │ │ │ ├── 003_ast_nodes.phpt │ │ │ ├── 004_name_resolution.phpt │ │ │ ├── 005_objects.phpt │ │ │ ├── 006_filter.phpt │ │ │ ├── 007_self_reflect_attribute.phpt │ │ │ ├── 008_wrong_attribution.phpt │ │ │ ├── 009_doctrine_annotations_example.phpt │ │ │ ├── 010_unsupported_const_expression.phpt │ │ │ ├── 011_inheritance.phpt │ │ │ ├── 012_ast_export.phpt │ │ │ ├── 013_class_scope.phpt │ │ │ ├── 014_class_const_group.phpt │ │ │ ├── 015_property_group.phpt │ │ │ ├── 016_custom_attribute_validation.phpt │ │ │ ├── 017_closure_scope.phpt │ │ │ ├── 018_fatal_error_in_argument.phpt │ │ │ ├── 019_variable_attribute_name.phpt │ │ │ ├── 020_userland_attribute_validation.phpt │ │ │ ├── 021_attribute_flags_type_is_validated.phpt │ │ │ ├── 022_attribute_flags_value_is_validated.phpt │ │ │ ├── 023_ast_node_in_validation.phpt │ │ │ ├── 024_internal_target_validation.phpt │ │ │ ├── 025_internal_repeatable_validation.phpt │ │ │ ├── 026_unpack_in_args.phpt │ │ │ ├── 027_trailing_comma_args.phpt │ │ │ ├── 028_grouped.phpt │ │ │ ├── 029_reflect_internal_symbols.phpt │ │ │ ├── 030_strict_types.inc │ │ │ ├── 030_strict_types.phpt │ │ │ ├── 031_backtrace.phpt │ │ │ ├── 032_attribute_validation_scope.phpt │ │ │ ├── 033_attribute_flags_type_is_not_validated_at_comp_time.phpt │ │ │ ├── deprecated/ │ │ │ │ ├── class_constants/ │ │ │ │ │ ├── 001.phpt │ │ │ │ │ ├── 101.phpt │ │ │ │ │ ├── deprecated_constant_as_message_001.phpt │ │ │ │ │ ├── deprecated_constant_as_message_002.phpt │ │ │ │ │ ├── deprecated_constant_as_message_003.phpt │ │ │ │ │ ├── error_code_001.phpt │ │ │ │ │ ├── gh17711.phpt │ │ │ │ │ └── value_unknown_at_compile_time_001.phpt │ │ │ │ ├── functions/ │ │ │ │ │ ├── 001.phpt │ │ │ │ │ ├── deprecated_handler_001.phpt │ │ │ │ │ ├── deprecated_handler_002.phpt │ │ │ │ │ ├── deprecated_handler_003.phpt │ │ │ │ │ ├── error_code_001.phpt │ │ │ │ │ ├── gh17866.phpt │ │ │ │ │ ├── magic_call.phpt │ │ │ │ │ ├── message_004.phpt │ │ │ │ │ ├── message_005.phpt │ │ │ │ │ ├── throwing_error_handler_001.phpt │ │ │ │ │ ├── throwing_error_handler_002.phpt │ │ │ │ │ └── throwing_error_handler_003.phpt │ │ │ │ ├── message_001.phpt │ │ │ │ ├── message_002.phpt │ │ │ │ ├── message_003.phpt │ │ │ │ ├── message_004.phpt │ │ │ │ ├── property_readonly_001.phpt │ │ │ │ ├── property_readonly_002.phpt │ │ │ │ ├── property_readonly_003.phpt │ │ │ │ ├── type_validation_001.phpt │ │ │ │ ├── type_validation_002.phpt │ │ │ │ ├── type_validation_003.phpt │ │ │ │ └── type_validation_004.phpt │ │ │ ├── gh8421.phpt │ │ │ ├── ossfuzz371445205.phpt │ │ │ └── override/ │ │ │ ├── 001.phpt │ │ │ ├── 002.phpt │ │ │ ├── 003.phpt │ │ │ ├── 004.phpt │ │ │ ├── 005.phpt │ │ │ ├── 006.phpt │ │ │ ├── 007.phpt │ │ │ ├── 008.phpt │ │ │ ├── 009.phpt │ │ │ ├── 010.phpt │ │ │ ├── 011.phpt │ │ │ ├── 012.phpt │ │ │ ├── 013.phpt │ │ │ ├── 014.phpt │ │ │ ├── 015.phpt │ │ │ ├── 016.phpt │ │ │ ├── 017.phpt │ │ │ ├── 018.phpt │ │ │ ├── 019.phpt │ │ │ ├── 020.phpt │ │ │ ├── 021.phpt │ │ │ ├── 022.phpt │ │ │ ├── 023.phpt │ │ │ ├── 024.phpt │ │ │ ├── gh12189.phpt │ │ │ ├── gh12189_2.phpt │ │ │ ├── gh12189_3.phpt │ │ │ ├── gh12189_4.phpt │ │ │ ├── gh12189_5.phpt │ │ │ └── gh12189_6.phpt │ │ ├── binary-32bit.phpt │ │ ├── binary.phpt │ │ ├── bind_static_exception.phpt │ │ ├── bitwise_not_precision_exception.phpt │ │ ├── break_error_001.phpt │ │ ├── break_error_002.phpt │ │ ├── break_error_003.phpt │ │ ├── break_error_004.phpt │ │ ├── bug18556.phpt │ │ ├── bug19859.phpt │ │ ├── bug20240.phpt │ │ ├── bug20242.phpt │ │ ├── bug21478.phpt │ │ ├── bug21888.phpt │ │ ├── bug22725.phpt │ │ ├── bug22836.phpt │ │ ├── bug23104.phpt │ │ ├── bug24436.phpt │ │ ├── bug24635.phpt │ │ ├── bug24699.phpt │ │ ├── bug24773.phpt │ │ ├── bug24884.phpt │ │ ├── bug26010.phpt │ │ ├── bug26077.phpt │ │ ├── bug26166.phpt │ │ ├── bug26229.phpt │ │ ├── bug26281.phpt │ │ ├── bug26696.phpt │ │ ├── bug26697.phpt │ │ ├── bug26698.phpt │ │ ├── bug26801.phpt │ │ ├── bug26802.phpt │ │ ├── bug27268.phpt │ │ ├── bug27304.phpt │ │ ├── bug27598.phpt │ │ ├── bug27669.phpt │ │ ├── bug27731.phpt │ │ ├── bug27798.phpt │ │ ├── bug28072.phpt │ │ ├── bug28377.phpt │ │ ├── bug28442.phpt │ │ ├── bug28444.phpt │ │ ├── bug29015.phpt │ │ ├── bug29104.phpt │ │ ├── bug29210.phpt │ │ ├── bug29368.phpt │ │ ├── bug29368_1.phpt │ │ ├── bug29368_2.phpt │ │ ├── bug29368_3.phpt │ │ ├── bug29505.phpt │ │ ├── bug29674.phpt │ │ ├── bug29689.phpt │ │ ├── bug29883.phpt │ │ ├── bug29890.phpt │ │ ├── bug29896.phpt │ │ ├── bug29944.phpt │ │ ├── bug30080.phpt │ │ ├── bug30140.phpt │ │ ├── bug30161.phpt │ │ ├── bug30162.phpt │ │ ├── bug30346.phpt │ │ ├── bug30394.phpt │ │ ├── bug30407.phpt │ │ ├── bug30451.phpt │ │ ├── bug30519.phpt │ │ ├── bug30702.phpt │ │ ├── bug30707.phpt │ │ ├── bug30725.phpt │ │ ├── bug30791.phpt │ │ ├── bug30820.phpt │ │ ├── bug30828.phpt │ │ ├── bug30889.phpt │ │ ├── bug30922.phpt │ │ ├── bug30998.phpt │ │ ├── bug31098.phpt │ │ ├── bug31102.phpt │ │ ├── bug31177-2.phpt │ │ ├── bug31177.phpt │ │ ├── bug31341.phpt │ │ ├── bug31525.phpt │ │ ├── bug31683.phpt │ │ ├── bug31720.phpt │ │ ├── bug32226.phpt │ │ ├── bug32252.phpt │ │ ├── bug32290.phpt │ │ ├── bug32296.phpt │ │ ├── bug32322.phpt │ │ ├── bug32427.phpt │ │ ├── bug32428.phpt │ │ ├── bug32429.phpt │ │ ├── bug32596.phpt │ │ ├── bug32660.phpt │ │ ├── bug32674.phpt │ │ ├── bug32799.phpt │ │ ├── bug32833.phpt │ │ ├── bug32993.phpt │ │ ├── bug33116.phpt │ │ ├── bug33171.phpt │ │ ├── bug33257.phpt │ │ ├── bug33277.phpt │ │ ├── bug33282.phpt │ │ ├── bug33318.phpt │ │ ├── bug33512.phpt │ │ ├── bug33558.phpt │ │ ├── bug33710.phpt │ │ ├── bug33732.phpt │ │ ├── bug33771.phpt │ │ ├── bug33802.phpt │ │ ├── bug33996.phpt │ │ ├── bug33999.phpt │ │ ├── bug34045.phpt │ │ ├── bug34062.phpt │ │ ├── bug34064.phpt │ │ ├── bug34065.phpt │ │ ├── bug34137.phpt │ │ ├── bug34199.phpt │ │ ├── bug34260.phpt │ │ ├── bug34310.phpt │ │ ├── bug34358.phpt │ │ ├── bug34467.phpt │ │ ├── bug34518.phpt │ │ ├── bug34617.phpt │ │ ├── bug34678.phpt │ │ ├── bug34786.phpt │ │ ├── bug34873.phpt │ │ ├── bug34879.phpt │ │ ├── bug34893.phpt │ │ ├── bug35017.phpt │ │ ├── bug35106.phpt │ │ ├── bug35163.phpt │ │ ├── bug35163_2.phpt │ │ ├── bug35163_3.phpt │ │ ├── bug35239.phpt │ │ ├── bug35393.phpt │ │ ├── bug35411.phpt │ │ ├── bug35470.phpt │ │ ├── bug35509.phpt │ │ ├── bug35634.phpt │ │ ├── bug35655.phpt │ │ ├── bug36006.phpt │ │ ├── bug36037.phpt │ │ ├── bug36071.phpt │ │ ├── bug36214.phpt │ │ ├── bug36268.phpt │ │ ├── bug36513.phpt │ │ ├── bug36568.phpt │ │ ├── bug36759.phpt │ │ ├── bug37046.phpt │ │ ├── bug37138.phpt │ │ ├── bug37144.phpt │ │ ├── bug37212.phpt │ │ ├── bug37251.phpt │ │ ├── bug37632.phpt │ │ ├── bug37667.phpt │ │ ├── bug37707.phpt │ │ ├── bug37715.phpt │ │ ├── bug37811.phpt │ │ ├── bug38146.phpt │ │ ├── bug38211.phpt │ │ ├── bug38220.phpt │ │ ├── bug38234.phpt │ │ ├── bug38287.phpt │ │ ├── bug38461.phpt │ │ ├── bug38469.phpt │ │ ├── bug38623.phpt │ │ ├── bug38624.phpt │ │ ├── bug38772.phpt │ │ ├── bug38779.phpt │ │ ├── bug38779_1.phpt │ │ ├── bug38808.phpt │ │ ├── bug39003.phpt │ │ ├── bug39017.phpt │ │ ├── bug39018.phpt │ │ ├── bug39018_2.phpt │ │ ├── bug39036.phpt │ │ ├── bug39297.phpt │ │ ├── bug39304.phpt │ │ ├── bug39346.phpt │ │ ├── bug39438.phpt │ │ ├── bug39445.phpt │ │ ├── bug39449.phpt │ │ ├── bug39542/ │ │ │ └── bug39542.inc │ │ ├── bug39542.phpt │ │ ├── bug39602.phpt │ │ ├── bug39721.phpt │ │ ├── bug39775.phpt │ │ ├── bug39825.phpt │ │ ├── bug39944.phpt │ │ ├── bug39990.phpt │ │ ├── bug40236.inc │ │ ├── bug40236.phpt │ │ ├── bug40261.phpt │ │ ├── bug40509.phpt │ │ ├── bug40621.phpt │ │ ├── bug40705.phpt │ │ ├── bug40757.phpt │ │ ├── bug40770.phpt │ │ ├── bug40809.phpt │ │ ├── bug40815.phpt │ │ ├── bug40833.phpt │ │ ├── bug40899.phpt │ │ ├── bug41026.phpt │ │ ├── bug41117_1.phpt │ │ ├── bug41209.phpt │ │ ├── bug41351.phpt │ │ ├── bug41351_2.phpt │ │ ├── bug41351_3.phpt │ │ ├── bug41372.phpt │ │ ├── bug41401.phpt │ │ ├── bug41421.phpt │ │ ├── bug41633_1.phpt │ │ ├── bug41633_2.phpt │ │ ├── bug41633_3.phpt │ │ ├── bug41633_4.phpt │ │ ├── bug41640.phpt │ │ ├── bug41813.phpt │ │ ├── bug41919.phpt │ │ ├── bug41929.phpt │ │ ├── bug41961.phpt │ │ ├── bug42143.phpt │ │ ├── bug42211.phpt │ │ ├── bug42767.phpt │ │ ├── bug42772.phpt │ │ ├── bug42798.phpt │ │ ├── bug42802.phpt │ │ ├── bug42817.phpt │ │ ├── bug42818.phpt │ │ ├── bug42819.phpt │ │ ├── bug42820.phpt │ │ ├── bug42859.phpt │ │ ├── bug42937.phpt │ │ ├── bug43027.phpt │ │ ├── bug43053.phpt │ │ ├── bug43128.phpt │ │ ├── bug43175.phpt │ │ ├── bug43183.phpt │ │ ├── bug43200.phpt │ │ ├── bug43200_2.phpt │ │ ├── bug43201.phpt │ │ ├── bug43332_1.phpt │ │ ├── bug43332_2.phpt │ │ ├── bug43343.phpt │ │ ├── bug43344_1.phpt │ │ ├── bug43344_10.phpt │ │ ├── bug43344_11.phpt │ │ ├── bug43344_12.phpt │ │ ├── bug43344_13.phpt │ │ ├── bug43344_2.phpt │ │ ├── bug43344_3.phpt │ │ ├── bug43344_4.phpt │ │ ├── bug43344_5.phpt │ │ ├── bug43344_6.phpt │ │ ├── bug43344_7.phpt │ │ ├── bug43344_8.phpt │ │ ├── bug43344_9.phpt │ │ ├── bug43426.phpt │ │ ├── bug43450.phpt │ │ ├── bug43483.phpt │ │ ├── bug43651.phpt │ │ ├── bug43703.phpt │ │ ├── bug43851.phpt │ │ ├── bug43918.phpt │ │ ├── bug44069.phpt │ │ ├── bug44141.phpt │ │ ├── bug44184.phpt │ │ ├── bug44414.phpt │ │ ├── bug44653.phpt │ │ ├── bug44660.phpt │ │ ├── bug44827.phpt │ │ ├── bug44830.phpt │ │ ├── bug44899.phpt │ │ ├── bug44899_2.phpt │ │ ├── bug44913.phpt │ │ ├── bug45147.phpt │ │ ├── bug45180.phpt │ │ ├── bug45186.phpt │ │ ├── bug45186_2.phpt │ │ ├── bug45742.phpt │ │ ├── bug45744.phpt │ │ ├── bug45805.phpt │ │ ├── bug45862.phpt │ │ ├── bug45877.phpt │ │ ├── bug45910.phpt │ │ ├── bug45910_2.phpt │ │ ├── bug46106.phpt │ │ ├── bug46196.phpt │ │ ├── bug46238.phpt │ │ ├── bug46241.phpt │ │ ├── bug46246.phpt │ │ ├── bug46304.phpt │ │ ├── bug46308.phpt │ │ ├── bug46381.phpt │ │ ├── bug46409.phpt │ │ ├── bug46665.phpt │ │ ├── bug46665_autoload.inc │ │ ├── bug46701.phpt │ │ ├── bug46811.phpt │ │ ├── bug46813.phpt │ │ ├── bug47054.phpt │ │ ├── bug47109.phpt │ │ ├── bug47165.phpt │ │ ├── bug47343.phpt │ │ ├── bug47353.phpt │ │ ├── bug47516.phpt │ │ ├── bug47572.phpt │ │ ├── bug47593.phpt │ │ ├── bug47596.phpt │ │ ├── bug47699.phpt │ │ ├── bug47704.phpt │ │ ├── bug47714.phpt │ │ ├── bug47771.phpt │ │ ├── bug47801.phpt │ │ ├── bug47836.phpt │ │ ├── bug47880.phpt │ │ ├── bug48215.phpt │ │ ├── bug48215_2.phpt │ │ ├── bug48228.phpt │ │ ├── bug48248.phpt │ │ ├── bug48408.phpt │ │ ├── bug48409.phpt │ │ ├── bug48428.phpt │ │ ├── bug48533.phpt │ │ ├── bug48667_1.phpt │ │ ├── bug48667_2.phpt │ │ ├── bug48770.phpt │ │ ├── bug48770_2.phpt │ │ ├── bug48770_3.phpt │ │ ├── bug48899-deprecated.phpt │ │ ├── bug48899.phpt │ │ ├── bug48912.phpt │ │ ├── bug48930.phpt │ │ ├── bug49269.phpt │ │ ├── bug49472.phpt │ │ ├── bug49866.phpt │ │ ├── bug49893.phpt │ │ ├── bug49908.phpt │ │ ├── bug50005.phpt │ │ ├── bug50146.phpt │ │ ├── bug50174.phpt │ │ ├── bug50255.phpt │ │ ├── bug50383.phpt │ │ ├── bug50394.phpt │ │ ├── bug50810.phpt │ │ ├── bug50816.phpt │ │ ├── bug51176.phpt │ │ ├── bug51394.phpt │ │ ├── bug51421.phpt │ │ ├── bug51791.phpt │ │ ├── bug51822.phpt │ │ ├── bug51827.phpt │ │ ├── bug52001.phpt │ │ ├── bug52041.phpt │ │ ├── bug52060.phpt │ │ ├── bug52193.phpt │ │ ├── bug52355.phpt │ │ ├── bug52361.phpt │ │ ├── bug52484.phpt │ │ ├── bug52484_2.phpt │ │ ├── bug52484_3.phpt │ │ ├── bug52508.phpt │ │ ├── bug52614.phpt │ │ ├── bug52879.phpt │ │ ├── bug52939.phpt │ │ ├── bug52940.phpt │ │ ├── bug53305.phpt │ │ ├── bug53347.phpt │ │ ├── bug53432.phpt │ │ ├── bug53511.phpt │ │ ├── bug53629.phpt │ │ ├── bug53632.phpt │ │ ├── bug53727.phpt │ │ ├── bug53748.phpt │ │ ├── bug53826.phpt │ │ ├── bug53958.phpt │ │ ├── bug53971.phpt │ │ ├── bug54013.phpt │ │ ├── bug54039.phpt │ │ ├── bug54043.phpt │ │ ├── bug54268.phpt │ │ ├── bug54305.phpt │ │ ├── bug54358.phpt │ │ ├── bug54367.phpt │ │ ├── bug54372.phpt │ │ ├── bug54547.phpt │ │ ├── bug54624.phpt │ │ ├── bug54804.inc │ │ ├── bug54804.phpt │ │ ├── bug54910.phpt │ │ ├── bug55007.phpt │ │ ├── bug55086.phpt │ │ ├── bug55135.phpt │ │ ├── bug55156.phpt │ │ ├── bug55247.phpt │ │ ├── bug55305.phpt │ │ ├── bug55445.phpt │ │ ├── bug55509.phpt │ │ ├── bug55578.phpt │ │ ├── bug55705.phpt │ │ ├── bug55825.phpt │ │ ├── bug60099.phpt │ │ ├── bug60138.phpt │ │ ├── bug60139.phpt │ │ ├── bug60161.phpt │ │ ├── bug60169.phpt │ │ ├── bug60350.phpt │ │ ├── bug60362.phpt │ │ ├── bug60444.phpt │ │ ├── bug60536_001.phpt │ │ ├── bug60536_002.phpt │ │ ├── bug60536_003.phpt │ │ ├── bug60536_004.phpt │ │ ├── bug60536_005.phpt │ │ ├── bug60569.phpt │ │ ├── bug60573.phpt │ │ ├── bug60573_2.phpt │ │ ├── bug60598.phpt │ │ ├── bug60611.phpt │ │ ├── bug60613.phpt │ │ ├── bug60738.phpt │ │ ├── bug60738_variation.phpt │ │ ├── bug60771.phpt │ │ ├── bug60825.phpt │ │ ├── bug60833.phpt │ │ ├── bug60909_1.phpt │ │ ├── bug60909_2.phpt │ │ ├── bug60978.phpt │ │ ├── bug61011.phpt │ │ ├── bug61025.phpt │ │ ├── bug61087.phpt │ │ ├── bug61095.phpt │ │ ├── bug61165.phpt │ │ ├── bug61225.phpt │ │ ├── bug61273.phpt │ │ ├── bug61362.phpt │ │ ├── bug61681.phpt │ │ ├── bug61761.phpt │ │ ├── bug61767.phpt │ │ ├── bug61782.phpt │ │ ├── bug61970.phpt │ │ ├── bug61970_1.phpt │ │ ├── bug61970_2.phpt │ │ ├── bug62069.phpt │ │ ├── bug62069_2.phpt │ │ ├── bug62097.phpt │ │ ├── bug62343.phpt │ │ ├── bug62358.phpt │ │ ├── bug62441.phpt │ │ ├── bug62609.phpt │ │ ├── bug62609_2.phpt │ │ ├── bug62653.phpt │ │ ├── bug62680.phpt │ │ ├── bug62763.phpt │ │ ├── bug62814.phpt │ │ ├── bug62892.phpt │ │ ├── bug62907.phpt │ │ ├── bug62956.phpt │ │ ├── bug62991.phpt │ │ ├── bug63055.phpt │ │ ├── bug63111.phpt │ │ ├── bug63173.phpt │ │ ├── bug63206.phpt │ │ ├── bug63206_1.phpt │ │ ├── bug63206_2.phpt │ │ ├── bug63217.phpt │ │ ├── bug63219.phpt │ │ ├── bug63305.phpt │ │ ├── bug63462.phpt │ │ ├── bug63468.phpt │ │ ├── bug63635.phpt │ │ ├── bug63734.phpt │ │ ├── bug63741.phpt │ │ ├── bug63762.phpt │ │ ├── bug63816.phpt │ │ ├── bug63882.phpt │ │ ├── bug63882_2.phpt │ │ ├── bug63976.phpt │ │ ├── bug63982.phpt │ │ ├── bug64135.phpt │ │ ├── bug64239_1.phpt │ │ ├── bug64239_2.phpt │ │ ├── bug64239_3.phpt │ │ ├── bug64239_4.phpt │ │ ├── bug64354.phpt │ │ ├── bug64417.phpt │ │ ├── bug64515.phpt │ │ ├── bug64555.phpt │ │ ├── bug64578.phpt │ │ ├── bug64660.phpt │ │ ├── bug64677.phpt │ │ ├── bug64720.phpt │ │ ├── bug64821.1.phpt │ │ ├── bug64821.2.phpt │ │ ├── bug64821.3.phpt │ │ ├── bug64896.phpt │ │ ├── bug64960.phpt │ │ ├── bug64966.phpt │ │ ├── bug64979.phpt │ │ ├── bug64988.phpt │ │ ├── bug65051.phpt │ │ ├── bug65108.phpt │ │ ├── bug65254.phpt │ │ ├── bug65291.phpt │ │ ├── bug65322.phpt │ │ ├── bug65372.phpt │ │ ├── bug65419.phpt │ │ ├── bug65579.phpt │ │ ├── bug65784.phpt │ │ ├── bug65911.phpt │ │ ├── bug65969.phpt │ │ ├── bug66015.phpt │ │ ├── bug66218.phpt │ │ ├── bug66252.phpt │ │ ├── bug66286.phpt │ │ ├── bug66608.phpt │ │ ├── bug66609.phpt │ │ ├── bug66660.phpt │ │ ├── bug66719.phpt │ │ ├── bug66811.phpt │ │ ├── bug67111.phpt │ │ ├── bug67169.phpt │ │ ├── bug67314.phpt │ │ ├── bug67368.phpt │ │ ├── bug67436/ │ │ │ ├── a.inc │ │ │ ├── b.inc │ │ │ ├── bug67436.phpt │ │ │ ├── bug67436_nohandler.phpt │ │ │ └── c.inc │ │ ├── bug67633.phpt │ │ ├── bug67856.phpt │ │ ├── bug67874.phpt │ │ ├── bug67922.phpt │ │ ├── bug67938.phpt │ │ ├── bug67985.phpt │ │ ├── bug68118.phpt │ │ ├── bug68148.phpt │ │ ├── bug68162.phpt │ │ ├── bug68163.phpt │ │ ├── bug68191.phpt │ │ ├── bug68215.phpt │ │ ├── bug68262.phpt │ │ ├── bug68370.phpt │ │ ├── bug68412.phpt │ │ ├── bug68446.phpt │ │ ├── bug68475.phpt │ │ ├── bug68652.phpt │ │ ├── bug68775.phpt │ │ ├── bug68797.phpt │ │ ├── bug68887.phpt │ │ ├── bug68896.phpt │ │ ├── bug69017.phpt │ │ ├── bug69025.phpt │ │ ├── bug69084.phpt │ │ ├── bug69092.2.phpt │ │ ├── bug69092.phpt │ │ ├── bug69124.phpt │ │ ├── bug69167.phpt │ │ ├── bug69174.phpt │ │ ├── bug69180-backtrace.phpt │ │ ├── bug69201.phpt │ │ ├── bug69212.phpt │ │ ├── bug69221.phpt │ │ ├── bug69221_2.phpt │ │ ├── bug69315.phpt │ │ ├── bug69376.phpt │ │ ├── bug69376_2.phpt │ │ ├── bug69388.phpt │ │ ├── bug69388_2.phpt │ │ ├── bug69420.phpt │ │ ├── bug69427.phpt │ │ ├── bug69446.phpt │ │ ├── bug69446_2.phpt │ │ ├── bug69467.phpt │ │ ├── bug69532.phpt │ │ ├── bug69534.phpt │ │ ├── bug69537.phpt │ │ ├── bug69551.phpt │ │ ├── bug69568.phpt │ │ ├── bug69599.phpt │ │ ├── bug69640.phpt │ │ ├── bug69676.phpt │ │ ├── bug69676_2.phpt │ │ ├── bug69676_3.phpt │ │ ├── bug69732.phpt │ │ ├── bug69740.phpt │ │ ├── bug69754.phpt │ │ ├── bug69755.phpt │ │ ├── bug69756.phpt │ │ ├── bug69758.phpt │ │ ├── bug69761.phpt │ │ ├── bug69767.phpt │ │ ├── bug69788.phpt │ │ ├── bug69802_2.phpt │ │ ├── bug69805.phpt │ │ ├── bug69825.phpt │ │ ├── bug69832.phpt │ │ ├── bug69871.phpt │ │ ├── bug69889.phpt │ │ ├── bug69891.phpt │ │ ├── bug69892.phpt │ │ ├── bug69893.phpt │ │ ├── bug69905.phpt │ │ ├── bug69955.phpt │ │ ├── bug69957.phpt │ │ ├── bug69989_1.phpt │ │ ├── bug69989_2.phpt │ │ ├── bug69989_3.phpt │ │ ├── bug69996.phpt │ │ ├── bug70012.phpt │ │ ├── bug70083.phpt │ │ ├── bug70089.phpt │ │ ├── bug70117.phpt │ │ ├── bug70121.phpt │ │ ├── bug70124.phpt │ │ ├── bug70156.phpt │ │ ├── bug70164.phpt │ │ ├── bug70173.phpt │ │ ├── bug70179.phpt │ │ ├── bug70182.phpt │ │ ├── bug70183.phpt │ │ ├── bug70187.phpt │ │ ├── bug70187_2.phpt │ │ ├── bug70215.phpt │ │ ├── bug70223.phpt │ │ ├── bug70240.phpt │ │ ├── bug70241.phpt │ │ ├── bug70253.phpt │ │ ├── bug70258.phpt │ │ ├── bug70262.phpt │ │ ├── bug70288.phpt │ │ ├── bug70293.phpt │ │ ├── bug70321.phpt │ │ ├── bug70332.phpt │ │ ├── bug70397.phpt │ │ ├── bug70398.phpt │ │ ├── bug70430.phpt │ │ ├── bug70478.phpt │ │ ├── bug70547.phpt │ │ ├── bug70630.phpt │ │ ├── bug70662.phpt │ │ ├── bug70681.phpt │ │ ├── bug70685.phpt │ │ ├── bug70689.phpt │ │ ├── bug70748.phpt │ │ ├── bug70782.phpt │ │ ├── bug70785.phpt │ │ ├── bug70804.phpt │ │ ├── bug70805.phpt │ │ ├── bug70805_1.phpt │ │ ├── bug70805_2.phpt │ │ ├── bug70873.phpt │ │ ├── bug70895.phpt │ │ ├── bug70898.phpt │ │ ├── bug70912.phpt │ │ ├── bug70914.phpt │ │ ├── bug70918.phpt │ │ ├── bug70944.phpt │ │ ├── bug70957.phpt │ │ ├── bug70958.phpt │ │ ├── bug70967.phpt │ │ ├── bug70987.phpt │ │ ├── bug70997.phpt │ │ ├── bug71030.phpt │ │ ├── bug71067.phpt │ │ ├── bug71086.phpt │ │ ├── bug71154.phpt │ │ ├── bug71163.phpt │ │ ├── bug71196.phpt │ │ ├── bug71221.phpt │ │ ├── bug71248.phpt │ │ ├── bug71266.phpt │ │ ├── bug71275.phpt │ │ ├── bug71300.phpt │ │ ├── bug71336.phpt │ │ ├── bug71359.phpt │ │ ├── bug71414.phpt │ │ ├── bug71428.1.phpt │ │ ├── bug71428.2.phpt │ │ ├── bug71428.3.phpt │ │ ├── bug71470.phpt │ │ ├── bug71474.phpt │ │ ├── bug71529.phpt │ │ ├── bug71539.phpt │ │ ├── bug71539_1.phpt │ │ ├── bug71539_2.phpt │ │ ├── bug71539_3.phpt │ │ ├── bug71539_4.phpt │ │ ├── bug71539_5.phpt │ │ ├── bug71572.phpt │ │ ├── bug71622.phpt │ │ ├── bug71724.phpt │ │ ├── bug71731.phpt │ │ ├── bug71737.phpt │ │ ├── bug71756.phpt │ │ ├── bug71818.phpt │ │ ├── bug71841.phpt │ │ ├── bug71859.phpt │ │ ├── bug71871.phpt │ │ ├── bug71871_2.phpt │ │ ├── bug71914.phpt │ │ ├── bug71922.phpt │ │ ├── bug71930.phpt │ │ ├── bug71980.phpt │ │ ├── bug72038.phpt │ │ ├── bug72101.phpt │ │ ├── bug72107.phpt │ │ ├── bug72119.phpt │ │ ├── bug72162.phpt │ │ ├── bug72177.phpt │ │ ├── bug72177_2.phpt │ │ ├── bug72188.phpt │ │ ├── bug72215.phpt │ │ ├── bug72215_1.phpt │ │ ├── bug72215_2.phpt │ │ ├── bug72215_3.phpt │ │ ├── bug72216.phpt │ │ ├── bug72335.phpt │ │ ├── bug72347.phpt │ │ ├── bug72373.phpt │ │ ├── bug72395.phpt │ │ ├── bug72441.phpt │ │ ├── bug72496.phpt │ │ ├── bug72508.phpt │ │ ├── bug72530.phpt │ │ ├── bug72543.phpt │ │ ├── bug72543_1.phpt │ │ ├── bug72543_2.phpt │ │ ├── bug72543_3.phpt │ │ ├── bug72543_4.phpt │ │ ├── bug72543_5.phpt │ │ ├── bug72581.phpt │ │ ├── bug72594.phpt │ │ ├── bug72598.phpt │ │ ├── bug72598_2.phpt │ │ ├── bug72767.phpt │ │ ├── bug72813.phpt │ │ ├── bug72854.phpt │ │ ├── bug72918.phpt │ │ ├── bug72943.phpt │ │ ├── bug72944.phpt │ │ ├── bug73156.phpt │ │ ├── bug73288.phpt │ │ ├── bug73337.phpt │ │ ├── bug73338.phpt │ │ ├── bug73350.phpt │ │ ├── bug73663.phpt │ │ ├── bug73663_2.phpt │ │ ├── bug73753.phpt │ │ ├── bug73792.phpt │ │ ├── bug73816.phpt │ │ ├── bug73900.phpt │ │ ├── bug73916.phpt │ │ ├── bug73954.phpt │ │ ├── bug73960.phpt │ │ ├── bug73987.phpt │ │ ├── bug73987_1.phpt │ │ ├── bug73987_2.phpt │ │ ├── bug73987_3.phpt │ │ ├── bug73989.phpt │ │ ├── bug73998.phpt │ │ ├── bug74053.phpt │ │ ├── bug74084.phpt │ │ ├── bug74093.phpt │ │ ├── bug74164.phpt │ │ ├── bug74269.phpt │ │ ├── bug74340.phpt │ │ ├── bug74546.phpt │ │ ├── bug74603.ini │ │ ├── bug74603.phpt │ │ ├── bug74657.phpt │ │ ├── bug74810.phpt │ │ ├── bug74836.phpt │ │ ├── bug74840.phpt │ │ ├── bug74862.phpt │ │ ├── bug74862_2.phpt │ │ ├── bug74947.phpt │ │ ├── bug75079.phpt │ │ ├── bug75079_2.phpt │ │ ├── bug75218.phpt │ │ ├── bug75241.phpt │ │ ├── bug75252.phpt │ │ ├── bug75290.phpt │ │ ├── bug75420.1.phpt │ │ ├── bug75420.10.phpt │ │ ├── bug75420.11.phpt │ │ ├── bug75420.12.phpt │ │ ├── bug75420.13.phpt │ │ ├── bug75420.14.phpt │ │ ├── bug75420.15.phpt │ │ ├── bug75420.16.phpt │ │ ├── bug75420.2.phpt │ │ ├── bug75420.3.phpt │ │ ├── bug75420.4.phpt │ │ ├── bug75420.5.phpt │ │ ├── bug75420.6.phpt │ │ ├── bug75420.7.phpt │ │ ├── bug75420.8.phpt │ │ ├── bug75420.9.phpt │ │ ├── bug75420.phpt │ │ ├── bug75426.phpt │ │ ├── bug75474.phpt │ │ ├── bug75573.phpt │ │ ├── bug75786.phpt │ │ ├── bug75921.phpt │ │ ├── bug76025.phpt │ │ ├── bug76047.phpt │ │ ├── bug76383.phpt │ │ ├── bug76430.phpt │ │ ├── bug76439.phpt │ │ ├── bug76439_2.phpt │ │ ├── bug76451.inc │ │ ├── bug76451.phpt │ │ ├── bug76451_2.inc │ │ ├── bug76451_2.phpt │ │ ├── bug76502.phpt │ │ ├── bug76534.phpt │ │ ├── bug76667.phpt │ │ ├── bug76752.phpt │ │ ├── bug76754.phpt │ │ ├── bug76800.phpt │ │ ├── bug76846.phpt │ │ ├── bug76860.phpt │ │ ├── bug76860_2.phpt │ │ ├── bug76869.phpt │ │ ├── bug76901.phpt │ │ ├── bug76946.phpt │ │ ├── bug76965.phpt │ │ ├── bug77291.phpt │ │ ├── bug77339.phpt │ │ ├── bug77345_gc_1.phpt │ │ ├── bug77345_gc_2.phpt │ │ ├── bug77376.phpt │ │ ├── bug77494.phpt │ │ ├── bug77530.phpt │ │ ├── bug77589.phpt │ │ ├── bug77613.phpt │ │ ├── bug77627.phpt │ │ ├── bug77652.inc │ │ ├── bug77652.phpt │ │ ├── bug77660.phpt │ │ ├── bug77738.phpt │ │ ├── bug77877.phpt │ │ ├── bug77922.phpt │ │ ├── bug77966.phpt │ │ ├── bug77993.phpt │ │ ├── bug78010.phpt │ │ ├── bug78151.phpt │ │ ├── bug78154.phpt │ │ ├── bug78182.phpt │ │ ├── bug78239.phpt │ │ ├── bug78271.phpt │ │ ├── bug78335.phpt │ │ ├── bug78335_2.phpt │ │ ├── bug78340.phpt │ │ ├── bug78344.phpt │ │ ├── bug78356.phpt │ │ ├── bug78363.phpt │ │ ├── bug78379.phpt │ │ ├── bug78379_2.phpt │ │ ├── bug78396.phpt │ │ ├── bug78406.phpt │ │ ├── bug78454_1.phpt │ │ ├── bug78454_2.phpt │ │ ├── bug78502.phpt │ │ ├── bug78531.phpt │ │ ├── bug78589.phpt │ │ ├── bug78598.phpt │ │ ├── bug78644.phpt │ │ ├── bug78658.phpt │ │ ├── bug78689.phpt │ │ ├── bug78752.phpt │ │ ├── bug78770.phpt │ │ ├── bug78776.phpt │ │ ├── bug78787.phpt │ │ ├── bug78810.phpt │ │ ├── bug78868.phpt │ │ ├── bug78898.phpt │ │ ├── bug78921.phpt │ │ ├── bug78926.phpt │ │ ├── bug78973.phpt │ │ ├── bug78999.phpt │ │ ├── bug79022.phpt │ │ ├── bug79108.phpt │ │ ├── bug79155.phpt │ │ ├── bug79364.phpt │ │ ├── bug79382.phpt │ │ ├── bug79477.phpt │ │ ├── bug79514.phpt │ │ ├── bug79599.phpt │ │ ├── bug79657.phpt │ │ ├── bug79668.phpt │ │ ├── bug79778.phpt │ │ ├── bug79779.phpt │ │ ├── bug79783.phpt │ │ ├── bug79784.phpt │ │ ├── bug79790.phpt │ │ ├── bug79791.phpt │ │ ├── bug79792.phpt │ │ ├── bug79793.phpt │ │ ├── bug79818.phpt │ │ ├── bug79828.phpt │ │ ├── bug79836.phpt │ │ ├── bug79836_1.phpt │ │ ├── bug79836_2.phpt │ │ ├── bug79836_3.phpt │ │ ├── bug79836_4.phpt │ │ ├── bug79862.phpt │ │ ├── bug79897.phpt │ │ ├── bug79900.phpt │ │ ├── bug79919.phpt │ │ ├── bug79927.phpt │ │ ├── bug79934.phpt │ │ ├── bug79947.phpt │ │ ├── bug79948.inc │ │ ├── bug79948.phpt │ │ ├── bug79979.phpt │ │ ├── bug80030.phpt │ │ ├── bug80037.phpt │ │ ├── bug80045.phpt │ │ ├── bug80046.phpt │ │ ├── bug80049.phpt │ │ ├── bug80055.phpt │ │ ├── bug80072.phpt │ │ ├── bug80096.phpt │ │ ├── bug80126.phpt │ │ ├── bug80126_2.phpt │ │ ├── bug80184.phpt │ │ ├── bug80194.phpt │ │ ├── bug80255.phpt │ │ ├── bug80391.phpt │ │ ├── bug80404.phpt │ │ ├── bug80781.phpt │ │ ├── bug80811.phpt │ │ ├── bug80972.phpt │ │ ├── bug81070.phpt │ │ ├── bug81076.phpt │ │ ├── bug81104.phpt │ │ ├── bug81159.phpt │ │ ├── bug81192.phpt │ │ ├── bug81192_trait.inc │ │ ├── bug81216.phpt │ │ ├── bug81216_2.phpt │ │ ├── bug81377.phpt │ │ ├── bug81626.phpt │ │ ├── bug81631.phpt │ │ ├── bug81652.phpt │ │ ├── bug81684.phpt │ │ ├── bug81705.phpt │ │ ├── bugGH-8655.phpt │ │ ├── bug_debug_backtrace.phpt │ │ ├── bug_debug_backtrace_replace_zend_execute_ex.phpt │ │ ├── builtin_in_write_context_error1.phpt │ │ ├── builtin_in_write_context_error2.phpt │ │ ├── bw_or_assign_with_ref.phpt │ │ ├── by_ref_optimization.phpt │ │ ├── call_static.phpt │ │ ├── call_static_002.phpt │ │ ├── call_static_003.phpt │ │ ├── call_static_004.phpt │ │ ├── call_static_006.phpt │ │ ├── call_static_007.phpt │ │ ├── call_to_abstract_method_args.phpt │ │ ├── call_to_deprecated_function_args.phpt │ │ ├── call_user_func_001.phpt │ │ ├── call_user_func_002.phpt │ │ ├── call_user_func_003.phpt │ │ ├── call_user_func_005.phpt │ │ ├── call_user_func_006.phpt │ │ ├── call_user_func_007.phpt │ │ ├── call_user_func_008.phpt │ │ ├── call_user_func_009.phpt │ │ ├── call_user_func_array_array_slice_named_args.phpt │ │ ├── call_user_func_array_array_slice_type.phpt │ │ ├── call_user_func_array_array_slice_type_strict.phpt │ │ ├── call_user_func_array_invalid_type.phpt │ │ ├── call_user_func_array_prefer_ref.phpt │ │ ├── call_user_func_by_ref.phpt │ │ ├── call_user_func_closure_from_static_method.phpt │ │ ├── call_user_func_strict_arginfo_check.phpt │ │ ├── call_with_refs.phpt │ │ ├── callable_param_exception_leak.phpt │ │ ├── callable_self_parent_static_deprecation.phpt │ │ ├── cast_to_array.phpt │ │ ├── cast_to_bool.phpt │ │ ├── cast_to_double.phpt │ │ ├── cast_to_int.phpt │ │ ├── cast_to_object.phpt │ │ ├── cast_to_string.phpt │ │ ├── catch.phpt │ │ ├── catch_static.phpt │ │ ├── class_alias_001.phpt │ │ ├── class_alias_002.phpt │ │ ├── class_alias_004.phpt │ │ ├── class_alias_005.phpt │ │ ├── class_alias_006.phpt │ │ ├── class_alias_007.phpt │ │ ├── class_alias_008.phpt │ │ ├── class_alias_009.phpt │ │ ├── class_alias_010.phpt │ │ ├── class_alias_011.phpt │ │ ├── class_alias_012.phpt │ │ ├── class_alias_013.phpt │ │ ├── class_alias_014.phpt │ │ ├── class_alias_016.phpt │ │ ├── class_alias_017.phpt │ │ ├── class_alias_018.phpt │ │ ├── class_alias_019.phpt │ │ ├── class_alias_020.phpt │ │ ├── class_alias_021.phpt │ │ ├── class_constant_inheritance_mutable_data.phpt │ │ ├── class_constant_to_reference_cached.phpt │ │ ├── class_constants_001.phpt │ │ ├── class_constants_002.phpt │ │ ├── class_constants_003.phpt │ │ ├── class_constants_004.phpt │ │ ├── class_constants_005.phpt │ │ ├── class_constants_006.phpt │ │ ├── class_constants_007.phpt │ │ ├── class_exists_001.phpt │ │ ├── class_exists_002.phpt │ │ ├── class_exists_003.phpt │ │ ├── class_name_as_scalar.phpt │ │ ├── class_name_as_scalar_error_001.phpt │ │ ├── class_name_as_scalar_error_002.phpt │ │ ├── class_name_as_scalar_error_003.phpt │ │ ├── class_name_as_scalar_error_004.phpt │ │ ├── class_name_as_scalar_error_005.phpt │ │ ├── class_name_as_scalar_error_006.phpt │ │ ├── class_name_as_scalar_error_007.phpt │ │ ├── class_on_constant_evaluated_expression.phpt │ │ ├── class_on_expression_in_constant_expression.phpt │ │ ├── class_on_object.phpt │ │ ├── class_properties_const.phpt │ │ ├── class_properties_dynamic.phpt │ │ ├── class_properties_static.phpt │ │ ├── class_toString_concat_non_interned_with_itself.phpt │ │ ├── class_toString_concat_with_itself.phpt │ │ ├── class_underscore_as_name.phpt │ │ ├── class_uses_static.phpt │ │ ├── clone_001.phpt │ │ ├── clone_002.phpt │ │ ├── clone_003.phpt │ │ ├── clone_004.phpt │ │ ├── closure_001.phpt │ │ ├── closure_002.phpt │ │ ├── closure_003.phpt │ │ ├── closure_004.phpt │ │ ├── closure_005.phpt │ │ ├── closure_006.phpt │ │ ├── closure_007.phpt │ │ ├── closure_008.phpt │ │ ├── closure_009.phpt │ │ ├── closure_010.phpt │ │ ├── closure_011.phpt │ │ ├── closure_012.phpt │ │ ├── closure_013.phpt │ │ ├── closure_014.phpt │ │ ├── closure_015.phpt │ │ ├── closure_016.phpt │ │ ├── closure_017.phpt │ │ ├── closure_018.phpt │ │ ├── closure_019.phpt │ │ ├── closure_020.phpt │ │ ├── closure_021.phpt │ │ ├── closure_022.phpt │ │ ├── closure_023.phpt │ │ ├── closure_024.phpt │ │ ├── closure_026.phpt │ │ ├── closure_027.phpt │ │ ├── closure_028.phpt │ │ ├── closure_029.phpt │ │ ├── closure_030.phpt │ │ ├── closure_031.phpt │ │ ├── closure_032.phpt │ │ ├── closure_033.phpt │ │ ├── closure_034.phpt │ │ ├── closure_035.phpt │ │ ├── closure_036.phpt │ │ ├── closure_037.phpt │ │ ├── closure_038.phpt │ │ ├── closure_039.phpt │ │ ├── closure_040.phpt │ │ ├── closure_041.phpt │ │ ├── closure_042.phpt │ │ ├── closure_043.phpt │ │ ├── closure_044.phpt │ │ ├── closure_045.phpt │ │ ├── closure_046.phpt │ │ ├── closure_047.phpt │ │ ├── closure_048.phpt │ │ ├── closure_049.phpt │ │ ├── closure_050.phpt │ │ ├── closure_051.phpt │ │ ├── closure_052.phpt │ │ ├── closure_053.phpt │ │ ├── closure_054.phpt │ │ ├── closure_055.phpt │ │ ├── closure_056.phpt │ │ ├── closure_057.phpt │ │ ├── closure_058.phpt │ │ ├── closure_059.phpt │ │ ├── closure_060.phpt │ │ ├── closure_061.phpt │ │ ├── closure_062.phpt │ │ ├── closure_063.phpt │ │ ├── closure_064.phpt │ │ ├── closure_065.phpt │ │ ├── closure_066.phpt │ │ ├── closure_067.phpt │ │ ├── closure_068.phpt │ │ ├── closure_bindTo_preserves_used_variables.phpt │ │ ├── closure_bug66622.phpt │ │ ├── closure_call.phpt │ │ ├── closure_call_bind.phpt │ │ ├── closure_call_internal.phpt │ │ ├── closure_call_leak_with_exception.phpt │ │ ├── closure_compare.phpt │ │ ├── closure_extra_args.phpt │ │ ├── closure_invoke_case_insensitive.phpt │ │ ├── closure_invoke_ref_warning.phpt │ │ ├── closure_use_auto_global.phpt │ │ ├── closure_use_parameter_name.phpt │ │ ├── closure_use_trailing_comma.phpt │ │ ├── closure_use_variable_twice.phpt │ │ ├── closure_write_prop.phpt │ │ ├── closures/ │ │ │ ├── bug80929.phpt │ │ │ ├── closure_from_callable.inc │ │ │ ├── closure_from_callable_basic.phpt │ │ │ ├── closure_from_callable_error.phpt │ │ │ ├── closure_from_callable_gc.phpt │ │ │ ├── closure_from_callable_lsb.phpt │ │ │ ├── closure_from_callable_non_static_statically.phpt │ │ │ ├── closure_from_callable_rebinding.phpt │ │ │ ├── closure_from_callable_reflection.phpt │ │ │ ├── closure_instantiate.phpt │ │ │ ├── gh19653_1.phpt │ │ │ └── gh19653_2.phpt │ │ ├── coalesce_assign_optimization.phpt │ │ ├── code_before_loop_var_free.phpt │ │ ├── compare_001.phpt │ │ ├── compare_001_64bit.phpt │ │ ├── compare_002.phpt │ │ ├── compare_002_64bit.phpt │ │ ├── compare_003.phpt │ │ ├── compare_003_64bit.phpt │ │ ├── compare_004.phpt │ │ ├── compare_004_64bit.phpt │ │ ├── compare_005.phpt │ │ ├── compare_005_64bit.phpt │ │ ├── compare_006.phpt │ │ ├── compare_006_64bit.phpt │ │ ├── compound_assign_failure.phpt │ │ ├── compound_assign_with_numeric_strings.phpt │ │ ├── concat_001.phpt │ │ ├── concat_002.phpt │ │ ├── concat_003.phpt │ │ ├── const_array_with_resource_key.phpt │ │ ├── const_deprecation.phpt │ │ ├── const_dereference_001.phpt │ │ ├── const_dereference_002.phpt │ │ ├── const_dereference_003.phpt │ │ ├── const_eval_and.phpt │ │ ├── const_expr_dim_on_null_warning.phpt │ │ ├── constant_arrays.phpt │ │ ├── constant_expressions.phpt │ │ ├── constant_expressions_arrays.phpt │ │ ├── constant_expressions_classes.phpt │ │ ├── constant_expressions_coalesce.phpt │ │ ├── constant_expressions_coalesce_empty_dim.phpt │ │ ├── constant_expressions_dynamic.phpt │ │ ├── constant_expressions_dynamic_class_name_error.phpt │ │ ├── constant_expressions_exceptions.inc │ │ ├── constant_expressions_exceptions_001.phpt │ │ ├── constant_expressions_exceptions_002.phpt │ │ ├── constant_expressions_invalid_offset_type_error.phpt │ │ ├── constant_expressions_self_referencing_array.phpt │ │ ├── constant_expressions_static_class_name_error.phpt │ │ ├── constants/ │ │ │ ├── dir-constant-eval.phpt │ │ │ ├── dir-constant-includes.phpt │ │ │ ├── dir-constant-nested_includes.phpt │ │ │ ├── dir-constant-normal.phpt │ │ │ ├── final_constants/ │ │ │ │ ├── final_const1.phpt │ │ │ │ ├── final_const10.phpt │ │ │ │ ├── final_const11.phpt │ │ │ │ ├── final_const12.phpt │ │ │ │ ├── final_const13.phpt │ │ │ │ ├── final_const2.phpt │ │ │ │ ├── final_const3.phpt │ │ │ │ ├── final_const4.phpt │ │ │ │ ├── final_const5.phpt │ │ │ │ ├── final_const6.phpt │ │ │ │ ├── final_const7.phpt │ │ │ │ ├── final_const8.phpt │ │ │ │ └── final_const9.phpt │ │ │ ├── fixtures/ │ │ │ │ ├── folder1/ │ │ │ │ │ ├── fixture.inc │ │ │ │ │ ├── subfolder1/ │ │ │ │ │ │ └── fixture.inc │ │ │ │ │ ├── subfolder2/ │ │ │ │ │ │ └── fixture.inc │ │ │ │ │ ├── subfolder3/ │ │ │ │ │ │ └── fixture.inc │ │ │ │ │ └── subfolder4/ │ │ │ │ │ └── fixture.inc │ │ │ │ ├── folder2/ │ │ │ │ │ ├── fixture.inc │ │ │ │ │ ├── subfolder1/ │ │ │ │ │ │ └── fixture.inc │ │ │ │ │ ├── subfolder2/ │ │ │ │ │ │ └── fixture.inc │ │ │ │ │ ├── subfolder3/ │ │ │ │ │ │ └── fixture.inc │ │ │ │ │ └── subfolder4/ │ │ │ │ │ └── fixture.inc │ │ │ │ ├── folder3/ │ │ │ │ │ ├── fixture.inc │ │ │ │ │ ├── subfolder1/ │ │ │ │ │ │ └── fixture.inc │ │ │ │ │ ├── subfolder2/ │ │ │ │ │ │ └── fixture.inc │ │ │ │ │ ├── subfolder3/ │ │ │ │ │ │ └── fixture.inc │ │ │ │ │ └── subfolder4/ │ │ │ │ │ └── fixture.inc │ │ │ │ └── folder4/ │ │ │ │ ├── fixture.inc │ │ │ │ ├── subfolder1/ │ │ │ │ │ └── fixture.inc │ │ │ │ ├── subfolder2/ │ │ │ │ │ └── fixture.inc │ │ │ │ ├── subfolder3/ │ │ │ │ │ └── fixture.inc │ │ │ │ └── subfolder4/ │ │ │ │ └── fixture.inc │ │ │ ├── gh18463-class-constant.phpt │ │ │ ├── gh18850.inc │ │ │ └── gh18850.phpt │ │ ├── constants_001.phpt │ │ ├── constants_002.phpt │ │ ├── constants_003.phpt │ │ ├── constants_004.phpt │ │ ├── constants_005.phpt │ │ ├── constants_006.phpt │ │ ├── constants_007.phpt │ │ ├── constants_008.phpt │ │ ├── constants_009.phpt │ │ ├── constexpr/ │ │ │ ├── new.phpt │ │ │ ├── new_allowed.phpt │ │ │ ├── new_anon_class.phpt │ │ │ ├── new_arg_eval.phpt │ │ │ ├── new_arg_unpack.phpt │ │ │ ├── new_dynamic_class_name.phpt │ │ │ ├── new_invalid_operation_in_arg.phpt │ │ │ ├── new_named_params.phpt │ │ │ ├── new_not_allowed_class_constant.phpt │ │ │ ├── new_not_allowed_property.phpt │ │ │ ├── new_positional_after_named.phpt │ │ │ ├── new_self_parent.phpt │ │ │ └── new_static.phpt │ │ ├── constructor_abstract_grantparent.phpt │ │ ├── constructor_args.phpt │ │ ├── continue_targeting_switch_warning.phpt │ │ ├── ctor_promotion_abstract.phpt │ │ ├── ctor_promotion_additional_modifiers.phpt │ │ ├── ctor_promotion_attributes.phpt │ │ ├── ctor_promotion_basic.phpt │ │ ├── ctor_promotion_by_ref.phpt │ │ ├── ctor_promotion_callable_type.phpt │ │ ├── ctor_promotion_defaults.phpt │ │ ├── ctor_promotion_free_function.phpt │ │ ├── ctor_promotion_interface.phpt │ │ ├── ctor_promotion_mixing.phpt │ │ ├── ctor_promotion_not_a_ctor.phpt │ │ ├── ctor_promotion_null_default.phpt │ │ ├── ctor_promotion_repeated_prop.phpt │ │ ├── ctor_promotion_trait.phpt │ │ ├── ctor_promotion_untyped_default.phpt │ │ ├── ctor_promotion_variadic.phpt │ │ ├── custom_assert_forbidden.phpt │ │ ├── dead_array_type_inference.phpt │ │ ├── debug_backtrace_limit.phpt │ │ ├── debug_backtrace_options.phpt │ │ ├── debug_backtrace_with_include_and_this.phpt │ │ ├── debug_info-error-0.0.phpt │ │ ├── debug_info-error-0.phpt │ │ ├── debug_info-error-1.0.phpt │ │ ├── debug_info-error-1.phpt │ │ ├── debug_info-error-empty_str.phpt │ │ ├── debug_info-error-false.phpt │ │ ├── debug_info-error-object.phpt │ │ ├── debug_info-error-resource.phpt │ │ ├── debug_info-error-str.phpt │ │ ├── debug_info-error-true.phpt │ │ ├── debug_info.phpt │ │ ├── debug_print_backtrace_from_main.phpt │ │ ├── debug_print_backtrace_limit.phpt │ │ ├── declare_001.phpt │ │ ├── declare_002.phpt │ │ ├── declare_003.phpt │ │ ├── declare_004.phpt │ │ ├── declare_005.phpt │ │ ├── declare_006.phpt │ │ ├── declare_007.phpt │ │ ├── declare_already_in_use.phpt │ │ ├── decrement_001.phpt │ │ ├── decrement_001_64bit.phpt │ │ ├── defined_fn_no_ns_fallback.phpt │ │ ├── delayed_early_binding_redeclaration-1.inc │ │ ├── delayed_early_binding_redeclaration-2.inc │ │ ├── delayed_early_binding_redeclaration.phpt │ │ ├── deprecate_dollar_brace_string_interpolation_1.phpt │ │ ├── deprecation_to_exception_during_inheritance.phpt │ │ ├── dereference_001.phpt │ │ ├── dereference_002.phpt │ │ ├── dereference_003.phpt │ │ ├── dereference_004.phpt │ │ ├── dereference_005.phpt │ │ ├── dereference_006.phpt │ │ ├── dereference_007.phpt │ │ ├── dereference_008.phpt │ │ ├── dereference_009.phpt │ │ ├── dereference_010.phpt │ │ ├── dereference_011.phpt │ │ ├── dereference_012.phpt │ │ ├── dereference_013.phpt │ │ ├── dereference_014.phpt │ │ ├── die_string_cast_exception.phpt │ │ ├── dim_assign_001.phpt │ │ ├── dim_assign_001.txt │ │ ├── div_001.phpt │ │ ├── div_002.phpt │ │ ├── div_by_zero_compound_refcounted.phpt │ │ ├── div_by_zero_compound_with_conversion.phpt │ │ ├── div_by_zero_in_static.phpt │ │ ├── double_array_cast.phpt │ │ ├── double_to_string.phpt │ │ ├── double_to_string_64bit.phpt │ │ ├── dtor_scope.phpt │ │ ├── duplicate_label_error.phpt │ │ ├── dval_to_lval_32.phpt │ │ ├── dval_to_lval_64.phpt │ │ ├── dynamic_call_002.phpt │ │ ├── dynamic_call_003.phpt │ │ ├── dynamic_call_004.phpt │ │ ├── dynamic_call_005.phpt │ │ ├── dynamic_call_006.phpt │ │ ├── dynamic_call_007.phpt │ │ ├── dynamic_call_008.phpt │ │ ├── dynamic_call_freeing.phpt │ │ ├── dynamic_call_non_static.phpt │ │ ├── dynamic_call_to_ref_returning_function.phpt │ │ ├── dynamic_class_const_fetch.phpt │ │ ├── dynamic_class_const_fetch_cache_slot.phpt │ │ ├── dynamic_class_const_fetch_const_expr.phpt │ │ ├── dynamic_class_const_fetch_order.phpt │ │ ├── dynamic_fully_qualified_call.phpt │ │ ├── dynamic_prop_deprecation.phpt │ │ ├── dynamic_prop_deprecation_002.phpt │ │ ├── dynamic_prop_name_leak.phpt │ │ ├── e_strict-deprecated.phpt │ │ ├── early_binding_unreachable.inc │ │ ├── early_binding_unreachable.phpt │ │ ├── empty_str_offset.phpt │ │ ├── empty_with_expr.phpt │ │ ├── entry_block_with_predecessors.phpt │ │ ├── enum/ │ │ │ ├── __call.phpt │ │ │ ├── __callStatic.phpt │ │ │ ├── __class__.phpt │ │ │ ├── __clone.phpt │ │ │ ├── __debugInfo.phpt │ │ │ ├── __function__.phpt │ │ │ ├── __get.phpt │ │ │ ├── __invoke.phpt │ │ │ ├── __isset.phpt │ │ │ ├── __method__.phpt │ │ │ ├── __serialize.phpt │ │ │ ├── __set.phpt │ │ │ ├── __set_state.phpt │ │ │ ├── __sleep.phpt │ │ │ ├── __toString.phpt │ │ │ ├── __unserialize.phpt │ │ │ ├── __unset.phpt │ │ │ ├── __wakeup.phpt │ │ │ ├── ast-dumper.phpt │ │ │ ├── backed-cases-int.phpt │ │ │ ├── backed-cases-string.phpt │ │ │ ├── backed-duplicate-int.phpt │ │ │ ├── backed-duplicate-string.phpt │ │ │ ├── backed-from-invalid-int.phpt │ │ │ ├── backed-from-invalid-string.phpt │ │ │ ├── backed-from-invalid-type.phpt │ │ │ ├── backed-from-unknown-hash.phpt │ │ │ ├── backed-from.phpt │ │ │ ├── backed-implements-multiple.phpt │ │ │ ├── backed-implements.phpt │ │ │ ├── backed-int-case-without-value.phpt │ │ │ ├── backed-int-const-expr.phpt │ │ │ ├── backed-int-const-invalid-expr.phpt │ │ │ ├── backed-int.phpt │ │ │ ├── backed-invalid.phpt │ │ │ ├── backed-mismatch.phpt │ │ │ ├── backed-negative-int.phpt │ │ │ ├── backed-string-heredoc.phpt │ │ │ ├── backed-string.phpt │ │ │ ├── backed-tryFrom-casing.phpt │ │ │ ├── backed-tryFrom-unknown-hash.phpt │ │ │ ├── backed-tryFrom.phpt │ │ │ ├── backed-type-no-union.phpt │ │ │ ├── basic-methods.phpt │ │ │ ├── case-attributes.phpt │ │ │ ├── case-in-class.phpt │ │ │ ├── cases-refcount.phpt │ │ │ ├── comparison.phpt │ │ │ ├── constant-aliases.phpt │ │ │ ├── constants.phpt │ │ │ ├── default-parameter.phpt │ │ │ ├── empty-from.phpt │ │ │ ├── enum-as-constant.phpt │ │ │ ├── enum-as-params.phpt │ │ │ ├── enum-attributes.phpt │ │ │ ├── enum-in-constant.phpt │ │ │ ├── enum-in-static-var.phpt │ │ │ ├── enum-in-var-export.phpt │ │ │ ├── enum-reserved-non-modifiers.phpt │ │ │ ├── enum_exists.phpt │ │ │ ├── enum_underscore_as_name.phpt │ │ │ ├── final.phpt │ │ │ ├── gh7821.phpt │ │ │ ├── gh8176.phpt │ │ │ ├── gh8418.phpt │ │ │ ├── implements.phpt │ │ │ ├── instanceof-backed-enum.phpt │ │ │ ├── instanceof-unitenum.phpt │ │ │ ├── instanceof.phpt │ │ │ ├── internal_enums.phpt │ │ │ ├── internal_enums_strict_types.phpt │ │ │ ├── json_encode.phpt │ │ │ ├── keyword-no-bc-break.phpt │ │ │ ├── keyword-whitespace.phpt │ │ │ ├── magic-constants.phpt │ │ │ ├── name-property.phpt │ │ │ ├── namespaces.phpt │ │ │ ├── no-cases.phpt │ │ │ ├── no-class-implements-backed-enum.phpt │ │ │ ├── no-class-implements-unit-enum.phpt │ │ │ ├── no-clone.phpt │ │ │ ├── no-constructors.phpt │ │ │ ├── no-destruct.phpt │ │ │ ├── no-dynamic-properties.phpt │ │ │ ├── no-enum-implements-backed-enum.phpt │ │ │ ├── no-enum-implements-unit-enum.phpt │ │ │ ├── no-from.phpt │ │ │ ├── no-implement-serializable-indirect.phpt │ │ │ ├── no-implement-serializable.phpt │ │ │ ├── no-name-property.phpt │ │ │ ├── no-new-through-reflection.phpt │ │ │ ├── no-new.phpt │ │ │ ├── no-non-backed-enum-implements-backed-enum.phpt │ │ │ ├── no-pass-properties-by-ref.phpt │ │ │ ├── no-properties.phpt │ │ │ ├── no-return-properties-by-ref.phpt │ │ │ ├── no-static-properties.phpt │ │ │ ├── no-unsed-value.phpt │ │ │ ├── no-unset-propertes.phpt │ │ │ ├── no-value-property.phpt │ │ │ ├── no-write-properties-cache-slot.phpt │ │ │ ├── no-write-properties-through-foreach-reference.phpt │ │ │ ├── no-write-properties-through-references.phpt │ │ │ ├── no-write-properties.phpt │ │ │ ├── non-backed-enum-with-expr-value.phpt │ │ │ ├── non-backed-enum-with-int-value.phpt │ │ │ ├── non-backed-enum-with-invalid-value.phpt │ │ │ ├── non-backed-enum-with-string-value.phpt │ │ │ ├── offsetGet-in-const-expr.phpt │ │ │ ├── print_r.phpt │ │ │ ├── reflectionclass.phpt │ │ │ ├── serialization-round-trip.phpt │ │ │ ├── serialize.phpt │ │ │ ├── spl-object-storage.phpt │ │ │ ├── static-methods.phpt │ │ │ ├── traits-constants.phpt │ │ │ ├── traits-no-__construct.phpt │ │ │ ├── traits-no-cases-method.phpt │ │ │ ├── traits-no-forbidden-methods.phpt │ │ │ ├── traits-no-properties.phpt │ │ │ ├── traits.phpt │ │ │ ├── unit-cases.phpt │ │ │ ├── unserialize-const.phpt │ │ │ ├── unserialize-missing-colon.phpt │ │ │ ├── unserialize-non-enum.phpt │ │ │ ├── unserialize-non-existent-case.phpt │ │ │ ├── unserialize-refcount.phpt │ │ │ ├── unserialize.phpt │ │ │ ├── update-class-constant-failure.phpt │ │ │ ├── value-property-type.phpt │ │ │ ├── var_dump-nested.phpt │ │ │ ├── var_dump-reference.phpt │ │ │ ├── var_export.phpt │ │ │ └── weak-map.phpt │ │ ├── enum_in_stack_trace.phpt │ │ ├── errmsg_001.phpt │ │ ├── errmsg_002.phpt │ │ ├── errmsg_003.phpt │ │ ├── errmsg_004.phpt │ │ ├── errmsg_005.phpt │ │ ├── errmsg_006.phpt │ │ ├── errmsg_007.phpt │ │ ├── errmsg_008.phpt │ │ ├── errmsg_009.phpt │ │ ├── errmsg_010.phpt │ │ ├── errmsg_011.phpt │ │ ├── errmsg_013.phpt │ │ ├── errmsg_015.phpt │ │ ├── errmsg_016.phpt │ │ ├── errmsg_017.phpt │ │ ├── errmsg_018.phpt │ │ ├── errmsg_019.phpt │ │ ├── errmsg_020.phpt │ │ ├── errmsg_021.phpt │ │ ├── errmsg_022.phpt │ │ ├── errmsg_023.phpt │ │ ├── errmsg_024.phpt │ │ ├── errmsg_025.phpt │ │ ├── errmsg_026.phpt │ │ ├── errmsg_027.phpt │ │ ├── errmsg_028.phpt │ │ ├── errmsg_029.phpt │ │ ├── errmsg_030.phpt │ │ ├── errmsg_031.phpt │ │ ├── errmsg_032.phpt │ │ ├── errmsg_033.phpt │ │ ├── errmsg_034.phpt │ │ ├── errmsg_035.phpt │ │ ├── errmsg_036.phpt │ │ ├── errmsg_037.phpt │ │ ├── errmsg_038.phpt │ │ ├── errmsg_039.phpt │ │ ├── errmsg_040.phpt │ │ ├── errmsg_042.phpt │ │ ├── errmsg_044.phpt │ │ ├── errmsg_045.phpt │ │ ├── error_reporting01.phpt │ │ ├── error_reporting02.phpt │ │ ├── error_reporting03.phpt │ │ ├── error_reporting04.phpt │ │ ├── error_reporting05.phpt │ │ ├── error_reporting06.phpt │ │ ├── error_reporting07.phpt │ │ ├── error_reporting08.phpt │ │ ├── error_reporting09.phpt │ │ ├── error_reporting10.phpt │ │ ├── eval_constant_resolution.phpt │ │ ├── eval_parse_error_with_doc_comment.phpt │ │ ├── ex_func_null_during_property_write.phpt │ │ ├── exception_001.phpt │ │ ├── exception_002.phpt │ │ ├── exception_003.phpt │ │ ├── exception_004.phpt │ │ ├── exception_005.phpt │ │ ├── exception_006.phpt │ │ ├── exception_007.phpt │ │ ├── exception_008.phpt │ │ ├── exception_009.phpt │ │ ├── exception_011.phpt │ │ ├── exception_013.phpt │ │ ├── exception_014.phpt │ │ ├── exception_015.phpt │ │ ├── exception_016.phpt │ │ ├── exception_017.phpt │ │ ├── exception_018.phpt │ │ ├── exception_019.phpt │ │ ├── exception_020.phpt │ │ ├── exception_021.phpt │ │ ├── exception_022.phpt │ │ ├── exception_023.phpt │ │ ├── exception_024.phpt │ │ ├── exception_025.phpt │ │ ├── exception_026.phpt │ │ ├── exception_027.phpt │ │ ├── exception_028.phpt │ │ ├── exception_before_fatal.phpt │ │ ├── exception_delayed_message.phpt │ │ ├── exception_during_by_reference_magic_get.phpt │ │ ├── exception_during_include_stat.phpt │ │ ├── exception_during_property_assign_op.phpt │ │ ├── exception_during_variance_autoload.phpt │ │ ├── exception_during_variance_autoload_2.phpt │ │ ├── exception_from_toString.phpt │ │ ├── exception_getters_with_ref_props.phpt │ │ ├── exception_handler_001.phpt │ │ ├── exception_handler_002.phpt │ │ ├── exception_handler_003.phpt │ │ ├── exception_handler_004.phpt │ │ ├── exception_handler_005.phpt │ │ ├── exception_handler_006.phpt │ │ ├── exception_handler_007.phpt │ │ ├── exception_ignore_args.phpt │ │ ├── exception_in_nested_rope.phpt │ │ ├── exception_in_rope_end.phpt │ │ ├── exception_set_previous_leak.phpt │ │ ├── exception_stream_wrapper.phpt │ │ ├── exception_with_by_ref_message.phpt │ │ ├── exit/ │ │ │ ├── ast_print_assert_die_const.phpt │ │ │ ├── ast_print_assert_die_function.phpt │ │ │ ├── ast_print_assert_exit_const.phpt │ │ │ ├── ast_print_assert_exit_function.phpt │ │ │ ├── define_class_members_exit_die.phpt │ │ │ ├── define_die_constant.phpt │ │ │ ├── define_die_constant_namespace.phpt │ │ │ ├── define_die_function.phpt │ │ │ ├── define_die_function_namespace.phpt │ │ │ ├── define_exit_constant.phpt │ │ │ ├── define_exit_constant_namespace.phpt │ │ │ ├── define_exit_function.phpt │ │ │ ├── define_exit_function_namespace.phpt │ │ │ ├── define_goto_label_die.phpt │ │ │ ├── define_goto_label_die_with_jump.phpt │ │ │ ├── define_goto_label_exit.phpt │ │ │ ├── define_goto_label_exit_with_jump.phpt │ │ │ ├── die_string_cast_exception.phpt │ │ │ ├── disabling_die.phpt │ │ │ ├── disabling_exit.phpt │ │ │ ├── exit_as_function.phpt │ │ │ ├── exit_named_arg.phpt │ │ │ ├── exit_statements.phpt │ │ │ ├── exit_string_with_buffer_output.phpt │ │ │ └── exit_values.phpt │ │ ├── exit_exception_handler.phpt │ │ ├── exit_finally_1.phpt │ │ ├── exit_finally_2.phpt │ │ ├── exit_finally_3.phpt │ │ ├── fake_closure_in_internal_func_leaks.phpt │ │ ├── falsetoarray.phpt │ │ ├── falsetoarray_002.phpt │ │ ├── falsetoarray_003.phpt │ │ ├── fe_fetch_dtor_exception.phpt │ │ ├── fe_fetch_op2_live_range.phpt │ │ ├── fibers/ │ │ │ ├── backtrace-deep-nesting.phpt │ │ │ ├── backtrace-nested.phpt │ │ │ ├── backtrace-object.phpt │ │ │ ├── call-to-ctor-of-terminated-fiber.phpt │ │ │ ├── catch-then-suspend.phpt │ │ │ ├── catch.phpt │ │ │ ├── debug-backtrace.phpt │ │ │ ├── destructors_001.phpt │ │ │ ├── destructors_002.phpt │ │ │ ├── destructors_003.phpt │ │ │ ├── destructors_004.phpt │ │ │ ├── destructors_005.phpt │ │ │ ├── destructors_006.phpt │ │ │ ├── destructors_007.phpt │ │ │ ├── destructors_008.phpt │ │ │ ├── destructors_009.phpt │ │ │ ├── destructors_010.phpt │ │ │ ├── destructors_011.phpt │ │ │ ├── double-start.phpt │ │ │ ├── error-reporting.phpt │ │ │ ├── exit-in-fiber.phpt │ │ │ ├── failing-fiber.phpt │ │ │ ├── failing-nested-fiber.phpt │ │ │ ├── fast-finish-fiber.phpt │ │ │ ├── fatal-error-in-fiber.phpt │ │ │ ├── fatal-error-in-nested-fiber.phpt │ │ │ ├── fatal-error-with-multiple-fibers.phpt │ │ │ ├── fiber-error-construct.phpt │ │ │ ├── fiber-get-current.phpt │ │ │ ├── fiber-in-shutdown-function.phpt │ │ │ ├── fiber-status.phpt │ │ │ ├── gc-cycle-callback.phpt │ │ │ ├── gc-cycle-result.phpt │ │ │ ├── get-return-after-bailout.phpt │ │ │ ├── get-return-after-throwing.phpt │ │ │ ├── get-return-from-unstarted-fiber.phpt │ │ │ ├── get-return-in-unfinished-fiber.phpt │ │ │ ├── get-return.phpt │ │ │ ├── gh10249.phpt │ │ │ ├── gh10340-001.phpt │ │ │ ├── gh10340-002.phpt │ │ │ ├── gh10340-003.phpt │ │ │ ├── gh10437.phpt │ │ │ ├── gh10496-001.phpt │ │ │ ├── gh10496-002.phpt │ │ │ ├── gh9735-001.phpt │ │ │ ├── gh9735-002.phpt │ │ │ ├── gh9735-003.phpt │ │ │ ├── gh9735-004.phpt │ │ │ ├── gh9735-005.phpt │ │ │ ├── gh9735-006.phpt │ │ │ ├── gh9735-007.phpt │ │ │ ├── gh9735-008.phpt │ │ │ ├── gh9735-009.phpt │ │ │ ├── invocable-class.phpt │ │ │ ├── multiple-calls-to-ctor.phpt │ │ │ ├── negative_stack_size.phpt │ │ │ ├── no-switch-dtor-resume.phpt │ │ │ ├── no-switch-dtor-start.phpt │ │ │ ├── no-switch-dtor-suspend.phpt │ │ │ ├── no-switch-dtor-throw.phpt │ │ │ ├── no-switch-force-close-finally.phpt │ │ │ ├── no-switch-gc.phpt │ │ │ ├── out-of-memory-in-fiber.phpt │ │ │ ├── out-of-memory-in-nested-fiber.phpt │ │ │ ├── out-of-memory-in-recursive-fiber.phpt │ │ │ ├── resume-non-running-fiber.phpt │ │ │ ├── resume-previous-fiber.phpt │ │ │ ├── resume-running-fiber.phpt │ │ │ ├── resume-terminated-fiber.phpt │ │ │ ├── resume.phpt │ │ │ ├── return-by-ref.phpt │ │ │ ├── signal-async.phpt │ │ │ ├── signal-dispatch.phpt │ │ │ ├── silence-operator-inside-fiber.phpt │ │ │ ├── silence-operator-outside-fiber.phpt │ │ │ ├── start-arguments.phpt │ │ │ ├── suspend-in-force-close-fiber-after-shutdown.phpt │ │ │ ├── suspend-in-force-close-fiber-catching-exception.phpt │ │ │ ├── suspend-in-force-close-fiber.phpt │ │ │ ├── suspend-in-nested-function.phpt │ │ │ ├── suspend-outside-fiber.phpt │ │ │ ├── throw-during-fiber-destruct.phpt │ │ │ ├── throw-in-multiple-destroyed-fibers-after-shutdown.phpt │ │ │ ├── throw-into-non-running-fiber.phpt │ │ │ ├── throw.phpt │ │ │ ├── ticks.phpt │ │ │ ├── unfinished-fiber-with-finally.phpt │ │ │ ├── unfinished-fiber-with-nested-try-catch.phpt │ │ │ ├── unfinished-fiber-with-suspend-in-finally.phpt │ │ │ ├── unfinished-fiber-with-throw-in-finally.phpt │ │ │ ├── unfinished-fiber.phpt │ │ │ └── unstarted-fiber.phpt │ │ ├── first_class_callable_001.phpt │ │ ├── first_class_callable_002.phpt │ │ ├── first_class_callable_003.phpt │ │ ├── first_class_callable_004.phpt │ │ ├── first_class_callable_005.phpt │ │ ├── first_class_callable_006.phpt │ │ ├── first_class_callable_007.phpt │ │ ├── first_class_callable_008.phpt │ │ ├── first_class_callable_009.phpt │ │ ├── first_class_callable_010.phpt │ │ ├── first_class_callable_011.phpt │ │ ├── first_class_callable_012.phpt │ │ ├── first_class_callable_013.phpt │ │ ├── first_class_callable_014.phpt │ │ ├── first_class_callable_015.phpt │ │ ├── first_class_callable_015_strict.inc │ │ ├── first_class_callable_015_weak.inc │ │ ├── first_class_callable_016.phpt │ │ ├── first_class_callable_assert.phpt │ │ ├── first_class_callable_assert2.phpt │ │ ├── first_class_callable_assert3.phpt │ │ ├── first_class_callable_dynamic.phpt │ │ ├── first_class_callable_errors.phpt │ │ ├── first_class_callable_optimization.phpt │ │ ├── first_class_callable_refs.phpt │ │ ├── first_class_callable_signature.phpt │ │ ├── flexible-heredoc-complex-test1.phpt │ │ ├── flexible-heredoc-complex-test2.phpt │ │ ├── flexible-heredoc-complex-test3.phpt │ │ ├── flexible-heredoc-complex-test4.phpt │ │ ├── flexible-heredoc-error1.phpt │ │ ├── flexible-heredoc-error10.phpt │ │ ├── flexible-heredoc-error11.phpt │ │ ├── flexible-heredoc-error12.phpt │ │ ├── flexible-heredoc-error13.phpt │ │ ├── flexible-heredoc-error2.phpt │ │ ├── flexible-heredoc-error3.phpt │ │ ├── flexible-heredoc-error4.phpt │ │ ├── flexible-heredoc-error5.phpt │ │ ├── flexible-heredoc-error6.phpt │ │ ├── flexible-heredoc-error7.phpt │ │ ├── flexible-heredoc-error8.phpt │ │ ├── flexible-heredoc-error9.phpt │ │ ├── flexible-heredoc-nowdoc-lineno.phpt │ │ ├── flexible-heredoc-nowdoc.phpt │ │ ├── flexible-nowdoc-error1.phpt │ │ ├── flexible-nowdoc-error2.phpt │ │ ├── flexible-nowdoc-error3.phpt │ │ ├── flexible-nowdoc-error4.phpt │ │ ├── flexible-nowdoc-error5.phpt │ │ ├── flexible-nowdoc-error6.phpt │ │ ├── flexible-nowdoc-error7.phpt │ │ ├── flexible-nowdoc-error8.phpt │ │ ├── float_prec_001.phpt │ │ ├── float_to_int/ │ │ │ ├── explicit_casts_should_not_warn.phpt │ │ │ ├── explicit_casts_should_not_warn_32bit.phpt │ │ │ ├── negative_zero_check.phpt │ │ │ ├── no_warning_compatible_float_literals.phpt │ │ │ ├── no_warning_compatible_string_float_literals.phpt │ │ │ ├── no_warnings_compatible_float_literals_assignment_ops.phpt │ │ │ ├── no_warnings_compatible_float_vars.phpt │ │ │ ├── no_warnings_compatible_string_float_vars.phpt │ │ │ ├── union_int_string_type_arg.phpt │ │ │ ├── union_int_string_type_arg_promote_exception.phpt │ │ │ ├── warning_float_does_not_fit_zend_long_arrays.phpt │ │ │ ├── warning_float_does_not_fit_zend_long_strings.phpt │ │ │ ├── warning_float_does_not_fit_zend_long_strings_32bit.phpt │ │ │ ├── warnings_float_literals.phpt │ │ │ ├── warnings_float_literals_assignment_ops.phpt │ │ │ ├── warnings_float_vars.phpt │ │ │ ├── warnings_string_float_literals.phpt │ │ │ ├── warnings_string_float_literals_assignment_ops.phpt │ │ │ └── warnings_string_float_vars.phpt │ │ ├── foreach.phpt │ │ ├── foreach_002.phpt │ │ ├── foreach_003.phpt │ │ ├── foreach_004.phpt │ │ ├── foreach_005.phpt │ │ ├── foreach_006.phpt │ │ ├── foreach_007.phpt │ │ ├── foreach_008.phpt │ │ ├── foreach_009.phpt │ │ ├── foreach_010.phpt │ │ ├── foreach_011.phpt │ │ ├── foreach_012.phpt │ │ ├── foreach_013.phpt │ │ ├── foreach_014.phpt │ │ ├── foreach_015.phpt │ │ ├── foreach_016.phpt │ │ ├── foreach_017.phpt │ │ ├── foreach_018.phpt │ │ ├── foreach_by_ref_repacking_insert.phpt │ │ ├── foreach_by_ref_to_property.phpt │ │ ├── foreach_empty_loop_leak.phpt │ │ ├── foreach_list_001.phpt │ │ ├── foreach_list_002.phpt │ │ ├── foreach_list_003.phpt │ │ ├── foreach_list_004.phpt │ │ ├── foreach_list_keyed.phpt │ │ ├── foreach_over_null.phpt │ │ ├── foreach_reference.phpt │ │ ├── foreach_shadowed_dyn_property.phpt │ │ ├── foreach_shadowed_property.phpt │ │ ├── foreach_temp_array_expr_with_refs.phpt │ │ ├── foreach_undefined.phpt │ │ ├── foreach_unset_globals.phpt │ │ ├── fr47160.phpt │ │ ├── frameless_bug_001.phpt │ │ ├── frameless_jmp_001.phpt │ │ ├── frameless_jmp_002.phpt │ │ ├── frameless_jmp_003.phpt │ │ ├── frameless_jmp_004.phpt │ │ ├── frameless_jmp_005.phpt │ │ ├── frameless_throwing_destructor.phpt │ │ ├── frameless_undefined_var.phpt │ │ ├── func_arg_fetch_optimization.phpt │ │ ├── func_get_args.phpt │ │ ├── func_sig_trailing_comma.phpt │ │ ├── function_arguments/ │ │ │ ├── argument_count_correct.phpt │ │ │ ├── argument_count_correct_strict.phpt │ │ │ ├── argument_count_incorrect_internal.phpt │ │ │ ├── argument_count_incorrect_internal_strict.phpt │ │ │ ├── argument_count_incorrect_userland.phpt │ │ │ ├── argument_count_incorrect_userland_strict.phpt │ │ │ ├── call_with_leading_comma_error.phpt │ │ │ ├── call_with_multi_inner_comma_error.phpt │ │ │ ├── call_with_multi_trailing_comma_error.phpt │ │ │ ├── call_with_only_comma_error.phpt │ │ │ ├── call_with_trailing_comma_basic.phpt │ │ │ ├── sensitive_parameter.phpt │ │ │ ├── sensitive_parameter_arrow_function.phpt │ │ │ ├── sensitive_parameter_closure.phpt │ │ │ ├── sensitive_parameter_correctly_captures_original.phpt │ │ │ ├── sensitive_parameter_eval_call.phpt │ │ │ ├── sensitive_parameter_eval_define.phpt │ │ │ ├── sensitive_parameter_extra_arguments.phpt │ │ │ ├── sensitive_parameter_multiple_arguments.phpt │ │ │ ├── sensitive_parameter_named_arguments.phpt │ │ │ ├── sensitive_parameter_nested_calls.phpt │ │ │ ├── sensitive_parameter_value.phpt │ │ │ ├── sensitive_parameter_value_clone.phpt │ │ │ ├── sensitive_parameter_value_keeps_object_alive.phpt │ │ │ ├── sensitive_parameter_value_no_dynamic_property.phpt │ │ │ ├── sensitive_parameter_value_reflection.phpt │ │ │ ├── sensitive_parameter_value_serialize.phpt │ │ │ ├── sensitive_parameter_value_to_string.phpt │ │ │ ├── sensitive_parameter_variadic_arguments.phpt │ │ │ └── variadic_argument_type_error.phpt │ │ ├── function_arguments_001.phpt │ │ ├── function_arguments_002.phpt │ │ ├── function_arguments_003.phpt │ │ ├── function_default_argument_cache.phpt │ │ ├── function_exists_basic.phpt │ │ ├── function_outside_namespace.phpt │ │ ├── function_redecl.phpt │ │ ├── gc_001.phpt │ │ ├── gc_002.phpt │ │ ├── gc_003.phpt │ │ ├── gc_004.phpt │ │ ├── gc_005.phpt │ │ ├── gc_006.phpt │ │ ├── gc_007.phpt │ │ ├── gc_008.phpt │ │ ├── gc_009.phpt │ │ ├── gc_011.phpt │ │ ├── gc_012.phpt │ │ ├── gc_013.phpt │ │ ├── gc_014.phpt │ │ ├── gc_015.phpt │ │ ├── gc_016.phpt │ │ ├── gc_017.phpt │ │ ├── gc_018.phpt │ │ ├── gc_019.phpt │ │ ├── gc_020.phpt │ │ ├── gc_021.phpt │ │ ├── gc_022.phpt │ │ ├── gc_023.phpt │ │ ├── gc_024.phpt │ │ ├── gc_025.phpt │ │ ├── gc_026.phpt │ │ ├── gc_027.phpt │ │ ├── gc_028.phpt │ │ ├── gc_029.phpt │ │ ├── gc_030.phpt │ │ ├── gc_031.phpt │ │ ├── gc_032.phpt │ │ ├── gc_033.phpt │ │ ├── gc_034.phpt │ │ ├── gc_035.phpt │ │ ├── gc_036.phpt │ │ ├── gc_037.phpt │ │ ├── gc_038.phpt │ │ ├── gc_039.phpt │ │ ├── gc_041.phpt │ │ ├── gc_042.phpt │ │ ├── gc_043.phpt │ │ ├── gc_044.phpt │ │ ├── gc_045.phpt │ │ ├── gc_046.phpt │ │ ├── gc_047.phpt │ │ ├── gc_048.phpt │ │ ├── gc_049.phpt │ │ ├── gc_050.phpt │ │ ├── generators/ │ │ │ ├── aborted_yield_during_nested_fcalls.phpt │ │ │ ├── aborted_yield_during_new.phpt │ │ │ ├── aborted_yield_during_switch.phpt │ │ │ ├── auto_incrementing_keys.phpt │ │ │ ├── backtrace.phpt │ │ │ ├── backtrace_multi_yield_from.phpt │ │ │ ├── basic_yield_from_exception_handling.phpt │ │ │ ├── basic_yield_from_proxying.phpt │ │ │ ├── bug63066.phpt │ │ │ ├── bug65035.phpt │ │ │ ├── bug65161.phpt │ │ │ ├── bug66041.phpt │ │ │ ├── bug67497.phpt │ │ │ ├── bug69419.phpt │ │ │ ├── bug70904.phpt │ │ │ ├── bug70965.phpt │ │ │ ├── bug71013.phpt │ │ │ ├── bug71297.phpt │ │ │ ├── bug71441.phpt │ │ │ ├── bug71601.phpt │ │ │ ├── bug72523.phpt │ │ │ ├── bug74157.phpt │ │ │ ├── bug74606.phpt │ │ │ ├── bug74954.phpt │ │ │ ├── bug75396.phpt │ │ │ ├── bug76427.phpt │ │ │ ├── bug78434.phpt │ │ │ ├── bug79600.phpt │ │ │ ├── bug80240.phpt │ │ │ ├── clone.phpt │ │ │ ├── dangling_send_target.phpt │ │ │ ├── debugInfo_001.phpt │ │ │ ├── dynamic_call.phpt │ │ │ ├── dynamic_properties.phpt │ │ │ ├── errors/ │ │ │ │ ├── count_error.phpt │ │ │ │ ├── generator_extend_error.phpt │ │ │ │ ├── generator_instantiate_error.phpt │ │ │ │ ├── non_ref_generator_iterated_by_ref_error.phpt │ │ │ │ ├── resume_running_generator_error.phpt │ │ │ │ ├── resume_running_generator_error_002.phpt │ │ │ │ ├── resume_running_generator_error_003.phpt │ │ │ │ ├── serialize_unserialize_error.phpt │ │ │ │ ├── yield_const_by_ref_error.phpt │ │ │ │ ├── yield_in_force_closed_finally_error.phpt │ │ │ │ ├── yield_non_ref_function_call_by_ref_error.phpt │ │ │ │ └── yield_outside_function_error.phpt │ │ │ ├── exception_during_shutdown.phpt │ │ │ ├── fibonacci.phpt │ │ │ ├── finally/ │ │ │ │ ├── finally_ran_on_close.phpt │ │ │ │ ├── return_return.phpt │ │ │ │ ├── return_yield.phpt │ │ │ │ ├── run_on_dtor.phpt │ │ │ │ ├── throw_yield.phpt │ │ │ │ ├── yield_return.phpt │ │ │ │ ├── yield_throw.phpt │ │ │ │ └── yield_yield.phpt │ │ │ ├── func_get_args.phpt │ │ │ ├── gc_order.phpt │ │ │ ├── gc_running_generator.phpt │ │ │ ├── gc_with_iterator_in_foreach.phpt │ │ │ ├── gc_with_root_parent_mismatch.phpt │ │ │ ├── gc_with_yield_from.phpt │ │ │ ├── generator_closure.phpt │ │ │ ├── generator_closure_collection.phpt │ │ │ ├── generator_closure_unused.phpt │ │ │ ├── generator_closure_with_this.phpt │ │ │ ├── generator_in_multipleiterator.phpt │ │ │ ├── generator_method.phpt │ │ │ ├── generator_method_by_ref.phpt │ │ │ ├── generator_return_return_type.phpt │ │ │ ├── generator_return_without_value.phpt │ │ │ ├── generator_returns_generator.phpt │ │ │ ├── generator_rewind.phpt │ │ │ ├── generator_send.phpt │ │ │ ├── generator_static_method.phpt │ │ │ ├── generator_symtable_leak.phpt │ │ │ ├── generator_throwing_during_function_call.phpt │ │ │ ├── generator_throwing_exception.phpt │ │ │ ├── generator_throwing_in_foreach.phpt │ │ │ ├── generator_trampoline.phpt │ │ │ ├── generator_with_arg_unpacking.phpt │ │ │ ├── generator_with_keys.phpt │ │ │ ├── generator_with_nonscalar_keys.phpt │ │ │ ├── generator_with_type_check.phpt │ │ │ ├── generator_with_type_check_2.phpt │ │ │ ├── get_return.phpt │ │ │ ├── get_return_and_finally.phpt │ │ │ ├── get_return_errors.phpt │ │ │ ├── get_return_types.phpt │ │ │ ├── gh11028_1.phpt │ │ │ ├── gh11028_2.phpt │ │ │ ├── gh11028_3.phpt │ │ │ ├── gh14387.phpt │ │ │ ├── gh15851.phpt │ │ │ ├── gh8289.phpt │ │ │ ├── gh9750-001.phpt │ │ │ ├── gh9750-002.phpt │ │ │ ├── gh9750-003.phpt │ │ │ ├── gh9750-004.phpt │ │ │ ├── gh9750-005.phpt │ │ │ ├── gh9750-006.phpt │ │ │ ├── gh9750-007.phpt │ │ │ ├── gh9750-008.phpt │ │ │ ├── gh9750-009.phpt │ │ │ ├── gh9750-010.phpt │ │ │ ├── gh9750-011.phpt │ │ │ ├── gh9752.phpt │ │ │ ├── gh9801.phpt │ │ │ ├── ignored_send_leak.phpt │ │ │ ├── iterator_wrapper_leak.phpt │ │ │ ├── multiple_yield_from_on_same_generator.phpt │ │ │ ├── mutli_yield_from_with_exception.phpt │ │ │ ├── nested_calls_with_die.phpt │ │ │ ├── nested_method_calls.phpt │ │ │ ├── no_foreach_var_leaks.phpt │ │ │ ├── recursive_yield_from.phpt │ │ │ ├── repeated_yield_from_with_immediate_release.phpt │ │ │ ├── return_from_by_ref_generator.phpt │ │ │ ├── send_after_close.phpt │ │ │ ├── send_returns_current.phpt │ │ │ ├── throw_already_closed.phpt │ │ │ ├── throw_caught.phpt │ │ │ ├── throw_into_yield_from_array.phpt │ │ │ ├── throw_not_an_exception.phpt │ │ │ ├── throw_rethrow.phpt │ │ │ ├── throw_uncaught.phpt │ │ │ ├── unused_return_value.phpt │ │ │ ├── xrange.phpt │ │ │ ├── yield_array_key.phpt │ │ │ ├── yield_array_offset_by_ref.phpt │ │ │ ├── yield_by_reference.phpt │ │ │ ├── yield_by_reference_optimization.phpt │ │ │ ├── yield_closure.phpt │ │ │ ├── yield_during_function_call.phpt │ │ │ ├── yield_during_method_call.phpt │ │ │ ├── yield_from_aborted_generator_with_children.phpt │ │ │ ├── yield_from_already_running.phpt │ │ │ ├── yield_from_array.phpt │ │ │ ├── yield_from_backtrace.phpt │ │ │ ├── yield_from_by_reference.phpt │ │ │ ├── yield_from_chain_dtor_order.phpt │ │ │ ├── yield_from_deep_recursion.phpt │ │ │ ├── yield_from_force_closed.phpt │ │ │ ├── yield_from_greedy_parse.phpt │ │ │ ├── yield_from_iterator.phpt │ │ │ ├── yield_from_iterator_agregate.phpt │ │ │ ├── yield_from_multi_tree.phpt │ │ │ ├── yield_from_multi_tree_exception.phpt │ │ │ ├── yield_from_multi_tree_single_nodes.phpt │ │ │ ├── yield_from_non_iterable.phpt │ │ │ ├── yield_from_throw_with_throwing_exception.phpt │ │ │ ├── yield_from_valid_exception.phpt │ │ │ ├── yield_in_finally.phpt │ │ │ ├── yield_in_finally_cleanup.phpt │ │ │ ├── yield_in_parenthesis.phpt │ │ │ ├── yield_precedence.phpt │ │ │ ├── yield_ref_function_call_by_reference.phpt │ │ │ ├── yield_unary_precedence.phpt │ │ │ └── yield_without_value.phpt │ │ ├── get_called_class_001.phpt │ │ ├── get_class_methods_001.phpt │ │ ├── get_class_methods_002.phpt │ │ ├── get_class_methods_003.phpt │ │ ├── get_class_vars_001.phpt │ │ ├── get_class_vars_002.phpt │ │ ├── get_class_vars_003.phpt │ │ ├── get_class_vars_004.phpt │ │ ├── get_class_vars_005.phpt │ │ ├── get_class_vars_006.phpt │ │ ├── get_class_vars_007.phpt │ │ ├── get_class_vars_typed_props.phpt │ │ ├── get_defined_functions_basic.phpt │ │ ├── get_defined_vars.phpt │ │ ├── get_mangled_object_vars.phpt │ │ ├── get_parent_class_001.phpt │ │ ├── get_required_files.phpt │ │ ├── get_resource_id.phpt │ │ ├── gh10014.phpt │ │ ├── gh10072-2.phpt │ │ ├── gh10072.phpt │ │ ├── gh10168/ │ │ │ ├── assign.phpt │ │ │ ├── assign_dim.phpt │ │ │ ├── assign_dim_ref.phpt │ │ │ ├── assign_dim_ref_with_prop_ref.phpt │ │ │ ├── assign_dim_with_prop_ref.phpt │ │ │ ├── assign_prop.phpt │ │ │ ├── assign_prop_ref.phpt │ │ │ ├── assign_prop_ref_with_prop_ref.phpt │ │ │ ├── assign_prop_with_prop_ref.phpt │ │ │ ├── assign_ref.phpt │ │ │ ├── assign_ref_with_prop_ref.phpt │ │ │ ├── assign_static_prop.phpt │ │ │ ├── assign_static_prop_ref.phpt │ │ │ ├── assign_static_prop_ref_with_prop_ref.phpt │ │ │ ├── assign_static_prop_with_prop_ref.phpt │ │ │ ├── assign_static_untyped_prop.phpt │ │ │ ├── assign_static_untyped_prop_ref.phpt │ │ │ ├── assign_static_untyped_prop_ref_with_prop_ref.phpt │ │ │ ├── assign_static_untyped_prop_with_prop_ref.phpt │ │ │ ├── assign_untyped_prop.phpt │ │ │ ├── assign_untyped_prop_ref.phpt │ │ │ ├── assign_untyped_prop_ref_with_prop_ref.phpt │ │ │ ├── assign_untyped_prop_with_prop_ref.phpt │ │ │ ├── assign_with_prop_ref.phpt │ │ │ └── wrong_assign_to_variable.phpt │ │ ├── gh10169.phpt │ │ ├── gh10232/ │ │ │ ├── constant_def.inc │ │ │ └── required.inc │ │ ├── gh10232.phpt │ │ ├── gh10251.phpt │ │ ├── gh10346.phpt │ │ ├── gh10356.phpt │ │ ├── gh10377.phpt │ │ ├── gh10377_1.phpt │ │ ├── gh10377_2.phpt │ │ ├── gh10377_3.phpt │ │ ├── gh10377_4.phpt │ │ ├── gh10469.phpt │ │ ├── gh10486.phpt │ │ ├── gh10486_2.phpt │ │ ├── gh10570.phpt │ │ ├── gh10634.phpt │ │ ├── gh10695_1.phpt │ │ ├── gh10695_2.phpt │ │ ├── gh10695_3.phpt │ │ ├── gh10695_4.phpt │ │ ├── gh10695_5.phpt │ │ ├── gh10695_6.phpt │ │ ├── gh10695_7.phpt │ │ ├── gh10709.phpt │ │ ├── gh10709_2.phpt │ │ ├── gh10709_3.phpt │ │ ├── gh10810.phpt │ │ ├── gh10935.phpt │ │ ├── gh11016.phpt │ │ ├── gh11108.phpt │ │ ├── gh11108_shutdown.inc │ │ ├── gh11108_test.inc │ │ ├── gh11138.phpt │ │ ├── gh11152.phpt │ │ ├── gh11171.phpt │ │ ├── gh11189.phpt │ │ ├── gh11189_1.phpt │ │ ├── gh11222.phpt │ │ ├── gh11244-001.phpt │ │ ├── gh11244-002.phpt │ │ ├── gh11244-003.phpt │ │ ├── gh11244-004.phpt │ │ ├── gh11244-005.phpt │ │ ├── gh11320_1.phpt │ │ ├── gh11320_2.phpt │ │ ├── gh11320_3.phpt │ │ ├── gh11488.phpt │ │ ├── gh11580.phpt │ │ ├── gh11735_1.phpt │ │ ├── gh11735_2.phpt │ │ ├── gh12073.phpt │ │ ├── gh12102_1.phpt │ │ ├── gh12102_2.phpt │ │ ├── gh12102_3.phpt │ │ ├── gh12366.inc │ │ ├── gh12366.phpt │ │ ├── gh12457.phpt │ │ ├── gh12468_1.phpt │ │ ├── gh12468_2.phpt │ │ ├── gh12826.phpt │ │ ├── gh13097_a.phpt │ │ ├── gh13097_b.phpt │ │ ├── gh13142.phpt │ │ ├── gh13145.phpt │ │ ├── gh13178_1.phpt │ │ ├── gh13178_2.phpt │ │ ├── gh13178_3.phpt │ │ ├── gh13178_4.phpt │ │ ├── gh13178_5.phpt │ │ ├── gh13446_1.phpt │ │ ├── gh13446_2.phpt │ │ ├── gh13446_3.phpt │ │ ├── gh13446_4.phpt │ │ ├── gh13569.phpt │ │ ├── gh13670_001.phpt │ │ ├── gh13670_002.phpt │ │ ├── gh13670_003.phpt │ │ ├── gh13931.phpt │ │ ├── gh14003.phpt │ │ ├── gh14009_001.phpt │ │ ├── gh14009_002.phpt │ │ ├── gh14009_003.phpt │ │ ├── gh14009_004.phpt │ │ ├── gh14009_005.phpt │ │ ├── gh14456.phpt │ │ ├── gh14480.phpt │ │ ├── gh14626.phpt │ │ ├── gh14961.phpt │ │ ├── gh14969.phpt │ │ ├── gh15108-001.phpt │ │ ├── gh15108-002.phpt │ │ ├── gh15108-003.phpt │ │ ├── gh15108-004.phpt │ │ ├── gh15108-005.phpt │ │ ├── gh15108-006.phpt │ │ ├── gh15108-007.phpt │ │ ├── gh15240.phpt │ │ ├── gh15275-001.phpt │ │ ├── gh15275-002.phpt │ │ ├── gh15275-003.phpt │ │ ├── gh15275-004.phpt │ │ ├── gh15275-005.phpt │ │ ├── gh15275-006.phpt │ │ ├── gh15330-001.phpt │ │ ├── gh15330-002.phpt │ │ ├── gh15330-003.phpt │ │ ├── gh15330-004.phpt │ │ ├── gh15330-005.phpt │ │ ├── gh15330-006.phpt │ │ ├── gh15712.phpt │ │ ├── gh15866.phpt │ │ ├── gh15907.phpt │ │ ├── gh15976/ │ │ │ ├── alias-names.phpt │ │ │ ├── class-names.phpt │ │ │ ├── enum-names.phpt │ │ │ ├── interface-names.phpt │ │ │ └── trait-names.phpt │ │ ├── gh16188.phpt │ │ ├── gh16293_001.phpt │ │ ├── gh16293_002.phpt │ │ ├── gh16371.phpt │ │ ├── gh16408.phpt │ │ ├── gh16508.phpt │ │ ├── gh16509.inc │ │ ├── gh16509.phpt │ │ ├── gh16515.phpt │ │ ├── gh16615_001.phpt │ │ ├── gh16615_002.phpt │ │ ├── gh16630.phpt │ │ ├── gh16648.phpt │ │ ├── gh16725.phpt │ │ ├── gh16799.phpt │ │ ├── gh17162.phpt │ │ ├── gh17214.phpt │ │ ├── gh17222.phpt │ │ ├── gh18572.phpt │ │ ├── gh18581.phpt │ │ ├── gh18736.phpt │ │ ├── gh18756.phpt │ │ ├── gh18833.phpt │ │ ├── gh18907.phpt │ │ ├── gh19044.phpt │ │ ├── gh19053.phpt │ │ ├── gh19280.phpt │ │ ├── gh19305-001.phpt │ │ ├── gh19305-002.phpt │ │ ├── gh19305-003.phpt │ │ ├── gh19306.phpt │ │ ├── gh19326.phpt │ │ ├── gh19543-001.phpt │ │ ├── gh19543-002.phpt │ │ ├── gh19613.phpt │ │ ├── gh19679.phpt │ │ ├── gh19839.phpt │ │ ├── gh418106144.phpt │ │ ├── gh7771_1.phpt │ │ ├── gh7771_1_definition.inc │ │ ├── gh7771_2.phpt │ │ ├── gh7771_2_definition.inc │ │ ├── gh7771_3.phpt │ │ ├── gh7792_1.phpt │ │ ├── gh7792_2.phpt │ │ ├── gh7792_3.phpt │ │ ├── gh7792_4.phpt │ │ ├── gh7792_5.phpt │ │ ├── gh7900.phpt │ │ ├── gh7958.phpt │ │ ├── gh8083.phpt │ │ ├── gh8548.phpt │ │ ├── gh8548_2.phpt │ │ ├── gh8810_1.phpt │ │ ├── gh8810_2.phpt │ │ ├── gh8810_3.phpt │ │ ├── gh8810_4.phpt │ │ ├── gh8810_5.phpt │ │ ├── gh8810_6.phpt │ │ ├── gh8810_7.phpt │ │ ├── gh8821.phpt │ │ ├── gh8841.phpt │ │ ├── gh8962.phpt │ │ ├── gh9136.phpt │ │ ├── gh9136_2.phpt │ │ ├── gh9138.phpt │ │ ├── gh9138_2.phpt │ │ ├── gh9407.phpt │ │ ├── gh9500.phpt │ │ ├── gh9775_1.phpt │ │ ├── gh9775_2.phpt │ │ ├── gh9916-001.phpt │ │ ├── gh9916-002.phpt │ │ ├── gh9916-003.phpt │ │ ├── gh9916-004.phpt │ │ ├── gh9916-005.phpt │ │ ├── gh9916-006.phpt │ │ ├── gh9916-007.phpt │ │ ├── gh9916-008.phpt │ │ ├── gh9916-009.phpt │ │ ├── gh9916-010.phpt │ │ ├── gh9916-011.phpt │ │ ├── gh9916-012.phpt │ │ ├── gh_17718_001.phpt │ │ ├── gh_17718_002.phpt │ │ ├── gh_17728.phpt │ │ ├── ghsa-rwp7-7vc6-8477_001.phpt │ │ ├── ghsa-rwp7-7vc6-8477_002.phpt │ │ ├── ghsa-rwp7-7vc6-8477_003.phpt │ │ ├── global_to_string_exception.phpt │ │ ├── global_with_side_effect_name.phpt │ │ ├── globals.inc │ │ ├── globals_001.phpt │ │ ├── globals_002.phpt │ │ ├── globals_003.phpt │ │ ├── globals_004.phpt │ │ ├── globals_005.phpt │ │ ├── goto_in_foreach.phpt │ │ ├── grammar/ │ │ │ ├── bug78441.phpt │ │ │ ├── regression_001.phpt │ │ │ ├── regression_002.phpt │ │ │ ├── regression_003.phpt │ │ │ ├── regression_004.phpt │ │ │ ├── regression_005.phpt │ │ │ ├── regression_006.phpt │ │ │ ├── regression_007.phpt │ │ │ ├── regression_008.phpt │ │ │ ├── regression_009.phpt │ │ │ ├── regression_010.phpt │ │ │ ├── regression_011.phpt │ │ │ ├── regression_012.phpt │ │ │ ├── regression_013.phpt │ │ │ ├── semi_reserved_001.phpt │ │ │ ├── semi_reserved_002.phpt │ │ │ ├── semi_reserved_003.phpt │ │ │ ├── semi_reserved_004.phpt │ │ │ ├── semi_reserved_005.phpt │ │ │ ├── semi_reserved_006.phpt │ │ │ ├── semi_reserved_007.phpt │ │ │ ├── semi_reserved_008.phpt │ │ │ ├── semi_reserved_009.phpt │ │ │ └── semi_reserved_010.phpt │ │ ├── grandparent_prototype.phpt │ │ ├── halt01.phpt │ │ ├── halt02.phpt │ │ ├── halt03.phpt │ │ ├── halt_compiler1.phpt │ │ ├── halt_compiler2.phpt │ │ ├── halt_compiler3.phpt │ │ ├── halt_compiler4.phpt │ │ ├── halt_compiler5.phpt │ │ ├── heredoc_001.phpt │ │ ├── heredoc_002.phpt │ │ ├── heredoc_003.phpt │ │ ├── heredoc_004.phpt │ │ ├── heredoc_005.phpt │ │ ├── heredoc_006.phpt │ │ ├── heredoc_007.phpt │ │ ├── heredoc_008.phpt │ │ ├── heredoc_011.phpt │ │ ├── heredoc_012.phpt │ │ ├── heredoc_013.phpt │ │ ├── heredoc_014.phpt │ │ ├── heredoc_015.phpt │ │ ├── heredoc_016.phpt │ │ ├── hex_overflow_32bit.phpt │ │ ├── iap_on_object_deprecated.phpt │ │ ├── iface_constant_visibility_variance.phpt │ │ ├── ignore_repeated_errors.phpt │ │ ├── ignore_repeated_source.phpt │ │ ├── illegal_offset_unset_isset_empty.phpt │ │ ├── in-de-crement/ │ │ │ ├── decrement_001.phpt │ │ │ ├── decrement_001_64bit.phpt │ │ │ ├── decrement_diagnostic_change_type.phpt │ │ │ ├── decrement_with_castable_objects_no_subtraction.phpt │ │ │ ├── incdec_bool_exception.phpt │ │ │ ├── incdec_ref_property.phpt │ │ │ ├── incdec_strings.phpt │ │ │ ├── incdec_strings_exception.phpt │ │ │ ├── incdec_types.phpt │ │ │ ├── incdec_undef.phpt │ │ │ ├── increment_001.phpt │ │ │ ├── increment_001_64bit.phpt │ │ │ ├── increment_diagnostic_change_type.phpt │ │ │ ├── increment_diagnostic_change_type_do_operator.phpt │ │ │ ├── increment_function_return_error.phpt │ │ │ ├── increment_with_castable_objects_no_addition.phpt │ │ │ ├── object_cannot_incdec.phpt │ │ │ ├── object_cannot_incdec_use_result_op.phpt │ │ │ ├── oss-fuzz-60709_globals_unset_after_undef_warning.phpt │ │ │ ├── oss-fuzz-60734_predec-object.phpt │ │ │ ├── oss-fuzz-60734_preinc-object.phpt │ │ │ ├── oss-fuzz-61469_binop_dynamic_property_unset_error_handler.phpt │ │ │ ├── oss-fuzz-61469_postdec_dynamic_property_unset_error_handler.phpt │ │ │ ├── oss-fuzz-61469_postinc_dynamic_property_unset_error_handler.phpt │ │ │ ├── oss-fuzz-61469_predec_dynamic_property_unset_error_handler.phpt │ │ │ ├── oss-fuzz-61469_preinc_dynamic_property_unset_error_handler.phpt │ │ │ ├── oss-fuzz-61865_binop_declared_property_unset_error_handler.phpt │ │ │ ├── oss-fuzz-61865_postdec_declared_property_unset_error_handler.phpt │ │ │ ├── oss-fuzz-61865_postinc_declared_property_unset_error_handler.phpt │ │ │ ├── oss-fuzz-61865_predec_declared_property_unset_error_handler.phpt │ │ │ ├── oss-fuzz-61865_preinc_declared_property_unset_error_handler.phpt │ │ │ ├── oss-fuzz-62294_globals_unset_after_string_warning.phpt │ │ │ ├── overloaded_access.phpt │ │ │ ├── string_increment_various.phpt │ │ │ ├── unset_globals_in_error_handler.phpt │ │ │ ├── unset_object_property_in_error_handler.phpt │ │ │ └── unset_property_converted_to_obj_in_error_handler.phpt │ │ ├── incdec_ref_property.phpt │ │ ├── incdec_undef.phpt │ │ ├── include_fail_during_read.phpt │ │ ├── include_stat_is_quiet.phpt │ │ ├── incompat_ctx_user.phpt │ │ ├── increment_001.phpt │ │ ├── increment_function_return_error.phpt │ │ ├── indexing_001.phpt │ │ ├── indirect_call_array_001.phpt │ │ ├── indirect_call_array_002.phpt │ │ ├── indirect_call_array_003.phpt │ │ ├── indirect_call_array_004.phpt │ │ ├── indirect_call_array_005.phpt │ │ ├── indirect_call_from_constant.phpt │ │ ├── indirect_call_string_001.phpt │ │ ├── indirect_call_string_002.phpt │ │ ├── indirect_call_string_003.phpt │ │ ├── indirect_method_call_001.phpt │ │ ├── indirect_method_call_002.phpt │ │ ├── indirect_method_call_003.phpt │ │ ├── indirect_method_call_004.phpt │ │ ├── indirect_method_call_005.phpt │ │ ├── indirect_property_access.phpt │ │ ├── indirect_reference_this.phpt │ │ ├── inference_infinite_loop.phpt │ │ ├── inherit_internal_static.phpt │ │ ├── init_array_illegal_offset_type.phpt │ │ ├── instanceof.phpt │ │ ├── instanceof_001.phpt │ │ ├── instanceof_002.phpt │ │ ├── instanceof_const.phpt │ │ ├── instantiate_all_classes.phpt │ │ ├── int_conversion_exponents.phpt │ │ ├── int_overflow_32bit.phpt │ │ ├── int_overflow_64bit.phpt │ │ ├── int_special_values.phpt │ │ ├── int_static_prop_name.phpt │ │ ├── int_underflow_32bit.phpt │ │ ├── int_underflow_64bit.phpt │ │ ├── inter_007.phpt │ │ ├── inter_02.phpt │ │ ├── inter_03.phpt │ │ ├── inter_04.phpt │ │ ├── inter_05.phpt │ │ ├── inter_06.phpt │ │ ├── interface_constructor_prototype_001.phpt │ │ ├── interface_constructor_prototype_002.phpt │ │ ├── interface_exists_001.phpt │ │ ├── interface_exists_002.phpt │ │ ├── interface_extends_static.phpt │ │ ├── interface_underscore_as_name.phpt │ │ ├── interface_with_tostring.phpt │ │ ├── internal_class_variance.phpt │ │ ├── invalid_const_class_name.phpt │ │ ├── invalid_parent_const_ref_leak.phpt │ │ ├── is_a.phpt │ │ ├── is_callable_trampoline_uaf-deprecated.phpt │ │ ├── is_callable_trampoline_uaf.phpt │ │ ├── isset_001.phpt │ │ ├── isset_002.phpt │ │ ├── isset_003.phpt │ │ ├── isset_array.phpt │ │ ├── isset_expr_error.phpt │ │ ├── isset_func_error.phpt │ │ ├── isset_str_offset.phpt │ │ ├── iterable_or_null.phpt │ │ ├── iterator_key_by_ref.phpt │ │ ├── jmpznz_relative_offsets.phpt │ │ ├── jump01.phpt │ │ ├── jump02.phpt │ │ ├── jump03.phpt │ │ ├── jump04.phpt │ │ ├── jump05.phpt │ │ ├── jump06.phpt │ │ ├── jump07.phpt │ │ ├── jump08.phpt │ │ ├── jump09.phpt │ │ ├── jump10.phpt │ │ ├── jump11.phpt │ │ ├── jump12.phpt │ │ ├── jump13.phpt │ │ ├── jump14.phpt │ │ ├── jump15.phpt │ │ ├── jump16.phpt │ │ ├── jump17.phpt │ │ ├── lazy_objects/ │ │ │ ├── array_walk.phpt │ │ │ ├── clone_calls___clone_once.phpt │ │ │ ├── clone_creates_object_with_independent_state_001.phpt │ │ │ ├── clone_creates_object_with_independent_state_002.phpt │ │ │ ├── clone_creates_object_with_independent_state_003.phpt │ │ │ ├── clone_initialized.phpt │ │ │ ├── clone_initializer_exception.phpt │ │ │ ├── clone_initializes.phpt │ │ │ ├── clone_preverves_object_class.phpt │ │ │ ├── convert_to_array.phpt │ │ │ ├── dtor_called_if_init.phpt │ │ │ ├── dtor_not_called_if_not_init.phpt │ │ │ ├── fetch_coalesce_initializes.phpt │ │ │ ├── fetch_coalesce_non_existing_initializes.phpt │ │ │ ├── fetch_declared_prop_initializes.phpt │ │ │ ├── fetch_dynamic_prop_initializes.phpt │ │ │ ├── fetch_hook_may_not_initialize.phpt │ │ │ ├── fetch_hook_virtual_may_initialize.phpt │ │ │ ├── fetch_hook_virtual_may_not_initialize.phpt │ │ │ ├── fetch_magic_prop_may_initialize.phpt │ │ │ ├── fetch_magic_prop_may_not_initialize.phpt │ │ │ ├── fetch_magic_prop_recursive_may_initialize.phpt │ │ │ ├── fetch_op_dynamic_error.phpt │ │ │ ├── fetch_op_dynamic_prop_initializes.phpt │ │ │ ├── fetch_op_error.phpt │ │ │ ├── fetch_op_initializes.phpt │ │ │ ├── fetch_op_skipped_prop_does_not_initialize.phpt │ │ │ ├── fetch_ref_initializes.phpt │ │ │ ├── fetch_ref_skipped_prop_does_not_initialize.phpt │ │ │ ├── fetch_skipped_prop_does_not_initialize.phpt │ │ │ ├── final_classes_can_be_initialized_lazily.phpt │ │ │ ├── gc_001.phpt │ │ │ ├── gc_002.phpt │ │ │ ├── gc_003.phpt │ │ │ ├── gc_004.phpt │ │ │ ├── gc_005.phpt │ │ │ ├── gc_006.phpt │ │ │ ├── get_initializer.phpt │ │ │ ├── get_properties.phpt │ │ │ ├── gh15823.phpt │ │ │ ├── gh15999_001.phpt │ │ │ ├── gh15999_002.phpt │ │ │ ├── gh17941.phpt │ │ │ ├── gh17998.phpt │ │ │ ├── gh18038-001.phpt │ │ │ ├── gh18038-002.phpt │ │ │ ├── gh18038-003.phpt │ │ │ ├── gh18038-004.phpt │ │ │ ├── gh18038-005.phpt │ │ │ ├── gh18038-006.phpt │ │ │ ├── gh18038-007.phpt │ │ │ ├── gh18038-008.phpt │ │ │ ├── gh18038-009.phpt │ │ │ ├── gh18038-010.phpt │ │ │ ├── gh18038-011.phpt │ │ │ ├── gh18038-012.phpt │ │ │ ├── init_exception_001.phpt │ │ │ ├── init_exception_leaves_object_lazy.phpt │ │ │ ├── init_exception_reverts_initializer_changes.phpt │ │ │ ├── init_exception_reverts_initializer_changes_dyn_props.phpt │ │ │ ├── init_exception_reverts_initializer_changes_dyn_props_and_ht.phpt │ │ │ ├── init_exception_reverts_initializer_changes_nested.phpt │ │ │ ├── init_exception_reverts_initializer_changes_overridden_prop.phpt │ │ │ ├── init_exception_reverts_initializer_changes_props_ht.phpt │ │ │ ├── init_exception_reverts_initializer_changes_props_ht_ref.phpt │ │ │ ├── init_fatal.phpt │ │ │ ├── init_handles_ref_source_types.phpt │ │ │ ├── init_handles_ref_source_types_exception.phpt │ │ │ ├── init_may_leave_props_uninit.phpt │ │ │ ├── init_preserves_identity.phpt │ │ │ ├── init_preserves_proxy_class.phpt │ │ │ ├── init_sets_prop_default_values.phpt │ │ │ ├── init_trigger_array_cast.phpt │ │ │ ├── init_trigger_compare.phpt │ │ │ ├── init_trigger_debug_zval_dump.phpt │ │ │ ├── init_trigger_foreach.phpt │ │ │ ├── init_trigger_foreach_hooks.phpt │ │ │ ├── init_trigger_get_mangled_object_vars.phpt │ │ │ ├── init_trigger_get_object_vars.phpt │ │ │ ├── init_trigger_json_encode.phpt │ │ │ ├── init_trigger_json_encode_hooks.phpt │ │ │ ├── init_trigger_reflection_object_toString.phpt │ │ │ ├── init_trigger_serialize.phpt │ │ │ ├── init_trigger_var_dump.phpt │ │ │ ├── init_trigger_var_dump_debug_info_001.phpt │ │ │ ├── init_trigger_var_dump_debug_info_002.phpt │ │ │ ├── init_trigger_var_export.phpt │ │ │ ├── initializeLazyObject.phpt │ │ │ ├── initializeLazyObject_error.phpt │ │ │ ├── initializeLazyObject_noop_on_initialized_object.phpt │ │ │ ├── initializer_must_return_the_right_type.phpt │ │ │ ├── invalid_options.phpt │ │ │ ├── isLazy.phpt │ │ │ ├── isUninitializedLazyObject.phpt │ │ │ ├── isset_hooked_may_initialize.phpt │ │ │ ├── isset_hooked_may_not_initialize.phpt │ │ │ ├── isset_initializes.phpt │ │ │ ├── jit_assign_obj_dynamic.phpt │ │ │ ├── jit_assign_obj_op_dynamic.phpt │ │ │ ├── jit_assign_obj_op_prop_info.phpt │ │ │ ├── jit_assign_obj_op_unknown_prop_info.phpt │ │ │ ├── jit_assign_obj_op_unknown_prop_info_untyped.phpt │ │ │ ├── jit_assign_obj_prop_info.phpt │ │ │ ├── jit_assign_obj_unknown_prop_info.phpt │ │ │ ├── jit_assign_obj_unknown_prop_info_untyped.phpt │ │ │ ├── json_encode_dynamic_props.phpt │ │ │ ├── markLazyObjectAsInitialized.phpt │ │ │ ├── oss_fuzz_71382.phpt │ │ │ ├── oss_fuzz_71407.phpt │ │ │ ├── oss_fuzz_71446.phpt │ │ │ ├── realize.phpt │ │ │ ├── realize_no_props.phpt │ │ │ ├── realize_proxy_overridden.phpt │ │ │ ├── realize_skipped.phpt │ │ │ ├── reset_as_lazy_accepts_sub_classes.phpt │ │ │ ├── reset_as_lazy_already_exception.phpt │ │ │ ├── reset_as_lazy_calls_destructor.phpt │ │ │ ├── reset_as_lazy_can_reset_initialized_proxies.phpt │ │ │ ├── reset_as_lazy_deletes_reference_source_type.phpt │ │ │ ├── reset_as_lazy_destructor_exception.phpt │ │ │ ├── reset_as_lazy_ignores_additional_props.phpt │ │ │ ├── reset_as_lazy_initialized_proxy.phpt │ │ │ ├── reset_as_lazy_may_call_nested_destructors.phpt │ │ │ ├── reset_as_lazy_may_skip_destructor.phpt │ │ │ ├── reset_as_lazy_readonly.phpt │ │ │ ├── reset_as_lazy_real_instance.phpt │ │ │ ├── reset_as_lazy_resets_dynamic_props.phpt │ │ │ ├── reset_as_lazy_while_init_exception.phpt │ │ │ ├── rfc/ │ │ │ │ ├── rfc_example_001.phpt │ │ │ │ ├── rfc_example_002.phpt │ │ │ │ ├── rfc_example_003.phpt │ │ │ │ ├── rfc_example_004.phpt │ │ │ │ ├── rfc_example_005.phpt │ │ │ │ ├── rfc_example_006.phpt │ │ │ │ ├── rfc_example_007.phpt │ │ │ │ ├── rfc_example_008.phpt │ │ │ │ ├── rfc_example_009.phpt │ │ │ │ ├── rfc_example_010.phpt │ │ │ │ ├── rfc_example_011.phpt │ │ │ │ └── rfc_example_012.phpt │ │ │ ├── serialize___serialize_may_initialize.phpt │ │ │ ├── serialize___serialize_may_not_initialize.phpt │ │ │ ├── serialize___sleep.phpt │ │ │ ├── serialize___sleep_initializes.phpt │ │ │ ├── serialize___sleep_skip_flag.phpt │ │ │ ├── serialize___sleep_skip_flag_may_initialize.phpt │ │ │ ├── serialize_dynamic_props.phpt │ │ │ ├── serialize_failed_lazy_object.phpt │ │ │ ├── serialize_failed_lazy_object_skip_init_on_serialize.phpt │ │ │ ├── serialize_hook.phpt │ │ │ ├── serialize_initializes.phpt │ │ │ ├── serialize_props_ht.phpt │ │ │ ├── serialize_skip_flag.phpt │ │ │ ├── serialize_skip_flag_props_ht.phpt │ │ │ ├── setRawValueWithoutLazyInitialization.phpt │ │ │ ├── setRawValueWithoutLazyInitialization_exception_001.phpt │ │ │ ├── setRawValueWithoutLazyInitialization_exception_002.phpt │ │ │ ├── setRawValueWithoutLazyInitialization_initialized.phpt │ │ │ ├── setRawValueWithoutLazyInitialization_no_dynamic_prop.phpt │ │ │ ├── setRawValueWithoutLazyInitialization_readonly.phpt │ │ │ ├── setRawValueWithoutLazyInitialization_readonly_variant.phpt │ │ │ ├── setRawValueWithoutLazyInitialization_realize.phpt │ │ │ ├── setRawValueWithoutLazyInitialization_side_effect_destruct.phpt │ │ │ ├── setRawValueWithoutLazyInitialization_side_effect_toString.phpt │ │ │ ├── setRawValueWithoutLazyInitialization_skips___set.phpt │ │ │ ├── setRawValueWithoutLazyInitialization_skips_hook.phpt │ │ │ ├── skipLazyInitialization.phpt │ │ │ ├── skipLazyInitialization_default.phpt │ │ │ ├── skipLazyInitialization_initialized_object.phpt │ │ │ ├── skipLazyInitialization_no_dynamic_prop.phpt │ │ │ ├── skipLazyInitialization_readonly.phpt │ │ │ ├── skipLazyInitialization_realize.phpt │ │ │ ├── skipLazyInitialization_skips___set.phpt │ │ │ ├── skipLazyInitialization_skips_hooks.phpt │ │ │ ├── skipLazyInitialization_skips_non_lazy_prop.phpt │ │ │ ├── support_no_internal_classes.phpt │ │ │ ├── support_no_internal_sub_classes.phpt │ │ │ ├── support_readonly_class.phpt │ │ │ ├── support_readonly_prop.phpt │ │ │ ├── support_stdClass.phpt │ │ │ ├── support_stdClass_sub_classes.phpt │ │ │ ├── typed_properties_001.phpt │ │ │ ├── typed_properties_002.phpt │ │ │ ├── typed_properties_003.phpt │ │ │ ├── typed_properties_004.phpt │ │ │ ├── unclean_shutdown.phpt │ │ │ ├── unset_defined_no_initialize.phpt │ │ │ ├── unset_hook.phpt │ │ │ ├── unset_magic_circular_may_initialize.phpt │ │ │ ├── unset_magic_may_initialize.phpt │ │ │ ├── unset_magic_may_not_initialize.phpt │ │ │ ├── unset_skipped_no_initialize.phpt │ │ │ ├── unset_undefined_dynamic_initializes.phpt │ │ │ ├── unset_undefined_dynamic_initializes_no_props_ht.phpt │ │ │ ├── unset_undefined_initializes.phpt │ │ │ ├── use_case_001.phpt │ │ │ ├── use_case_001b.phpt │ │ │ ├── use_case_002.phpt │ │ │ ├── write_dynamic_initializes.phpt │ │ │ ├── write_initializer_exception.phpt │ │ │ ├── write_initializes.phpt │ │ │ ├── write_magic_circular_may_initialize.phpt │ │ │ ├── write_magic_may_initialize.phpt │ │ │ └── write_skipped_no_initialize.phpt │ │ ├── lc_ctype_inheritance.phpt │ │ ├── line_const_in_array.phpt │ │ ├── list/ │ │ │ ├── list_reference_001.phpt │ │ │ ├── list_reference_002.phpt │ │ │ ├── list_reference_003.phpt │ │ │ ├── list_reference_004.phpt │ │ │ ├── list_reference_005.phpt │ │ │ ├── list_reference_006.phpt │ │ │ ├── list_reference_007.phpt │ │ │ ├── list_reference_008.phpt │ │ │ ├── list_reference_009.phpt │ │ │ ├── list_reference_010.phpt │ │ │ └── list_reference_011.phpt │ │ ├── list_001.phpt │ │ ├── list_002.phpt │ │ ├── list_003.phpt │ │ ├── list_004.phpt │ │ ├── list_005.phpt │ │ ├── list_006.phpt │ │ ├── list_007.phpt │ │ ├── list_008.phpt │ │ ├── list_010.phpt │ │ ├── list_011.phpt │ │ ├── list_012.phpt │ │ ├── list_013.phpt │ │ ├── list_014.phpt │ │ ├── list_assign_ref_string_offset_error.phpt │ │ ├── list_destructuring_to_special_variables.phpt │ │ ├── list_empty_error.phpt │ │ ├── list_empty_error_keyed.phpt │ │ ├── list_keyed.phpt │ │ ├── list_keyed_ArrayAccess.phpt │ │ ├── list_keyed_conversions.phpt │ │ ├── list_keyed_evaluation_order.inc │ │ ├── list_keyed_evaluation_order.phpt │ │ ├── list_keyed_evaluation_order_2.phpt │ │ ├── list_keyed_evaluation_order_3.phpt │ │ ├── list_keyed_evaluation_order_nested.phpt │ │ ├── list_keyed_leading_comma.phpt │ │ ├── list_keyed_non_literals.phpt │ │ ├── list_keyed_trailing_comma.phpt │ │ ├── list_keyed_undefined.phpt │ │ ├── list_mixed_keyed_unkeyed.phpt │ │ ├── list_mixed_nested_keyed_unkeyed.phpt │ │ ├── list_self_assign.phpt │ │ ├── live_range_phi_leak.phpt │ │ ├── loop_free_on_return.phpt │ │ ├── lsb_001.phpt │ │ ├── lsb_002.phpt │ │ ├── lsb_003.phpt │ │ ├── lsb_004.phpt │ │ ├── lsb_005.phpt │ │ ├── lsb_006.phpt │ │ ├── lsb_007.phpt │ │ ├── lsb_008.phpt │ │ ├── lsb_009.phpt │ │ ├── lsb_010.phpt │ │ ├── lsb_011.phpt │ │ ├── lsb_012.phpt │ │ ├── lsb_013.phpt │ │ ├── lsb_014.phpt │ │ ├── lsb_015.phpt │ │ ├── lsb_016.phpt │ │ ├── lsb_017.phpt │ │ ├── lsb_018.phpt │ │ ├── lsb_019.phpt │ │ ├── lsb_020.phpt │ │ ├── lsb_021.phpt │ │ ├── lsb_022.phpt │ │ ├── lsb_023.phpt │ │ ├── lsb_024.phpt │ │ ├── magic_by_ref_001.phpt │ │ ├── magic_by_ref_002.phpt │ │ ├── magic_by_ref_003.phpt │ │ ├── magic_by_ref_004.phpt │ │ ├── magic_by_ref_005.phpt │ │ ├── magic_by_ref_006.phpt │ │ ├── magic_by_ref_007.phpt │ │ ├── magic_const_in_global_scope.phpt │ │ ├── magic_get_destroy_object.phpt │ │ ├── magic_methods_001.phpt │ │ ├── magic_methods_002.phpt │ │ ├── magic_methods_003.phpt │ │ ├── magic_methods_004.phpt │ │ ├── magic_methods_005.phpt │ │ ├── magic_methods_006.phpt │ │ ├── magic_methods_007.phpt │ │ ├── magic_methods_008.phpt │ │ ├── magic_methods_009.phpt │ │ ├── magic_methods_010.phpt │ │ ├── magic_methods_011.phpt │ │ ├── magic_methods_012.phpt │ │ ├── magic_methods_013.phpt │ │ ├── magic_methods_014.phpt │ │ ├── magic_methods_015.phpt │ │ ├── magic_methods_016.phpt │ │ ├── magic_methods_017.phpt │ │ ├── magic_methods_018.phpt │ │ ├── magic_methods_019.phpt │ │ ├── magic_methods_020.phpt │ │ ├── magic_methods_021.phpt │ │ ├── magic_methods_inheritance_rules.phpt │ │ ├── magic_methods_inheritance_rules_non_trivial_01.phpt │ │ ├── magic_methods_inheritance_rules_non_trivial_02.phpt │ │ ├── magic_methods_serialize.phpt │ │ ├── magic_methods_set_state.phpt │ │ ├── magic_methods_sleep.phpt │ │ ├── magic_methods_unserialize.phpt │ │ ├── magic_methods_wakeup.phpt │ │ ├── match/ │ │ │ ├── 001.phpt │ │ │ ├── 002.phpt │ │ │ ├── 003.phpt │ │ │ ├── 004.phpt │ │ │ ├── 005.phpt │ │ │ ├── 006.phpt │ │ │ ├── 007.phpt │ │ │ ├── 008.phpt │ │ │ ├── 009.phpt │ │ │ ├── 009_ast_export.phpt │ │ │ ├── 011.phpt │ │ │ ├── 012.phpt │ │ │ ├── 017.phpt │ │ │ ├── 023.phpt │ │ │ ├── 024.phpt │ │ │ ├── 027.phpt │ │ │ ├── 028.phpt │ │ │ ├── 029.phpt │ │ │ ├── 030.phpt │ │ │ ├── 037.phpt │ │ │ ├── 038.phpt │ │ │ ├── 039.phpt │ │ │ ├── 040.phpt │ │ │ ├── 041.phpt │ │ │ ├── 042.phpt │ │ │ ├── 043.phpt │ │ │ ├── 044.phpt │ │ │ ├── 045.phpt │ │ │ ├── 046.phpt │ │ │ ├── 047.phpt │ │ │ ├── 049.phpt │ │ │ ├── gh11134.phpt │ │ │ ├── match_of_phi_optimization.phpt │ │ │ ├── match_scdf_cleanup.phpt │ │ │ └── unmatched_enum.phpt │ │ ├── memory_get_peak_usage.phpt │ │ ├── memory_reset_peak_usage.phpt │ │ ├── method_argument_binding.phpt │ │ ├── method_exists.phpt │ │ ├── method_exists_002.phpt │ │ ├── method_static_var.phpt │ │ ├── methods-on-non-objects-call-user-func.phpt │ │ ├── methods-on-non-objects-catch.phpt │ │ ├── methods-on-non-objects-usort.phpt │ │ ├── methods-on-non-objects.phpt │ │ ├── mod_001.phpt │ │ ├── modify_isref_value_return.phpt │ │ ├── mul_001.phpt │ │ ├── multibyte/ │ │ │ ├── bug68665.phpt │ │ │ ├── multibyte_encoding_001.phpt │ │ │ ├── multibyte_encoding_002.phpt │ │ │ ├── multibyte_encoding_003.phpt │ │ │ ├── multibyte_encoding_004.phpt │ │ │ ├── multibyte_encoding_005.phpt │ │ │ ├── multibyte_encoding_006.phpt │ │ │ └── multibyte_encoding_007.phpt │ │ ├── name_collision_01.phpt │ │ ├── name_collision_02.phpt │ │ ├── name_collision_03.phpt │ │ ├── name_collision_04.phpt │ │ ├── name_collision_05.phpt │ │ ├── name_collision_06.phpt │ │ ├── name_collision_07.phpt │ │ ├── name_collision_08.phpt │ │ ├── name_collision_09.phpt │ │ ├── named_params/ │ │ │ ├── __call.phpt │ │ │ ├── __invoke.phpt │ │ │ ├── assert.phpt │ │ │ ├── attributes.phpt │ │ │ ├── attributes_duplicate_named_param.phpt │ │ │ ├── attributes_named_flags.phpt │ │ │ ├── attributes_named_flags_incorrect.phpt │ │ │ ├── attributes_positional_after_named.phpt │ │ │ ├── backtrace.phpt │ │ │ ├── basic.phpt │ │ │ ├── call_user_func.phpt │ │ │ ├── call_user_func_array.phpt │ │ │ ├── call_user_func_array_variadic.phpt │ │ │ ├── cannot_pass_by_ref.phpt │ │ │ ├── ctor_extra_named_args.phpt │ │ │ ├── defaults.phpt │ │ │ ├── duplicate_param.phpt │ │ │ ├── func_get_args.phpt │ │ │ ├── gh17216.phpt │ │ │ ├── internal.phpt │ │ │ ├── internal_variadics.phpt │ │ │ ├── missing_param.phpt │ │ │ ├── positional_after_named.phpt │ │ │ ├── references.phpt │ │ │ ├── reserved.phpt │ │ │ ├── runtime_cache_init.phpt │ │ │ ├── undef_var.phpt │ │ │ ├── unknown_named_param.phpt │ │ │ ├── unpack.phpt │ │ │ ├── unpack_and_named_1.phpt │ │ │ ├── unpack_and_named_2.phpt │ │ │ └── variadic.phpt │ │ ├── namespace_first_stmt_nop.phpt │ │ ├── namespace_name_namespace.phpt │ │ ├── namespace_name_namespace_start.phpt │ │ ├── namespace_name_reserved_keywords.phpt │ │ ├── namespaced_name_whitespace.phpt │ │ ├── nested_method_and_function.phpt │ │ ├── new_args_without_ctor.phpt │ │ ├── new_oom.inc │ │ ├── new_oom.phpt │ │ ├── new_without_parentheses/ │ │ │ ├── anonymous_class_access.phpt │ │ │ ├── assign_to_new.phpt │ │ │ ├── garbage_collection.phpt │ │ │ ├── new_class_vs_function_with_same_name.phpt │ │ │ ├── new_with_ctor_arguments_parentheses.phpt │ │ │ ├── new_without_ctor_arguments_parentheses_array_access.phpt │ │ │ ├── new_without_ctor_arguments_parentheses_constant.phpt │ │ │ ├── new_without_ctor_arguments_parentheses_method.phpt │ │ │ ├── new_without_ctor_arguments_parentheses_property.phpt │ │ │ ├── new_without_ctor_arguments_parentheses_static_method.phpt │ │ │ ├── new_without_ctor_arguments_parentheses_static_property.phpt │ │ │ └── unset_new.phpt │ │ ├── no_class_const_propagation_in_closures.phpt │ │ ├── no_early_binding_if_already_declared.inc │ │ ├── no_early_binding_if_already_declared.phpt │ │ ├── not_001.phpt │ │ ├── not_002.phpt │ │ ├── nowdoc.inc │ │ ├── nowdoc_001.phpt │ │ ├── nowdoc_002.phpt │ │ ├── nowdoc_003.phpt │ │ ├── nowdoc_004.phpt │ │ ├── nowdoc_005.phpt │ │ ├── nowdoc_006.phpt │ │ ├── nowdoc_007.phpt │ │ ├── nowdoc_008.phpt │ │ ├── nowdoc_011.phpt │ │ ├── nowdoc_012.phpt │ │ ├── nowdoc_013.phpt │ │ ├── nowdoc_014.phpt │ │ ├── nowdoc_015.phpt │ │ ├── nowdoc_016.phpt │ │ ├── nowdoc_017.phpt │ │ ├── ns_001.phpt │ │ ├── ns_002.phpt │ │ ├── ns_003.phpt │ │ ├── ns_004.phpt │ │ ├── ns_005.phpt │ │ ├── ns_006.phpt │ │ ├── ns_007.phpt │ │ ├── ns_008.phpt │ │ ├── ns_009.phpt │ │ ├── ns_010.phpt │ │ ├── ns_011.phpt │ │ ├── ns_012.phpt │ │ ├── ns_013.phpt │ │ ├── ns_014.phpt │ │ ├── ns_015.phpt │ │ ├── ns_016.phpt │ │ ├── ns_017.phpt │ │ ├── ns_018.phpt │ │ ├── ns_019.phpt │ │ ├── ns_020.phpt │ │ ├── ns_021.phpt │ │ ├── ns_022.inc │ │ ├── ns_022.phpt │ │ ├── ns_023.phpt │ │ ├── ns_024.phpt │ │ ├── ns_025.phpt │ │ ├── ns_026.phpt │ │ ├── ns_027.inc │ │ ├── ns_027.phpt │ │ ├── ns_028.inc │ │ ├── ns_028.phpt │ │ ├── ns_029.phpt │ │ ├── ns_030.phpt │ │ ├── ns_031.phpt │ │ ├── ns_032.phpt │ │ ├── ns_033.phpt │ │ ├── ns_034.phpt │ │ ├── ns_035.phpt │ │ ├── ns_036.phpt │ │ ├── ns_037.phpt │ │ ├── ns_038.phpt │ │ ├── ns_039.phpt │ │ ├── ns_040.phpt │ │ ├── ns_041.phpt │ │ ├── ns_042.phpt │ │ ├── ns_043.phpt │ │ ├── ns_044.phpt │ │ ├── ns_045.phpt │ │ ├── ns_046.phpt │ │ ├── ns_047.phpt │ │ ├── ns_048.phpt │ │ ├── ns_049.phpt │ │ ├── ns_050.phpt │ │ ├── ns_051.phpt │ │ ├── ns_052.phpt │ │ ├── ns_053.phpt │ │ ├── ns_054.phpt │ │ ├── ns_055.phpt │ │ ├── ns_056.phpt │ │ ├── ns_057.phpt │ │ ├── ns_058.phpt │ │ ├── ns_059.phpt │ │ ├── ns_060.phpt │ │ ├── ns_061.phpt │ │ ├── ns_062.phpt │ │ ├── ns_063.phpt │ │ ├── ns_064.phpt │ │ ├── ns_065.inc │ │ ├── ns_065.phpt │ │ ├── ns_066.phpt │ │ ├── ns_067.inc │ │ ├── ns_067.phpt │ │ ├── ns_068.phpt │ │ ├── ns_069.inc │ │ ├── ns_069.phpt │ │ ├── ns_070.phpt │ │ ├── ns_071.phpt │ │ ├── ns_072.phpt │ │ ├── ns_073.phpt │ │ ├── ns_074.phpt │ │ ├── ns_075.phpt │ │ ├── ns_076.phpt │ │ ├── ns_077_1.phpt │ │ ├── ns_077_2.phpt │ │ ├── ns_077_3.phpt │ │ ├── ns_077_4.phpt │ │ ├── ns_077_5.phpt │ │ ├── ns_077_7.phpt │ │ ├── ns_077_8.phpt │ │ ├── ns_078.phpt │ │ ├── ns_079.phpt │ │ ├── ns_080.phpt │ │ ├── ns_081.phpt │ │ ├── ns_082.phpt │ │ ├── ns_083.phpt │ │ ├── ns_084.phpt │ │ ├── ns_085.phpt │ │ ├── ns_086.phpt │ │ ├── ns_087.phpt │ │ ├── ns_088.phpt │ │ ├── ns_089.phpt │ │ ├── ns_090.phpt │ │ ├── ns_091.phpt │ │ ├── ns_092.phpt │ │ ├── ns_093.phpt │ │ ├── ns_094.phpt │ │ ├── ns_095.phpt │ │ ├── ns_096.phpt │ │ ├── ns_trailing_comma_01.phpt │ │ ├── ns_trailing_comma_02.phpt │ │ ├── ns_trailing_comma_error_01.phpt │ │ ├── ns_trailing_comma_error_02.phpt │ │ ├── ns_trailing_comma_error_03.phpt │ │ ├── ns_trailing_comma_error_04.phpt │ │ ├── ns_trailing_comma_error_05.phpt │ │ ├── ns_trailing_comma_error_06.phpt │ │ ├── ns_trailing_comma_error_07.phpt │ │ ├── ns_trailing_comma_error_08.phpt │ │ ├── null_to_non_nullable_special_func.phpt │ │ ├── nullable_types/ │ │ │ ├── array.phpt │ │ │ ├── contravariant_nullable_param_succeeds.phpt │ │ │ ├── contravariant_nullable_return_fails.phpt │ │ │ ├── covariant_nullable_param_fails.phpt │ │ │ ├── covariant_nullable_return_succeds.phpt │ │ │ ├── float.phpt │ │ │ ├── int.phpt │ │ │ ├── invariant_param_and_return_succeeds.phpt │ │ │ ├── nullable_type_parameters_do_not_have_default_value.phpt │ │ │ ├── string.phpt │ │ │ └── union_nullable_property_fails.phpt │ │ ├── nullsafe_operator/ │ │ │ ├── 001.phpt │ │ │ ├── 002.phpt │ │ │ ├── 003.phpt │ │ │ ├── 004.phpt │ │ │ ├── 005.phpt │ │ │ ├── 006.phpt │ │ │ ├── 007.phpt │ │ │ ├── 008.phpt │ │ │ ├── 009.phpt │ │ │ ├── 010.phpt │ │ │ ├── 011.phpt │ │ │ ├── 012.phpt │ │ │ ├── 013.phpt │ │ │ ├── 014.phpt │ │ │ ├── 015.phpt │ │ │ ├── 016.phpt │ │ │ ├── 017.phpt │ │ │ ├── 018.phpt │ │ │ ├── 019.phpt │ │ │ ├── 020.phpt │ │ │ ├── 021.phpt │ │ │ ├── 022.phpt │ │ │ ├── 023.phpt │ │ │ ├── 024.phpt │ │ │ ├── 025.phpt │ │ │ ├── 026.phpt │ │ │ ├── 027.phpt │ │ │ ├── 028.phpt │ │ │ ├── 029.phpt │ │ │ ├── 030.phpt │ │ │ ├── 031.phpt │ │ │ ├── 032.phpt │ │ │ ├── 033.phpt │ │ │ ├── 034.phpt │ │ │ ├── 035.phpt │ │ │ ├── 036.phpt │ │ │ ├── 037.phpt │ │ │ ├── 038.phpt │ │ │ ├── 039.phpt │ │ │ ├── 040.phpt │ │ │ ├── constant_propagation.phpt │ │ │ └── gh8661.phpt │ │ ├── number_or_str_zpp.phpt │ │ ├── numeric_literal_separator_001.phpt │ │ ├── numeric_literal_separator_002.phpt │ │ ├── numeric_literal_separator_003.phpt │ │ ├── numeric_literal_separator_004.phpt │ │ ├── numeric_literal_separator_005.phpt │ │ ├── numeric_literal_separator_006.phpt │ │ ├── numeric_literal_separator_007.phpt │ │ ├── numeric_literal_separator_008.phpt │ │ ├── numeric_literal_separator_009.phpt │ │ ├── numeric_strings/ │ │ │ ├── array_offset.phpt │ │ │ ├── explicit_cast_leading_numeric_must_work.phpt │ │ │ ├── invalid_numeric_string_must_generate_warning_assign.phpt │ │ │ ├── invalid_numeric_strings_must_generate_warning.phpt │ │ │ ├── neg_num_string.phpt │ │ │ ├── oss_fuzz_427814456.phpt │ │ │ ├── string_offset.phpt │ │ │ └── trailling_whitespaces.phpt │ │ ├── object-null.phpt │ │ ├── object_array_cast.phpt │ │ ├── object_gc_in_shutdown.phpt │ │ ├── object_handlers.phpt │ │ ├── object_property_ref_incdec.phpt │ │ ├── object_types/ │ │ │ ├── invalid_default_value.phpt │ │ │ ├── missing_return_type_inheritance_in_class.phpt │ │ │ ├── missing_return_type_inheritance_in_interface.phpt │ │ │ ├── return_type_in_class.phpt │ │ │ ├── return_type_in_function.phpt │ │ │ ├── return_type_inheritance_in_class.phpt │ │ │ ├── return_type_inheritance_in_interface.phpt │ │ │ ├── return_type_reflection.phpt │ │ │ ├── type_hint_in_class_method.phpt │ │ │ ├── type_hint_in_function.phpt │ │ │ └── type_hint_reflection.phpt │ │ ├── objects_001.phpt │ │ ├── objects_002.phpt │ │ ├── objects_003.phpt │ │ ├── objects_004.phpt │ │ ├── objects_005.phpt │ │ ├── objects_006.phpt │ │ ├── objects_007.phpt │ │ ├── objects_008.phpt │ │ ├── objects_009.phpt │ │ ├── objects_010.phpt │ │ ├── objects_011.phpt │ │ ├── objects_012.phpt │ │ ├── objects_013.phpt │ │ ├── objects_014.phpt │ │ ├── objects_015.phpt │ │ ├── objects_017.phpt │ │ ├── objects_018.phpt │ │ ├── objects_019.phpt │ │ ├── objects_021.phpt │ │ ├── objects_022.phpt │ │ ├── objects_023.phpt │ │ ├── objects_024.phpt │ │ ├── objects_025.phpt │ │ ├── objects_026.phpt │ │ ├── objects_027.phpt │ │ ├── objects_028.phpt │ │ ├── objects_029.phpt │ │ ├── objects_030.phpt │ │ ├── objects_031.phpt │ │ ├── objects_032.phpt │ │ ├── objects_033.phpt │ │ ├── objects_034.phpt │ │ ├── objects_035.phpt │ │ ├── oct_overflow.phpt │ │ ├── oct_overflow_char.phpt │ │ ├── oct_whitespace.phpt │ │ ├── offset_array.phpt │ │ ├── offset_assign.phpt │ │ ├── offset_bool.phpt │ │ ├── offset_long.phpt │ │ ├── offset_null.phpt │ │ ├── offset_object.phpt │ │ ├── offset_string.phpt │ │ ├── offsets/ │ │ │ ├── ArrayAccess_container_offset_behaviour.phpt │ │ │ ├── ArrayObject_container_offset_behaviour.phpt │ │ │ ├── appending_containers.phpt │ │ │ ├── appending_containers_in_fetch.phpt │ │ │ ├── array_container_offset_behaviour.phpt │ │ │ ├── false_container_offset_behaviour.phpt │ │ │ ├── internal_handlers.phpt │ │ │ ├── internal_handlers_extended.phpt │ │ │ ├── invalid_container_offset_behaviour.phpt │ │ │ ├── null_container_offset_behaviour.phpt │ │ │ ├── object_container_offset_behaviour.phpt │ │ │ ├── reference_containers_appended.phpt │ │ │ ├── runtime_compile_time_offset_access.phpt │ │ │ ├── string_container_offset_behaviour.phpt │ │ │ ├── test_offset_helpers.inc │ │ │ └── test_variable_offsets.inc │ │ ├── operator_unsupported_types.phpt │ │ ├── or_001.phpt │ │ ├── oss-fuzz-391975641.phpt │ │ ├── oss-fuzz-403816122.phpt │ │ ├── oss-fuzz-69765.phpt │ │ ├── oss_fuzz_417078295.phpt │ │ ├── oss_fuzz_434346548.phpt │ │ ├── oss_fuzz_54325.phpt │ │ ├── oss_fuzz_57821.phpt │ │ ├── oss_fuzz_58181.phpt │ │ ├── oss_fuzz_59764.phpt │ │ ├── oss_fuzz_60011_1.phpt │ │ ├── oss_fuzz_60011_2.phpt │ │ ├── oss_fuzz_60441.phpt │ │ ├── oss_fuzz_60741.phpt │ │ ├── oss_fuzz_61712.phpt │ │ ├── oss_fuzz_61712b.phpt │ │ ├── oss_fuzz_63802.phpt │ │ ├── oss_fuzz_64209.phpt │ │ ├── output_started_at_eval.phpt │ │ ├── overloaded_assign_prop_return_value.phpt │ │ ├── overloaded_func_001.phpt │ │ ├── overloaded_func_002.phpt │ │ ├── overloaded_prop_assign_op_refs.phpt │ │ ├── parameter_default_values/ │ │ │ ├── internal_declaration_error_class_const.phpt │ │ │ ├── internal_declaration_error_const.phpt │ │ │ ├── internal_declaration_error_false.phpt │ │ │ ├── internal_declaration_error_int.phpt │ │ │ ├── internal_declaration_error_null.phpt │ │ │ ├── userland_declaration_error_class_const.phpt │ │ │ └── userland_declaration_error_const.phpt │ │ ├── parent_class_name_without_parent.phpt │ │ ├── php_tag_only.inc │ │ ├── php_tag_only.phpt │ │ ├── post_inc_without_use.phpt │ │ ├── pow_array_leak.phpt │ │ ├── pow_ref.phpt │ │ ├── prop_const_expr/ │ │ │ ├── attributes.phpt │ │ │ ├── basic.phpt │ │ │ ├── basic_nullsafe.phpt │ │ │ ├── class_const.phpt │ │ │ ├── default_args.phpt │ │ │ ├── enum_initializer.phpt │ │ │ ├── lhs_class_not_found.phpt │ │ │ ├── lhs_class_not_found_nullsafe.phpt │ │ │ ├── lhs_non_object.phpt │ │ │ ├── non_enums.phpt │ │ │ ├── non_enums_catchable.phpt │ │ │ ├── non_enums_cost.phpt │ │ │ ├── non_enums_nullsafe.phpt │ │ │ ├── non_enums_rhs.phpt │ │ │ ├── property_initializer.phpt │ │ │ ├── rhs_object.phpt │ │ │ ├── rhs_object_nullsafe.phpt │ │ │ ├── rhs_prop_not_found.phpt │ │ │ ├── static_initalizer.phpt │ │ │ └── static_property_initializer.phpt │ │ ├── property_access_errors_for_guarded_properties.phpt │ │ ├── property_exists.phpt │ │ ├── property_guard_hash_val.phpt │ │ ├── property_hooks/ │ │ │ ├── abstract_get_set_readonly.phpt │ │ │ ├── abstract_hook.phpt │ │ │ ├── abstract_hook_in_non_abstract_class.phpt │ │ │ ├── abstract_hook_not_implemented.phpt │ │ │ ├── abstract_prop_final.phpt │ │ │ ├── abstract_prop_hooks.phpt │ │ │ ├── abstract_prop_not_implemented.phpt │ │ │ ├── abstract_prop_plain.phpt │ │ │ ├── abstract_prop_without_hooks.phpt │ │ │ ├── array_access.phpt │ │ │ ├── ast_printing.phpt │ │ │ ├── attributes.phpt │ │ │ ├── backed_delegated_read_wirte.phpt │ │ │ ├── backed_implicit_get.phpt │ │ │ ├── backed_implicit_set.phpt │ │ │ ├── backed_invariant.phpt │ │ │ ├── backing_value_simple.phpt │ │ │ ├── bug001.phpt │ │ │ ├── bug002.phpt │ │ │ ├── bug003.phpt │ │ │ ├── bug004.phpt │ │ │ ├── bug005.phpt │ │ │ ├── bug006.phpt │ │ │ ├── bug007.phpt │ │ │ ├── bug008.phpt │ │ │ ├── bug009.phpt │ │ │ ├── cache.phpt │ │ │ ├── cpp.phpt │ │ │ ├── default_on_hooks.phpt │ │ │ ├── default_on_virtual.phpt │ │ │ ├── default_on_virtual_with_inheritance.phpt │ │ │ ├── default_value_inheritance.phpt │ │ │ ├── direct_hook_call.phpt │ │ │ ├── dump.phpt │ │ │ ├── duplicate_hook.phpt │ │ │ ├── explicit_iter.phpt │ │ │ ├── explicit_set_value_parameter.phpt │ │ │ ├── explicit_set_value_parameter_type.phpt │ │ │ ├── field_assign.phpt │ │ │ ├── field_guard.phpt │ │ │ ├── final.phpt │ │ │ ├── final_private_prop.phpt │ │ │ ├── final_prop.phpt │ │ │ ├── final_prop_2.phpt │ │ │ ├── final_prop_final_hook.phpt │ │ │ ├── find_property_usage.phpt │ │ │ ├── foreach.phpt │ │ │ ├── foreach_002.phpt │ │ │ ├── foreach_val_to_ref.phpt │ │ │ ├── generator_hook.phpt │ │ │ ├── generator_hook_002.phpt │ │ │ ├── get.phpt │ │ │ ├── get_by_ref.phpt │ │ │ ├── get_by_ref_auto.phpt │ │ │ ├── get_by_ref_backed.phpt │ │ │ ├── get_by_ref_implemented_by_plain.phpt │ │ │ ├── get_by_ref_implemented_by_val.phpt │ │ │ ├── get_by_ref_virtual.phpt │ │ │ ├── get_type_check.phpt │ │ │ ├── gh15140.phpt │ │ │ ├── gh15187_1.phpt │ │ │ ├── gh15187_2.phpt │ │ │ ├── gh15187_3.phpt │ │ │ ├── gh15419_1.phpt │ │ │ ├── gh15419_2.phpt │ │ │ ├── gh15438_1.phpt │ │ │ ├── gh15438_2.phpt │ │ │ ├── gh15456.phpt │ │ │ ├── gh15644.phpt │ │ │ ├── gh16040.phpt │ │ │ ├── gh16185.phpt │ │ │ ├── gh16185_002.phpt │ │ │ ├── gh17101.phpt │ │ │ ├── gh17200.phpt │ │ │ ├── gh17234.phpt │ │ │ ├── gh17376.phpt │ │ │ ├── gh17988.phpt │ │ │ ├── gh18000.phpt │ │ │ ├── gh18268.phpt │ │ │ ├── gh19044-1.phpt │ │ │ ├── gh19044-2.phpt │ │ │ ├── gh19044-3.phpt │ │ │ ├── gh19044-4.phpt │ │ │ ├── gh19044-5.phpt │ │ │ ├── gh19044-6.phpt │ │ │ ├── gh19044-8.phpt │ │ │ ├── hooked_with_magic_method.phpt │ │ │ ├── indirect_modification.phpt │ │ │ ├── inheritance.phpt │ │ │ ├── interface.phpt │ │ │ ├── interface_explicit_abstract.phpt │ │ │ ├── interface_final_hook.phpt │ │ │ ├── interface_final_prop.phpt │ │ │ ├── interface_get_by_ref_backed.phpt │ │ │ ├── interface_get_by_ref_plain.phpt │ │ │ ├── interface_get_by_ref_virtual.phpt │ │ │ ├── interface_get_only.phpt │ │ │ ├── interface_get_only_readonly.phpt │ │ │ ├── interface_get_set_readonly.phpt │ │ │ ├── interface_get_value_as_ref.phpt │ │ │ ├── interface_invalid_explicitly_abstract.phpt │ │ │ ├── interface_not_implemented.phpt │ │ │ ├── interface_not_public.phpt │ │ │ ├── interface_set_only.phpt │ │ │ ├── invalid_abstract.phpt │ │ │ ├── invalid_abstract_body.phpt │ │ │ ├── invalid_abstract_final.phpt │ │ │ ├── invalid_abstract_indirect.phpt │ │ │ ├── invalid_abstract_indirect_2.phpt │ │ │ ├── invalid_abstract_private.phpt │ │ │ ├── invalid_empty_hooks.phpt │ │ │ ├── invalid_final_private.phpt │ │ │ ├── invalid_hook_visibility.phpt │ │ │ ├── invalid_static.phpt │ │ │ ├── invalid_static_prop.phpt │ │ │ ├── isset.phpt │ │ │ ├── magic_consts.phpt │ │ │ ├── magic_interaction.phpt │ │ │ ├── magic_method_from_hooked.phpt │ │ │ ├── multi_level_inheritance.phpt │ │ │ ├── no_default_value_untyped_001.phpt │ │ │ ├── no_default_value_untyped_002.phpt │ │ │ ├── no_get_parameters.phpt │ │ │ ├── object_in_hook.phpt │ │ │ ├── oss-fuzz-382922236.phpt │ │ │ ├── oss_fuzz_403308724.phpt │ │ │ ├── override_add_get.phpt │ │ │ ├── override_add_get_contravariant.phpt │ │ │ ├── override_add_set.phpt │ │ │ ├── override_add_set_covariant.phpt │ │ │ ├── override_attribute_backed.phpt │ │ │ ├── override_attribute_fail.phpt │ │ │ ├── override_attribute_plain.phpt │ │ │ ├── override_attribute_virtual.phpt │ │ │ ├── override_by_plain_prop.phpt │ │ │ ├── override_default_value.phpt │ │ │ ├── override_implicit_with_explicit.phpt │ │ │ ├── override_plain_set.phpt │ │ │ ├── parameter_attributes.phpt │ │ │ ├── parent_get.phpt │ │ │ ├── parent_get_ci.phpt │ │ │ ├── parent_get_in_class_with_no_parent.phpt │ │ │ ├── parent_get_not_in_class.phpt │ │ │ ├── parent_get_plain.phpt │ │ │ ├── parent_get_plain_typed_uninitialized.phpt │ │ │ ├── parent_get_plain_untyped_uninitialized.phpt │ │ │ ├── parent_get_plain_zpp.phpt │ │ │ ├── parent_get_rw.phpt │ │ │ ├── parent_get_undefined_property.phpt │ │ │ ├── parent_in_different_hook.phpt │ │ │ ├── parent_in_different_property.phpt │ │ │ ├── parent_outside_property.phpt │ │ │ ├── parent_set.phpt │ │ │ ├── parent_set_plain.phpt │ │ │ ├── parent_set_plain_zpp.phpt │ │ │ ├── parent_superfluous_args.phpt │ │ │ ├── parent_syntax.phpt │ │ │ ├── parent_wrong_property_info.phpt │ │ │ ├── plain_to_hook.phpt │ │ │ ├── private_override.phpt │ │ │ ├── private_prop_final_hook.phpt │ │ │ ├── property_access_within_closure.phpt │ │ │ ├── property_const.phpt │ │ │ ├── property_const_nested.phpt │ │ │ ├── property_promotion.phpt │ │ │ ├── protected_to_public.phpt │ │ │ ├── read_sibling_backing_value.phpt │ │ │ ├── readonly.phpt │ │ │ ├── recursion.phpt │ │ │ ├── set.phpt │ │ │ ├── set_by_ref.phpt │ │ │ ├── set_shorthand.phpt │ │ │ ├── set_value_parameter_type_variance_001.phpt │ │ │ ├── set_value_parameter_type_variance_002.phpt │ │ │ ├── set_value_parameter_type_variance_003.phpt │ │ │ ├── set_value_parameter_type_variance_004.inc │ │ │ ├── set_value_parameter_type_variance_004.phpt │ │ │ ├── set_value_parameter_type_variance_005.phpt │ │ │ ├── set_value_parameter_type_variance_006.phpt │ │ │ ├── set_value_parameter_type_variance_007.phpt │ │ │ ├── set_variadic.phpt │ │ │ ├── static_variables.phpt │ │ │ ├── syntax.phpt │ │ │ ├── trait_scope.phpt │ │ │ ├── traits.phpt │ │ │ ├── traits_abstract.phpt │ │ │ ├── traits_conflict.phpt │ │ │ ├── type_compatibility.phpt │ │ │ ├── type_compatibility_invalid.phpt │ │ │ ├── type_compatibility_invalid_2.phpt │ │ │ ├── unknown_hook.phpt │ │ │ ├── unknown_hook_private.phpt │ │ │ ├── unserialize.phpt │ │ │ ├── unset.phpt │ │ │ ├── update_constants_virtual_prop.phpt │ │ │ ├── var_property.phpt │ │ │ └── virtual_read_write.phpt │ │ ├── prototype_range.phpt │ │ ├── qm_assign_ref_unwrap_leak.phpt │ │ ├── readonly_classes/ │ │ │ ├── gh9285_error.phpt │ │ │ ├── gh9285_success.phpt │ │ │ ├── readonly_class_duplicated_modifier.phpt │ │ │ ├── readonly_class_dynamic_property.phpt │ │ │ ├── readonly_class_dynamic_property_attribute.phpt │ │ │ ├── readonly_class_final_modifier.phpt │ │ │ ├── readonly_class_inheritance_error1.phpt │ │ │ ├── readonly_class_inheritance_error2.phpt │ │ │ ├── readonly_class_inheritance_success.phpt │ │ │ ├── readonly_class_missing_type1.phpt │ │ │ ├── readonly_class_missing_type2.phpt │ │ │ ├── readonly_class_property1.phpt │ │ │ ├── readonly_class_property2.phpt │ │ │ ├── readonly_class_property3.phpt │ │ │ ├── readonly_class_unserialize_error.phpt │ │ │ ├── readonly_enum.phpt │ │ │ ├── readonly_interface.phpt │ │ │ └── readonly_trait.phpt │ │ ├── readonly_function.phpt │ │ ├── readonly_props/ │ │ │ ├── array_append_initialization.phpt │ │ │ ├── by_ref_foreach.phpt │ │ │ ├── cache_slot.phpt │ │ │ ├── gh7942.phpt │ │ │ ├── initialization_scope.phpt │ │ │ ├── magic_get_set.phpt │ │ │ ├── multiple_modifiers.phpt │ │ │ ├── override_with_attributes.phpt │ │ │ ├── promotion.phpt │ │ │ ├── promotion_error1.phpt │ │ │ ├── public_set_non_readonly.phpt │ │ │ ├── readonly_assign_no_sideeffect.phpt │ │ │ ├── readonly_clone_error1.phpt │ │ │ ├── readonly_clone_error2.phpt │ │ │ ├── readonly_clone_error3.phpt │ │ │ ├── readonly_clone_error4.phpt │ │ │ ├── readonly_clone_error5.phpt │ │ │ ├── readonly_clone_error6.phpt │ │ │ ├── readonly_clone_error7.phpt │ │ │ ├── readonly_clone_success1.phpt │ │ │ ├── readonly_clone_success2.phpt │ │ │ ├── readonly_clone_success4.phpt │ │ │ ├── readonly_coercion_type_error.phpt │ │ │ ├── readonly_const.phpt │ │ │ ├── readonly_containing_object.phpt │ │ │ ├── readonly_method.phpt │ │ │ ├── readonly_method_trait.phpt │ │ │ ├── readonly_modification.phpt │ │ │ ├── readonly_to_readwrite.phpt │ │ │ ├── readonly_trait_match.phpt │ │ │ ├── readonly_trait_mismatch.phpt │ │ │ ├── readonly_with_default.phpt │ │ │ ├── readonly_without_type.phpt │ │ │ ├── readwrite_to_readonly.phpt │ │ │ ├── serialization.phpt │ │ │ ├── static.phpt │ │ │ ├── unset.phpt │ │ │ ├── variation.phpt │ │ │ ├── variation_nested.phpt │ │ │ └── visibility_change.phpt │ │ ├── real_cast.phpt │ │ ├── record_errors_001.phpt │ │ ├── recursive_array_comparison.phpt │ │ ├── recursive_debug_info.phpt │ │ ├── recv_init_ref_type.phpt │ │ ├── register_shutdown_function_refcount.phpt │ │ ├── remove_predecessor_of_pi_node.phpt │ │ ├── replace_pred_pi_node.phpt │ │ ├── require_once_warning_to_exception.phpt │ │ ├── require_parse_exception.phpt │ │ ├── required_param_after_optional.phpt │ │ ├── required_param_after_optional_named_args.phpt │ │ ├── resource_key.phpt │ │ ├── restore_error_reporting.phpt │ │ ├── restrict_globals/ │ │ │ ├── globals_in_globals.phpt │ │ │ ├── invalid_append.phpt │ │ │ ├── invalid_append_isset.phpt │ │ │ ├── invalid_append_unset.phpt │ │ │ ├── invalid_assign.phpt │ │ │ ├── invalid_assign_list.phpt │ │ │ ├── invalid_assign_list_ref.phpt │ │ │ ├── invalid_assign_op.phpt │ │ │ ├── invalid_assign_ref_lhs.phpt │ │ │ ├── invalid_assign_ref_rhs.phpt │ │ │ ├── invalid_foreach.phpt │ │ │ ├── invalid_foreach_ref.phpt │ │ │ ├── invalid_pass_by_ref.phpt │ │ │ ├── invalid_unset.phpt │ │ │ ├── key_canonicalization.phpt │ │ │ └── valid.phpt │ │ ├── result_unused.phpt │ │ ├── return_by_ref_from_void_function.phpt │ │ ├── return_ref_none.phpt │ │ ├── return_types/ │ │ │ ├── 001.phpt │ │ │ ├── 002.phpt │ │ │ ├── 003.phpt │ │ │ ├── 004.phpt │ │ │ ├── 005.phpt │ │ │ ├── 006.phpt │ │ │ ├── 007.phpt │ │ │ ├── 008.phpt │ │ │ ├── 009.phpt │ │ │ ├── 010.phpt │ │ │ ├── 011.phpt │ │ │ ├── 012.phpt │ │ │ ├── 013.phpt │ │ │ ├── 014.phpt │ │ │ ├── 015.phpt │ │ │ ├── 016.phpt │ │ │ ├── 017.phpt │ │ │ ├── 018.phpt │ │ │ ├── 019.phpt │ │ │ ├── 020.phpt │ │ │ ├── 021.phpt │ │ │ ├── 022.phpt │ │ │ ├── 024.phpt │ │ │ ├── 025.phpt │ │ │ ├── 026.phpt │ │ │ ├── 027.phpt │ │ │ ├── 028.phpt │ │ │ ├── 029.phpt │ │ │ ├── 030.phpt │ │ │ ├── 031.phpt │ │ │ ├── 032.phpt │ │ │ ├── 033.phpt │ │ │ ├── 034.phpt │ │ │ ├── 035.phpt │ │ │ ├── 036.phpt │ │ │ ├── 037.phpt │ │ │ ├── 038.phpt │ │ │ ├── 039.phpt │ │ │ ├── 040.phpt │ │ │ ├── 041.phpt │ │ │ ├── 042.phpt │ │ │ ├── 043.phpt │ │ │ ├── 044.phpt │ │ │ ├── bug70557.phpt │ │ │ ├── bug71092.phpt │ │ │ ├── bug71978.phpt │ │ │ ├── classes.php.inc │ │ │ ├── generators001.phpt │ │ │ ├── generators002.phpt │ │ │ ├── generators003.phpt │ │ │ ├── generators004.phpt │ │ │ ├── generators005.phpt │ │ │ ├── generators006.phpt │ │ │ ├── inheritance001.phpt │ │ │ ├── inheritance002.phpt │ │ │ ├── inheritance003.phpt │ │ │ ├── inheritance004.phpt │ │ │ ├── inheritance005.phpt │ │ │ ├── inheritance006.phpt │ │ │ ├── inheritance007.phpt │ │ │ ├── inheritance008.phpt │ │ │ ├── inheritance009.phpt │ │ │ ├── internal_functions001.phpt │ │ │ ├── internal_functions002.phpt │ │ │ ├── internal_functions003.phpt │ │ │ ├── never_allowed.phpt │ │ │ ├── never_covariance.phpt │ │ │ ├── never_disallowed1.phpt │ │ │ ├── never_disallowed2.phpt │ │ │ ├── never_disallowed3.phpt │ │ │ ├── never_disallowed4.phpt │ │ │ ├── never_disallowed5.phpt │ │ │ ├── never_finally_return.phpt │ │ │ ├── never_generator.phpt │ │ │ ├── never_no_variance.phpt │ │ │ ├── never_parameter.phpt │ │ │ ├── never_reflected.phpt │ │ │ ├── never_return_throw.phpt │ │ │ ├── never_tostring.phpt │ │ │ ├── reflection001.phpt │ │ │ ├── return_reference_separation.phpt │ │ │ ├── rfc001.phpt │ │ │ ├── rfc002.phpt │ │ │ ├── rfc003.phpt │ │ │ ├── rfc004.phpt │ │ │ ├── void_allowed.phpt │ │ │ ├── void_disallowed1.phpt │ │ │ ├── void_disallowed2.phpt │ │ │ ├── void_disallowed3.phpt │ │ │ └── void_parameter.phpt │ │ ├── rope_with_exception.phpt │ │ ├── runtime_compile_time_binary_operands.phpt │ │ ├── selfParent_001.phpt │ │ ├── selfParent_002.phpt │ │ ├── self_and.phpt │ │ ├── self_class_const_in_unknown_scope.phpt │ │ ├── self_class_const_outside_class.phpt │ │ ├── self_in_eval.phpt │ │ ├── self_instanceof_outside_class.phpt │ │ ├── self_method_or_prop_outside_class.phpt │ │ ├── self_mod.phpt │ │ ├── self_or.phpt │ │ ├── self_xor.phpt │ │ ├── serializable_deprecation.phpt │ │ ├── settype_array.phpt │ │ ├── settype_bool.phpt │ │ ├── settype_double.phpt │ │ ├── settype_int.phpt │ │ ├── settype_null.phpt │ │ ├── settype_object.phpt │ │ ├── settype_resource.phpt │ │ ├── settype_string.phpt │ │ ├── shift_001.phpt │ │ ├── shift_002.phpt │ │ ├── short_echo_as_identifier.phpt │ │ ├── special_name_error2.phpt │ │ ├── special_name_error3.phpt │ │ ├── stack_limit/ │ │ │ ├── gh16041_001.phpt │ │ │ ├── gh16041_002.phpt │ │ │ ├── stack_limit_001.phpt │ │ │ ├── stack_limit_002.phpt │ │ │ ├── stack_limit_003.phpt │ │ │ ├── stack_limit_004.phpt │ │ │ ├── stack_limit_005.phpt │ │ │ ├── stack_limit_006.phpt │ │ │ ├── stack_limit_007.phpt │ │ │ ├── stack_limit_008.phpt │ │ │ ├── stack_limit_009.phpt │ │ │ ├── stack_limit_010.phpt │ │ │ ├── stack_limit_011.phpt │ │ │ ├── stack_limit_012.inc │ │ │ ├── stack_limit_012.phpt │ │ │ ├── stack_limit_013.inc │ │ │ ├── stack_limit_013.phpt │ │ │ ├── stack_limit_014.inc │ │ │ ├── stack_limit_014.phpt │ │ │ └── stack_limit_015.phpt │ │ ├── static_in_trait_insteadof_list.phpt │ │ ├── static_in_trait_insteadof_reference.phpt │ │ ├── static_method_non_existing_class.phpt │ │ ├── static_variable.phpt │ │ ├── static_variable_func_call.phpt │ │ ├── static_variable_in_dynamic_function.phpt │ │ ├── static_variable_in_dynamic_function_2.phpt │ │ ├── static_variable_in_private_method.phpt │ │ ├── static_variable_in_private_trait_method.phpt │ │ ├── static_variables_closure_bind.phpt │ │ ├── static_variables_destructor.phpt │ │ ├── static_variables_global.phpt │ │ ├── static_variables_global_2.phpt │ │ ├── static_variables_recursive.phpt │ │ ├── static_variables_throwing_initializer.phpt │ │ ├── static_variables_traits.phpt │ │ ├── str_offset_001.phpt │ │ ├── str_offset_002.phpt │ │ ├── str_offset_003.phpt │ │ ├── str_offset_004.phpt │ │ ├── str_offset_005.phpt │ │ ├── str_offset_006.phpt │ │ ├── str_offset_007.phpt │ │ ├── str_offset_008.phpt │ │ ├── str_or_obj_of_class_zpp.phpt │ │ ├── str_or_obj_zpp.phpt │ │ ├── strict_001.phpt │ │ ├── strict_002.phpt │ │ ├── string_offset_as_object.phpt │ │ ├── string_offset_errors.phpt │ │ ├── string_offset_int_min_max.phpt │ │ ├── string_offset_optimization.phpt │ │ ├── string_to_number_comparison.phpt │ │ ├── stringable_automatic_implementation.phpt │ │ ├── stringable_internal_class.phpt │ │ ├── stringable_trait.phpt │ │ ├── stringable_trait_invalid.phpt │ │ ├── strlen.phpt │ │ ├── strlen_deprecation_to_exception.phpt │ │ ├── sub_001.phpt │ │ ├── switch_on_numeric_strings.phpt │ │ ├── symtable_cache_recursive_dtor.phpt │ │ ├── temporary_cleaning_001.phpt │ │ ├── temporary_cleaning_002.phpt │ │ ├── temporary_cleaning_003.phpt │ │ ├── temporary_cleaning_004.phpt │ │ ├── temporary_cleaning_005.phpt │ │ ├── temporary_cleaning_006.phpt │ │ ├── temporary_cleaning_007.phpt │ │ ├── temporary_cleaning_008.phpt │ │ ├── temporary_cleaning_009.phpt │ │ ├── temporary_cleaning_010.phpt │ │ ├── temporary_cleaning_011.phpt │ │ ├── temporary_cleaning_012.phpt │ │ ├── temporary_cleaning_013.phpt │ │ ├── temporary_cleaning_014.phpt │ │ ├── temporary_cleaning_015.phpt │ │ ├── temporary_cleaning_016.phpt │ │ ├── temporary_cleaning_017.phpt │ │ ├── tentative_type_early_binding.phpt │ │ ├── ternary_associativity.phpt │ │ ├── ternary_associativity_1.phpt │ │ ├── ternary_associativity_2.phpt │ │ ├── ternary_associativity_3.phpt │ │ ├── this_as_global.phpt │ │ ├── this_as_lexical_var_error.phpt │ │ ├── this_as_parameter.phpt │ │ ├── this_as_static.phpt │ │ ├── this_in_catch.phpt │ │ ├── this_in_eval.phpt │ │ ├── this_in_extract.phpt │ │ ├── this_in_foreach_001.phpt │ │ ├── this_in_foreach_002.phpt │ │ ├── this_in_foreach_003.phpt │ │ ├── this_in_foreach_004.phpt │ │ ├── this_in_isset.phpt │ │ ├── this_in_unset.phpt │ │ ├── this_reassign.phpt │ │ ├── throw/ │ │ │ ├── 001.phpt │ │ │ ├── 002.phpt │ │ │ ├── exit_in_finally.phpt │ │ │ └── leaks.phpt │ │ ├── throw_reference.phpt │ │ ├── throwable_001.phpt │ │ ├── throwable_002.phpt │ │ ├── throwable_003.phpt │ │ ├── throwing_overloaded_compound_assign_op.phpt │ │ ├── trait_exists_001.phpt │ │ ├── trait_exists_002.phpt │ │ ├── trait_exists_003.phpt │ │ ├── trait_type_errors.phpt │ │ ├── traits/ │ │ │ ├── abstract_method_1.phpt │ │ │ ├── abstract_method_10.phpt │ │ │ ├── abstract_method_2.phpt │ │ │ ├── abstract_method_3.phpt │ │ │ ├── abstract_method_4.phpt │ │ │ ├── abstract_method_5.phpt │ │ │ ├── abstract_method_6.phpt │ │ │ ├── abstract_method_7.phpt │ │ │ ├── abstract_method_8.phpt │ │ │ ├── abstract_method_9.phpt │ │ │ ├── bug54441.phpt │ │ │ ├── bug55137.phpt │ │ │ ├── bug55214.phpt │ │ │ ├── bug55355.phpt │ │ │ ├── bug55372.phpt │ │ │ ├── bug55424.phpt │ │ │ ├── bug55524.phpt │ │ │ ├── bug60145.phpt │ │ │ ├── bug60153.phpt │ │ │ ├── bug60165a.phpt │ │ │ ├── bug60165b.phpt │ │ │ ├── bug60165c.phpt │ │ │ ├── bug60165d.phpt │ │ │ ├── bug60173.phpt │ │ │ ├── bug60217a.phpt │ │ │ ├── bug60217b.phpt │ │ │ ├── bug60217c.phpt │ │ │ ├── bug60369.phpt │ │ │ ├── bug60717.phpt │ │ │ ├── bug60809.phpt │ │ │ ├── bug61052.phpt │ │ │ ├── bug61998.phpt │ │ │ ├── bug63911.phpt │ │ │ ├── bug64070.phpt │ │ │ ├── bug64235.phpt │ │ │ ├── bug64235b.phpt │ │ │ ├── bug65576a.phpt │ │ │ ├── bug65576b.phpt │ │ │ ├── bug69579.phpt │ │ │ ├── bug74607.phpt │ │ │ ├── bug74607a.phpt │ │ │ ├── bug74922.phpt │ │ │ ├── bug74922a.phpt │ │ │ ├── bug74922b.inc │ │ │ ├── bug74922b.phpt │ │ │ ├── bug74922c.phpt │ │ │ ├── bug75607.phpt │ │ │ ├── bug75607a.phpt │ │ │ ├── bug76539.phpt │ │ │ ├── bug76700.phpt │ │ │ ├── bug76773-deprecated.phpt │ │ │ ├── bug76773.phpt │ │ │ ├── bugs/ │ │ │ │ ├── abstract-methods01.phpt │ │ │ │ ├── abstract-methods02.phpt │ │ │ │ ├── abstract-methods03.phpt │ │ │ │ ├── abstract-methods04.phpt │ │ │ │ ├── abstract-methods05.phpt │ │ │ │ ├── abstract-methods06.phpt │ │ │ │ ├── alias-semantics.phpt │ │ │ │ ├── alias-semantics02.phpt │ │ │ │ ├── alias01.phpt │ │ │ │ ├── case-sensitive.phpt │ │ │ │ ├── gh13177.phpt │ │ │ │ ├── interfaces.phpt │ │ │ │ ├── missing-trait.phpt │ │ │ │ ├── overridding-conflicting-methods.phpt │ │ │ │ ├── overridding-conflicting-property-initializer.phpt │ │ │ │ └── overridding-static-property-with-doc-block.phpt │ │ │ ├── conflict001.phpt │ │ │ ├── conflict002.phpt │ │ │ ├── conflict003.phpt │ │ │ ├── constant_001.phpt │ │ │ ├── constant_002.phpt │ │ │ ├── constant_003.phpt │ │ │ ├── constant_004.phpt │ │ │ ├── constant_005.phpt │ │ │ ├── constant_006.phpt │ │ │ ├── constant_007.phpt │ │ │ ├── constant_008.phpt │ │ │ ├── constant_009.phpt │ │ │ ├── constant_010.phpt │ │ │ ├── constant_011.phpt │ │ │ ├── constant_012.phpt │ │ │ ├── constant_013.phpt │ │ │ ├── constant_014.phpt │ │ │ ├── constant_015.phpt │ │ │ ├── constant_016.phpt │ │ │ ├── constant_017.phpt │ │ │ ├── constant_018.phpt │ │ │ ├── constant_019.phpt │ │ │ ├── constant_020.phpt │ │ │ ├── constant_021.phpt │ │ │ ├── direct_static_member_access.phpt │ │ │ ├── error_001.phpt │ │ │ ├── error_002.phpt │ │ │ ├── error_003.phpt │ │ │ ├── error_004.phpt │ │ │ ├── error_005.phpt │ │ │ ├── error_006.phpt │ │ │ ├── error_007.phpt │ │ │ ├── error_008.phpt │ │ │ ├── error_009.phpt │ │ │ ├── error_010.phpt │ │ │ ├── error_011.phpt │ │ │ ├── error_012.phpt │ │ │ ├── error_013.phpt │ │ │ ├── error_014.phpt │ │ │ ├── error_015.phpt │ │ │ ├── error_016.phpt │ │ │ ├── flattening001.phpt │ │ │ ├── flattening002.phpt │ │ │ ├── flattening003.phpt │ │ │ ├── get_declared_traits_001.phpt │ │ │ ├── get_declared_traits_002.phpt │ │ │ ├── get_declared_traits_003.phpt │ │ │ ├── get_declared_traits_004.phpt │ │ │ ├── gh12854.phpt │ │ │ ├── inheritance001.phpt │ │ │ ├── inheritance002.phpt │ │ │ ├── inheritance003.phpt │ │ │ ├── interface_001.phpt │ │ │ ├── interface_002.phpt │ │ │ ├── interface_003.phpt │ │ │ ├── language001.phpt │ │ │ ├── language002.phpt │ │ │ ├── language003.phpt │ │ │ ├── language004.phpt │ │ │ ├── language005.phpt │ │ │ ├── language006.phpt │ │ │ ├── language007.phpt │ │ │ ├── language008a.phpt │ │ │ ├── language008b.phpt │ │ │ ├── language009.phpt │ │ │ ├── language010.phpt │ │ │ ├── language011.phpt │ │ │ ├── language012.phpt │ │ │ ├── language013.phpt │ │ │ ├── language014.phpt │ │ │ ├── language015.phpt │ │ │ ├── language016.phpt │ │ │ ├── language017.phpt │ │ │ ├── language018.phpt │ │ │ ├── language019.phpt │ │ │ ├── language020.phpt │ │ │ ├── methods_001.phpt │ │ │ ├── methods_002.phpt │ │ │ ├── methods_003.phpt │ │ │ ├── no_static_arg_binding.phpt │ │ │ ├── precedence_unknown_class.phpt │ │ │ ├── property001.phpt │ │ │ ├── property002.phpt │ │ │ ├── property003.phpt │ │ │ ├── property004.phpt │ │ │ ├── property005.phpt │ │ │ ├── property006.phpt │ │ │ ├── property007.phpt │ │ │ ├── property008.phpt │ │ │ ├── property009.phpt │ │ │ ├── static_001.phpt │ │ │ ├── static_002.phpt │ │ │ ├── static_003.phpt │ │ │ ├── static_004.phpt │ │ │ ├── static_forward_static_call.phpt │ │ │ ├── static_get_called_class.phpt │ │ │ ├── trait_constant_001.phpt │ │ │ ├── trait_constant_002.phpt │ │ │ └── trait_underscore_as_name.phpt │ │ ├── trampoline_closure_named_arguments.phpt │ │ ├── try/ │ │ │ ├── bug70228.phpt │ │ │ ├── bug70228_2.phpt │ │ │ ├── bug70228_3.phpt │ │ │ ├── bug70228_4.phpt │ │ │ ├── bug70228_5.phpt │ │ │ ├── bug70228_6.phpt │ │ │ ├── bug70228_7.phpt │ │ │ ├── bug70228_8.phpt │ │ │ ├── bug71604.phpt │ │ │ ├── bug71604_2.phpt │ │ │ ├── bug71604_3.phpt │ │ │ ├── bug72213.phpt │ │ │ ├── bug72213_2.phpt │ │ │ ├── bug72629.phpt │ │ │ ├── bug74444.phpt │ │ │ ├── catch_002.phpt │ │ │ ├── catch_003.phpt │ │ │ ├── catch_004.phpt │ │ │ ├── catch_finally_001.phpt │ │ │ ├── catch_finally_002.phpt │ │ │ ├── catch_finally_003.phpt │ │ │ ├── catch_finally_004.phpt │ │ │ ├── catch_finally_005.phpt │ │ │ ├── catch_finally_006.phpt │ │ │ ├── catch_novar_1.phpt │ │ │ ├── catch_novar_2.phpt │ │ │ ├── exceptions.inc │ │ │ ├── finally_goto_001.phpt │ │ │ ├── finally_goto_002.phpt │ │ │ ├── finally_goto_003.phpt │ │ │ ├── finally_goto_004.phpt │ │ │ ├── finally_goto_005.phpt │ │ │ ├── try_catch_finally_001.phpt │ │ │ ├── try_catch_finally_002.phpt │ │ │ ├── try_catch_finally_003.phpt │ │ │ ├── try_catch_finally_004.phpt │ │ │ ├── try_catch_finally_005.phpt │ │ │ ├── try_catch_finally_006.phpt │ │ │ ├── try_catch_finally_007.phpt │ │ │ ├── try_finally_001.phpt │ │ │ ├── try_finally_002.phpt │ │ │ ├── try_finally_003.phpt │ │ │ ├── try_finally_004.phpt │ │ │ ├── try_finally_005.phpt │ │ │ ├── try_finally_006.phpt │ │ │ ├── try_finally_007.phpt │ │ │ ├── try_finally_008.phpt │ │ │ ├── try_finally_009.phpt │ │ │ ├── try_finally_010.phpt │ │ │ ├── try_finally_011.phpt │ │ │ ├── try_finally_012.phpt │ │ │ ├── try_finally_013.phpt │ │ │ ├── try_finally_014.phpt │ │ │ ├── try_finally_015.phpt │ │ │ ├── try_finally_016.phpt │ │ │ ├── try_finally_017.phpt │ │ │ ├── try_finally_018.phpt │ │ │ ├── try_finally_019.phpt │ │ │ ├── try_finally_020.phpt │ │ │ ├── try_finally_021.phpt │ │ │ ├── try_finally_022.phpt │ │ │ ├── try_finally_023.phpt │ │ │ ├── try_finally_024.phpt │ │ │ ├── try_finally_025.phpt │ │ │ ├── try_finally_026.phpt │ │ │ ├── try_finally_027.phpt │ │ │ ├── try_finally_recursive_previous.phpt │ │ │ ├── try_multicatch_001.phpt │ │ │ ├── try_multicatch_002.phpt │ │ │ ├── try_multicatch_003.phpt │ │ │ ├── try_multicatch_004.phpt │ │ │ ├── try_multicatch_005.phpt │ │ │ ├── try_multicatch_006.phpt │ │ │ └── try_multicatch_007.phpt │ │ ├── type_declarations/ │ │ │ ├── add_return_type.phpt │ │ │ ├── array_001.phpt │ │ │ ├── callable_001.phpt │ │ │ ├── callable_002.phpt │ │ │ ├── callable_003.phpt │ │ │ ├── closure_with_variadic.phpt │ │ │ ├── confusable_type_warning.phpt │ │ │ ├── default_boolean_hint_values.phpt │ │ │ ├── dnf_types/ │ │ │ │ ├── dnf_2_intersection.phpt │ │ │ │ ├── dnf_intersection_and_eval.phpt │ │ │ │ ├── dnf_intersection_and_null.phpt │ │ │ │ ├── dnf_intersection_and_single.phpt │ │ │ │ ├── gh9516.phpt │ │ │ │ ├── redundant_types/ │ │ │ │ │ ├── duplicate_class_alias_type.phpt │ │ │ │ │ ├── duplicate_class_alias_type_runtime.phpt │ │ │ │ │ ├── inheritence.phpt │ │ │ │ │ ├── less_restrive_type_constraint_already_present001.phpt │ │ │ │ │ ├── less_restrive_type_constraint_already_present002.phpt │ │ │ │ │ ├── less_restrive_type_constraint_already_present003.phpt │ │ │ │ │ ├── less_restrive_type_constraint_already_present004.phpt │ │ │ │ │ ├── object_and_dnf_type.phpt │ │ │ │ │ └── object_and_dnf_type2.phpt │ │ │ │ └── variance/ │ │ │ │ ├── invalid1.phpt │ │ │ │ ├── invalid_covariance_drop_type1.phpt │ │ │ │ ├── invalid_covariance_drop_type2.phpt │ │ │ │ ├── invalid_covariance_intersection_to_union1.phpt │ │ │ │ ├── invalid_covariance_intersection_to_union2.phpt │ │ │ │ ├── invalid_covariance_intersection_to_union3.phpt │ │ │ │ ├── invalid_invariance1.phpt │ │ │ │ ├── invalid_invariance1_var.phpt │ │ │ │ ├── invalid_invariance2.phpt │ │ │ │ ├── valid1.phpt │ │ │ │ ├── valid2.phpt │ │ │ │ ├── valid4.phpt │ │ │ │ ├── valid5.phpt │ │ │ │ ├── valid6.phpt │ │ │ │ ├── valid7.phpt │ │ │ │ ├── valid8.phpt │ │ │ │ └── valid9.phpt │ │ │ ├── explicit_weak_include_strict.phpt │ │ │ ├── inexistent_class_hint_with_scalar_arg.phpt │ │ │ ├── internal_function_strict_mode.phpt │ │ │ ├── intersection_types/ │ │ │ │ ├── added_interface_intersection_type.phpt │ │ │ │ ├── assigning_intersection_types.phpt │ │ │ │ ├── bug81268.phpt │ │ │ │ ├── implicit_nullable_intersection_type.phpt │ │ │ │ ├── implicit_nullable_intersection_type_error.phpt │ │ │ │ ├── invalid_types/ │ │ │ │ │ ├── invalid_array_type.phpt │ │ │ │ │ ├── invalid_bool_type.phpt │ │ │ │ │ ├── invalid_callable_type.phpt │ │ │ │ │ ├── invalid_false_type.phpt │ │ │ │ │ ├── invalid_float_type.phpt │ │ │ │ │ ├── invalid_int_type.phpt │ │ │ │ │ ├── invalid_iterable_type.phpt │ │ │ │ │ ├── invalid_mixed_type.phpt │ │ │ │ │ ├── invalid_never_type.phpt │ │ │ │ │ ├── invalid_null_type.phpt │ │ │ │ │ ├── invalid_nullable_type.phpt │ │ │ │ │ ├── invalid_object_type.phpt │ │ │ │ │ ├── invalid_parent_type.phpt │ │ │ │ │ ├── invalid_self_type.phpt │ │ │ │ │ ├── invalid_static_type.phpt │ │ │ │ │ ├── invalid_string_type.phpt │ │ │ │ │ ├── invalid_true_type.phpt │ │ │ │ │ └── invalid_void_type.phpt │ │ │ │ ├── missing_interface_intersection_type.phpt │ │ │ │ ├── parameter.phpt │ │ │ │ ├── parse_error.phpt │ │ │ │ ├── parsing_attribute.phpt │ │ │ │ ├── parsing_comment.phpt │ │ │ │ ├── redundant_types/ │ │ │ │ │ ├── duplicate_class_alias_type.phpt │ │ │ │ │ ├── duplicate_class_alias_type_runtime.phpt │ │ │ │ │ ├── duplicate_class_type.phpt │ │ │ │ │ └── inheritence.phpt │ │ │ │ ├── typed_reference.phpt │ │ │ │ └── variance/ │ │ │ │ ├── invalid1.phpt │ │ │ │ ├── invalid2.phpt │ │ │ │ ├── invalid3.phpt │ │ │ │ ├── invalid4.phpt │ │ │ │ ├── invalid5.phpt │ │ │ │ ├── invalid6.phpt │ │ │ │ ├── invalid_covariance_drop_type1.phpt │ │ │ │ ├── invalid_covariance_drop_type2.phpt │ │ │ │ ├── invalid_covariance_intersection_to_union1.phpt │ │ │ │ ├── invalid_covariance_intersection_to_union2.phpt │ │ │ │ ├── invalid_covariance_intersection_to_union3.phpt │ │ │ │ ├── invalid_invariance1.phpt │ │ │ │ ├── invalid_invariance2.phpt │ │ │ │ ├── valid1.phpt │ │ │ │ ├── valid2.phpt │ │ │ │ ├── valid3.phpt │ │ │ │ ├── valid4.phpt │ │ │ │ ├── valid5.phpt │ │ │ │ ├── valid6.phpt │ │ │ │ ├── valid7.phpt │ │ │ │ └── valid8.phpt │ │ │ ├── iterable/ │ │ │ │ ├── iterable_001.phpt │ │ │ │ ├── iterable_002.phpt │ │ │ │ ├── iterable_003.phpt │ │ │ │ ├── iterable_004.phpt │ │ │ │ ├── iterable_005.phpt │ │ │ │ ├── iterable_alias_redundancy_array_1.phpt │ │ │ │ ├── iterable_alias_redundancy_array_2.phpt │ │ │ │ ├── iterable_alias_redundancy_iterable.phpt │ │ │ │ ├── iterable_alias_redundancy_object_1.phpt │ │ │ │ ├── iterable_alias_redundancy_object_2.phpt │ │ │ │ ├── iterable_alias_redundancy_object_3.phpt │ │ │ │ ├── iterable_alias_redundancy_object_4.phpt │ │ │ │ ├── iterable_alias_redundancy_object_5.phpt │ │ │ │ ├── iterable_alias_redundancy_object_6.phpt │ │ │ │ ├── iterable_alias_redundancy_object_variance.phpt │ │ │ │ └── or_null.phpt │ │ │ ├── iterable_001.phpt │ │ │ ├── iterable_002.phpt │ │ │ ├── iterable_003.phpt │ │ │ ├── iterable_004.phpt │ │ │ ├── iterable_005.phpt │ │ │ ├── literal_types/ │ │ │ │ ├── false_no_coercion.phpt │ │ │ │ ├── false_no_coercion_on_overload.phpt │ │ │ │ ├── false_standalone.phpt │ │ │ │ ├── false_standalone_implicit_nullability.phpt │ │ │ │ ├── true_no_coercion.phpt │ │ │ │ ├── true_no_coercion_on_overload.phpt │ │ │ │ ├── true_standalone.phpt │ │ │ │ └── true_standalone_implicit_nullability.phpt │ │ │ ├── mixed/ │ │ │ │ ├── casting/ │ │ │ │ │ └── mixed_cast_error.phpt │ │ │ │ ├── inheritance/ │ │ │ │ │ ├── mixed_parameter_inheritance_error1.phpt │ │ │ │ │ ├── mixed_parameter_inheritance_error2.phpt │ │ │ │ │ ├── mixed_parameter_inheritance_error3.phpt │ │ │ │ │ ├── mixed_parameter_inheritance_error4.phpt │ │ │ │ │ ├── mixed_parameter_inheritance_success1.phpt │ │ │ │ │ ├── mixed_parameter_inheritance_success2.phpt │ │ │ │ │ ├── mixed_parameter_inheritance_success3.phpt │ │ │ │ │ ├── mixed_parameter_inheritance_success4.phpt │ │ │ │ │ ├── mixed_parameter_inheritance_success5.phpt │ │ │ │ │ ├── mixed_parameter_inheritance_success6.phpt │ │ │ │ │ ├── mixed_parameter_inheritance_success7.phpt │ │ │ │ │ ├── mixed_property_inheritance_error1.phpt │ │ │ │ │ ├── mixed_property_inheritance_error2.phpt │ │ │ │ │ ├── mixed_property_inheritance_error3.phpt │ │ │ │ │ ├── mixed_property_inheritance_error4.phpt │ │ │ │ │ ├── mixed_property_inheritance_error5.phpt │ │ │ │ │ ├── mixed_property_inheritance_error6.phpt │ │ │ │ │ ├── mixed_property_inheritance_error7.phpt │ │ │ │ │ ├── mixed_property_inheritance_error8.phpt │ │ │ │ │ ├── mixed_property_inheritance_success.phpt │ │ │ │ │ ├── mixed_return_inheritance_error1.phpt │ │ │ │ │ ├── mixed_return_inheritance_error2.phpt │ │ │ │ │ ├── mixed_return_inheritance_error3.phpt │ │ │ │ │ ├── mixed_return_inheritance_success1.phpt │ │ │ │ │ ├── mixed_return_inheritance_success2.phpt │ │ │ │ │ ├── mixed_return_inheritance_success3.phpt │ │ │ │ │ └── mixed_return_inheritance_success4.phpt │ │ │ │ ├── syntax/ │ │ │ │ │ ├── mixed_class_error.phpt │ │ │ │ │ ├── mixed_parameter_error1.phpt │ │ │ │ │ ├── mixed_parameter_error2.phpt │ │ │ │ │ ├── mixed_parameter_success.phpt │ │ │ │ │ ├── mixed_parameter_sucess4.phpt │ │ │ │ │ ├── mixed_return_error.phpt │ │ │ │ │ ├── mixed_return_success.phpt │ │ │ │ │ ├── mixed_void_return_error.phpt │ │ │ │ │ ├── nullable_mixed_parameter_error.phpt │ │ │ │ │ ├── nullable_mixed_property_error.phpt │ │ │ │ │ └── nullable_mixed_return_error.phpt │ │ │ │ └── validation/ │ │ │ │ ├── mixed_parameter_strict_success.phpt │ │ │ │ ├── mixed_parameter_weak_success.phpt │ │ │ │ ├── mixed_property_strict_success.phpt │ │ │ │ ├── mixed_property_weak_success.phpt │ │ │ │ ├── mixed_return_strict_error.phpt │ │ │ │ ├── mixed_return_strict_success.phpt │ │ │ │ ├── mixed_return_weak_error.phpt │ │ │ │ └── mixed_return_weak_success.phpt │ │ │ ├── nullable_null.phpt │ │ │ ├── nullable_typed_return_without_value.phpt │ │ │ ├── nullable_void.phpt │ │ │ ├── parameter_type_variance.phpt │ │ │ ├── parameter_type_variance_2.phpt │ │ │ ├── parent_is_not_proto.phpt │ │ │ ├── return_separation.phpt │ │ │ ├── scalar_basic.phpt │ │ │ ├── scalar_constant_defaults.phpt │ │ │ ├── scalar_constant_defaults_error.phpt │ │ │ ├── scalar_float_with_integer_default_strict.phpt │ │ │ ├── scalar_float_with_integer_default_weak.phpt │ │ │ ├── scalar_float_with_invalid_default.phpt │ │ │ ├── scalar_none.phpt │ │ │ ├── scalar_null.phpt │ │ │ ├── scalar_relative_typehint_disallowed.phpt │ │ │ ├── scalar_reserved2.phpt │ │ │ ├── scalar_reserved2_class_alias.phpt │ │ │ ├── scalar_reserved2_use.phpt │ │ │ ├── scalar_reserved3.phpt │ │ │ ├── scalar_reserved3_class_alias.phpt │ │ │ ├── scalar_reserved3_use.phpt │ │ │ ├── scalar_reserved4.phpt │ │ │ ├── scalar_reserved4_class_alias.phpt │ │ │ ├── scalar_reserved4_use.phpt │ │ │ ├── scalar_reserved6.phpt │ │ │ ├── scalar_reserved6_class_alias.phpt │ │ │ ├── scalar_reserved6_use.phpt │ │ │ ├── scalar_reserved7.phpt │ │ │ ├── scalar_return_basic.phpt │ │ │ ├── scalar_return_basic_64bit.phpt │ │ │ ├── scalar_strict.phpt │ │ │ ├── scalar_strict_64bit.phpt │ │ │ ├── scalar_strict_basic.phpt │ │ │ ├── scalar_strict_declaration_placement_001.phpt │ │ │ ├── scalar_strict_declaration_placement_002.phpt │ │ │ ├── scalar_strict_declaration_placement_003.phpt │ │ │ ├── scalar_strict_declaration_placement_004.phpt │ │ │ ├── scalar_strict_declaration_placement_005.phpt │ │ │ ├── scalar_strict_declaration_placement_006.phpt │ │ │ ├── scalar_strict_declaration_placement_007.phpt │ │ │ ├── scalar_strict_declaration_placement_008.phpt │ │ │ ├── scalar_weak_reference.phpt │ │ │ ├── self_on_closure_in_method.phpt │ │ │ ├── standalone_null.phpt │ │ │ ├── static_type_in_final_class.phpt │ │ │ ├── static_type_outside_class.phpt │ │ │ ├── static_type_param.phpt │ │ │ ├── static_type_property.phpt │ │ │ ├── static_type_return.phpt │ │ │ ├── static_type_trait.phpt │ │ │ ├── strict_call_weak.phpt │ │ │ ├── strict_call_weak_2.inc │ │ │ ├── strict_call_weak_explicit.phpt │ │ │ ├── strict_call_weak_explicit_2.inc │ │ │ ├── strict_include_explicit_weak.phpt │ │ │ ├── strict_include_explicit_weak_2.inc │ │ │ ├── strict_include_weak.phpt │ │ │ ├── strict_include_weak_2.inc │ │ │ ├── strict_nested.phpt │ │ │ ├── typed_class_constants_ast_print.phpt │ │ │ ├── typed_class_constants_diamond_error1.phpt │ │ │ ├── typed_class_constants_inheritance_error1.phpt │ │ │ ├── typed_class_constants_inheritance_error2.phpt │ │ │ ├── typed_class_constants_inheritance_error3.phpt │ │ │ ├── typed_class_constants_inheritance_error4.phpt │ │ │ ├── typed_class_constants_inheritance_error5.phpt │ │ │ ├── typed_class_constants_inheritance_error6.phpt │ │ │ ├── typed_class_constants_inheritance_success1.phpt │ │ │ ├── typed_class_constants_inheritance_success2.phpt │ │ │ ├── typed_class_constants_inheritance_success3.phpt │ │ │ ├── typed_class_constants_inheritance_success4.phpt │ │ │ ├── typed_class_constants_inheritance_success5.phpt │ │ │ ├── typed_class_constants_multiple_constants.phpt │ │ │ ├── typed_class_constants_type_error1.phpt │ │ │ ├── typed_class_constants_type_error10.phpt │ │ │ ├── typed_class_constants_type_error11.phpt │ │ │ ├── typed_class_constants_type_error12.phpt │ │ │ ├── typed_class_constants_type_error2.phpt │ │ │ ├── typed_class_constants_type_error3.phpt │ │ │ ├── typed_class_constants_type_error4.phpt │ │ │ ├── typed_class_constants_type_error5.phpt │ │ │ ├── typed_class_constants_type_error6.phpt │ │ │ ├── typed_class_constants_type_error7.phpt │ │ │ ├── typed_class_constants_type_error8.phpt │ │ │ ├── typed_class_constants_type_error9.phpt │ │ │ ├── typed_class_constants_type_success1.phpt │ │ │ ├── typed_class_constants_type_success2.phpt │ │ │ ├── typed_class_constants_type_success3.phpt │ │ │ ├── typed_properties_001.phpt │ │ │ ├── typed_properties_002.phpt │ │ │ ├── typed_properties_003.phpt │ │ │ ├── typed_properties_004.phpt │ │ │ ├── typed_properties_005.phpt │ │ │ ├── typed_properties_006.phpt │ │ │ ├── typed_properties_007.phpt │ │ │ ├── typed_properties_008.phpt │ │ │ ├── typed_properties_009.phpt │ │ │ ├── typed_properties_010.phpt │ │ │ ├── typed_properties_011.phpt │ │ │ ├── typed_properties_012.phpt │ │ │ ├── typed_properties_013.phpt │ │ │ ├── typed_properties_014.phpt │ │ │ ├── typed_properties_015.phpt │ │ │ ├── typed_properties_016.phpt │ │ │ ├── typed_properties_017.phpt │ │ │ ├── typed_properties_018.phpt │ │ │ ├── typed_properties_019.phpt │ │ │ ├── typed_properties_020.phpt │ │ │ ├── typed_properties_021.phpt │ │ │ ├── typed_properties_022.phpt │ │ │ ├── typed_properties_023.phpt │ │ │ ├── typed_properties_024.phpt │ │ │ ├── typed_properties_025.phpt │ │ │ ├── typed_properties_026.phpt │ │ │ ├── typed_properties_027.phpt │ │ │ ├── typed_properties_028.phpt │ │ │ ├── typed_properties_029.phpt │ │ │ ├── typed_properties_030.phpt │ │ │ ├── typed_properties_031.phpt │ │ │ ├── typed_properties_032.phpt │ │ │ ├── typed_properties_033.phpt │ │ │ ├── typed_properties_034.phpt │ │ │ ├── typed_properties_035.phpt │ │ │ ├── typed_properties_036.phpt │ │ │ ├── typed_properties_037.phpt │ │ │ ├── typed_properties_038.phpt │ │ │ ├── typed_properties_039.phpt │ │ │ ├── typed_properties_040.phpt │ │ │ ├── typed_properties_041.phpt │ │ │ ├── typed_properties_042.phpt │ │ │ ├── typed_properties_043.phpt │ │ │ ├── typed_properties_044.phpt │ │ │ ├── typed_properties_045.phpt │ │ │ ├── typed_properties_046.phpt │ │ │ ├── typed_properties_047.phpt │ │ │ ├── typed_properties_048.phpt │ │ │ ├── typed_properties_049.phpt │ │ │ ├── typed_properties_050.phpt │ │ │ ├── typed_properties_051.phpt │ │ │ ├── typed_properties_052.phpt │ │ │ ├── typed_properties_053.phpt │ │ │ ├── typed_properties_054.phpt │ │ │ ├── typed_properties_055.phpt │ │ │ ├── typed_properties_056.phpt │ │ │ ├── typed_properties_057.phpt │ │ │ ├── typed_properties_058.phpt │ │ │ ├── typed_properties_059.phpt │ │ │ ├── typed_properties_060.phpt │ │ │ ├── typed_properties_061.phpt │ │ │ ├── typed_properties_062.phpt │ │ │ ├── typed_properties_063.phpt │ │ │ ├── typed_properties_064.phpt │ │ │ ├── typed_properties_065.phpt │ │ │ ├── typed_properties_066.phpt │ │ │ ├── typed_properties_067.phpt │ │ │ ├── typed_properties_068.phpt │ │ │ ├── typed_properties_069.phpt │ │ │ ├── typed_properties_070.phpt │ │ │ ├── typed_properties_071.phpt │ │ │ ├── typed_properties_072.phpt │ │ │ ├── typed_properties_073.phpt │ │ │ ├── typed_properties_074.phpt │ │ │ ├── typed_properties_075.phpt │ │ │ ├── typed_properties_076.phpt │ │ │ ├── typed_properties_077.phpt │ │ │ ├── typed_properties_078.phpt │ │ │ ├── typed_properties_079.phpt │ │ │ ├── typed_properties_080.phpt │ │ │ ├── typed_properties_081.phpt │ │ │ ├── typed_properties_082.phpt │ │ │ ├── typed_properties_083.phpt │ │ │ ├── typed_properties_084.phpt │ │ │ ├── typed_properties_085.phpt │ │ │ ├── typed_properties_086.phpt │ │ │ ├── typed_properties_087.phpt │ │ │ ├── typed_properties_088.phpt │ │ │ ├── typed_properties_089.phpt │ │ │ ├── typed_properties_090.phpt │ │ │ ├── typed_properties_092.phpt │ │ │ ├── typed_properties_093.phpt │ │ │ ├── typed_properties_094.phpt │ │ │ ├── typed_properties_095.phpt │ │ │ ├── typed_properties_096.phpt │ │ │ ├── typed_properties_097.phpt │ │ │ ├── typed_properties_098.phpt │ │ │ ├── typed_properties_099.phpt │ │ │ ├── typed_properties_100.phpt │ │ │ ├── typed_properties_101.phpt │ │ │ ├── typed_properties_102.phpt │ │ │ ├── typed_properties_103.phpt │ │ │ ├── typed_properties_104.phpt │ │ │ ├── typed_properties_105.phpt │ │ │ ├── typed_properties_106.phpt │ │ │ ├── typed_properties_107.phpt │ │ │ ├── typed_properties_108.phpt │ │ │ ├── typed_properties_109.phpt │ │ │ ├── typed_properties_110.phpt │ │ │ ├── typed_properties_111.phpt │ │ │ ├── typed_properties_112.phpt │ │ │ ├── typed_properties_113.phpt │ │ │ ├── typed_properties_114.phpt │ │ │ ├── typed_properties_115.phpt │ │ │ ├── typed_properties_cache_slot_opt.phpt │ │ │ ├── typed_properties_class_loading.phpt │ │ │ ├── typed_properties_failed_assign_is_not_init.phpt │ │ │ ├── typed_properties_magic_set.phpt │ │ │ ├── typed_properties_protected_inheritance_mismatch.phpt │ │ │ ├── typed_properties_reference_coercion_leak.phpt │ │ │ ├── typed_return_null_false_without_value.phpt │ │ │ ├── typed_return_null_without_value.phpt │ │ │ ├── typed_return_without_value.phpt │ │ │ ├── types_in_ast.phpt │ │ │ ├── union_types/ │ │ │ │ ├── anonymous_class.phpt │ │ │ │ ├── generator_return_containing_extra_types.phpt │ │ │ │ ├── generator_return_multiple_classes.phpt │ │ │ │ ├── illegal_default_value_argument.phpt │ │ │ │ ├── illegal_default_value_property.phpt │ │ │ │ ├── incdec_prop.phpt │ │ │ │ ├── inheritance.phpt │ │ │ │ ├── inheritance_internal.phpt │ │ │ │ ├── internal_trait_use_typed_union.phpt │ │ │ │ ├── legal_default_values.phpt │ │ │ │ ├── multiple_classes.phpt │ │ │ │ ├── never_with_class.phpt │ │ │ │ ├── null_false_union.phpt │ │ │ │ ├── prop_ref_assign.phpt │ │ │ │ ├── redundant_types/ │ │ │ │ │ ├── bool_and_false.phpt │ │ │ │ │ ├── bool_and_true.phpt │ │ │ │ │ ├── bool_instead_false_and_true.phpt │ │ │ │ │ ├── bool_instead_true_and_false.phpt │ │ │ │ │ ├── duplicate_class_type.phpt │ │ │ │ │ ├── duplicate_type.phpt │ │ │ │ │ ├── iterable_and_Traversable.phpt │ │ │ │ │ ├── iterable_and_Traversable_2.phpt │ │ │ │ │ ├── iterable_and_array.phpt │ │ │ │ │ ├── nullable_null.phpt │ │ │ │ │ ├── object_and_class_type.phpt │ │ │ │ │ ├── object_and_class_type2.phpt │ │ │ │ │ ├── object_and_static.phpt │ │ │ │ │ └── object_and_static2.phpt │ │ │ │ ├── standalone_false.phpt │ │ │ │ ├── standalone_null.phpt │ │ │ │ ├── standalone_nullable_false.phpt │ │ │ │ ├── type_checking_strict.phpt │ │ │ │ ├── type_checking_weak.phpt │ │ │ │ ├── variance/ │ │ │ │ │ ├── invalid_001.phpt │ │ │ │ │ ├── invalid_002.phpt │ │ │ │ │ ├── invalid_003.phpt │ │ │ │ │ ├── invalid_004.phpt │ │ │ │ │ └── valid.phpt │ │ │ │ └── void_with_class.phpt │ │ │ ├── variance/ │ │ │ │ ├── abstract_constructor.phpt │ │ │ │ ├── class_order_autoload1.phpt │ │ │ │ ├── class_order_autoload2.phpt │ │ │ │ ├── class_order_autoload3.phpt │ │ │ │ ├── class_order_autoload4.phpt │ │ │ │ ├── class_order_autoload5.phpt │ │ │ │ ├── class_order_autoload6.phpt │ │ │ │ ├── class_order_autoload_error1.phpt │ │ │ │ ├── class_order_autoload_error2.phpt │ │ │ │ ├── class_order_autoload_error3.phpt │ │ │ │ ├── class_order_autoload_error4.phpt │ │ │ │ ├── class_order_autoload_error5.phpt │ │ │ │ ├── class_order_autoload_error6.phpt │ │ │ │ ├── class_order_autoload_error7.phpt │ │ │ │ ├── class_order_autoload_error8.phpt │ │ │ │ ├── class_order_autoload_error9.phpt │ │ │ │ ├── class_order_error.phpt │ │ │ │ ├── enum_forward_compat.phpt │ │ │ │ ├── infinite_recursion.phpt │ │ │ │ ├── internal_parent/ │ │ │ │ │ ├── compatible_return_type.phpt │ │ │ │ │ ├── incompatible_return_type.phpt │ │ │ │ │ ├── missing_return_type.phpt │ │ │ │ │ ├── unresolvable_inheritance_check_param.phpt │ │ │ │ │ └── unresolvable_inheritance_check_return.phpt │ │ │ │ ├── loading_exception1.phpt │ │ │ │ ├── loading_exception2.phpt │ │ │ │ ├── mixed_return_type.phpt │ │ │ │ ├── object_variance.phpt │ │ │ │ ├── parent_in_class_failure1.phpt │ │ │ │ ├── parent_in_class_failure2.phpt │ │ │ │ ├── parent_in_class_success.phpt │ │ │ │ ├── property_types_early_bind.phpt │ │ │ │ ├── return_type_will_change_class_error.phpt │ │ │ │ ├── return_type_will_change_function_error.phpt │ │ │ │ ├── return_type_will_change_property_error.phpt │ │ │ │ ├── static_variance_failure.phpt │ │ │ │ ├── static_variance_success.phpt │ │ │ │ ├── stringable.phpt │ │ │ │ ├── suppressed_incompatible_return_type.phpt │ │ │ │ ├── trait_error.phpt │ │ │ │ ├── trait_success.phpt │ │ │ │ ├── unlinked_parent_1.phpt │ │ │ │ └── unlinked_parent_2.phpt │ │ │ ├── weak_call_strict.phpt │ │ │ ├── weak_call_strict_2.inc │ │ │ ├── weak_explicit_call_strict.phpt │ │ │ ├── weak_include_strict.phpt │ │ │ └── weak_include_strict_2.inc │ │ ├── typehints/ │ │ │ ├── bug76198.phpt │ │ │ ├── fq_nullable.phpt │ │ │ ├── fully_qualified_scalar.phpt │ │ │ ├── namespace_relative_scalar.phpt │ │ │ └── or_null.phpt │ │ ├── unary_minus_const_expr_consistency.phpt │ │ ├── uncaught_exception_error_supression.phpt │ │ ├── undef_index_to_exception.phpt │ │ ├── undef_var_in_verify_return.phpt │ │ ├── unexpected_ref_bug.phpt │ │ ├── unpack_iterator_by_ref_type_check.phpt │ │ ├── unreachable_phi_cycle.phpt │ │ ├── unset.inc │ │ ├── unset_cast_removed.phpt │ │ ├── unset_cv01.phpt │ │ ├── unset_cv02.phpt │ │ ├── unset_cv03.phpt │ │ ├── unset_cv04.phpt │ │ ├── unset_cv05.phpt │ │ ├── unset_cv06.phpt │ │ ├── unset_cv08.phpt │ │ ├── unset_cv10.phpt │ │ ├── unset_cv11.phpt │ │ ├── unset_cv12.phpt │ │ ├── unset_non_array.phpt │ │ ├── unset_prop_recursion.phpt │ │ ├── unterminated_comment.phpt │ │ ├── unused_shared_static_variables.phpt │ │ ├── update_consts_shadowed_private_prop.phpt │ │ ├── use_const/ │ │ │ ├── alias.phpt │ │ │ ├── basic.phpt │ │ │ ├── case_sensivity.phpt │ │ │ ├── conflicting_use.phpt │ │ │ ├── conflicting_use_alias.phpt │ │ │ ├── define_imported.phpt │ │ │ ├── define_imported_before.phpt │ │ │ ├── includes/ │ │ │ │ ├── foo_bar.inc │ │ │ │ ├── foo_php_version.inc │ │ │ │ ├── global_bar.inc │ │ │ │ └── global_baz.inc │ │ │ ├── no_global_fallback.phpt │ │ │ ├── self_parent.phpt │ │ │ ├── shadow_core.phpt │ │ │ └── shadow_global.phpt │ │ ├── use_function/ │ │ │ ├── alias.phpt │ │ │ ├── basic.phpt │ │ │ ├── case_insensivity.phpt │ │ │ ├── conditional_function_declaration.phpt │ │ │ ├── conflicting_use.phpt │ │ │ ├── conflicting_use_alias.phpt │ │ │ ├── conflicting_use_const_alias.phpt │ │ │ ├── define_imported.phpt │ │ │ ├── define_imported_before.phpt │ │ │ ├── ignore_constants.phpt │ │ │ ├── includes/ │ │ │ │ ├── foo_bar.inc │ │ │ │ ├── foo_strlen.inc │ │ │ │ ├── global_bar.inc │ │ │ │ └── global_baz.inc │ │ │ ├── no_conflict_with_classes.phpt │ │ │ ├── no_global_fallback.phpt │ │ │ ├── no_global_fallback2.phpt │ │ │ ├── ns_end_resets_seen_symbols_1.phpt │ │ │ ├── ns_end_resets_seen_symbols_2.phpt │ │ │ ├── self_parent.phpt │ │ │ ├── shadow_core.phpt │ │ │ └── shadow_global.phpt │ │ ├── use_late_binding_conflict.phpt │ │ ├── use_no_eval_conflict.phpt │ │ ├── use_no_file_conflict.phpt │ │ ├── use_no_file_conflict_1.inc │ │ ├── use_no_file_conflict_2.inc │ │ ├── use_unlinked_class.phpt │ │ ├── varSyntax/ │ │ │ ├── class_constant_static_deref.phpt │ │ │ ├── constClassMemberAccess.phpt │ │ │ ├── constant_object_deref.phpt │ │ │ ├── encapsed_string_deref.phpt │ │ │ ├── globalNonSimpleVariableError.phpt │ │ │ ├── indirectFcall.phpt │ │ │ ├── issetOnTemp.phpt │ │ │ ├── magic_const_deref.phpt │ │ │ ├── method_call_on_string_literal.phpt │ │ │ ├── newVariable.phpt │ │ │ ├── new_instanceof_expr.phpt │ │ │ ├── parenthesesDeref.phpt │ │ │ ├── propertyOfStringError.phpt │ │ │ ├── staticMember.phpt │ │ │ ├── static_prop_on_expr_class.phpt │ │ │ ├── static_prop_on_expr_class_with_backslash.phpt │ │ │ ├── static_prop_on_int_expr_class.phpt │ │ │ ├── tempDimFetchByRefError.phpt │ │ │ ├── tempPropFetchByRefError.phpt │ │ │ └── writeToTempExpr.phpt │ │ ├── variable_with_boolean_name.phpt │ │ ├── variable_with_integer_name.phpt │ │ ├── variadic/ │ │ │ ├── adding_additional_optional_parameter.phpt │ │ │ ├── adding_additional_optional_parameter_error.phpt │ │ │ ├── basic.phpt │ │ │ ├── by_ref.phpt │ │ │ ├── by_ref_error.phpt │ │ │ ├── closure_invoke.phpt │ │ │ ├── illegal_variadic_override_ref.phpt │ │ │ ├── illegal_variadic_override_type.phpt │ │ │ ├── legal_variadic_override.phpt │ │ │ ├── no_default_error.phpt │ │ │ ├── non_variadic_implements_variadic_error.phpt │ │ │ ├── only_last_error.phpt │ │ │ ├── optional_params.phpt │ │ │ ├── removing_parameter_error.phpt │ │ │ ├── typehint_error.phpt │ │ │ ├── typehint_suppressed_error.phpt │ │ │ ├── variadic_changed_byref_error.phpt │ │ │ ├── variadic_changed_typehint_error.phpt │ │ │ └── variadic_implements_non_variadic.phpt │ │ ├── varvars_by_ref.phpt │ │ ├── vm_stack_with_arg_extend.phpt │ │ ├── warning_during_heredoc_scan_ahead.phpt │ │ ├── weakrefs/ │ │ │ ├── gh10043-001.phpt │ │ │ ├── gh10043-002.phpt │ │ │ ├── gh10043-003.phpt │ │ │ ├── gh10043-004.phpt │ │ │ ├── gh10043-005.phpt │ │ │ ├── gh10043-006.phpt │ │ │ ├── gh10043-007.phpt │ │ │ ├── gh10043-008.phpt │ │ │ ├── gh10043-009.phpt │ │ │ ├── gh10043-010.phpt │ │ │ ├── gh10043-011.phpt │ │ │ ├── gh10043-012.phpt │ │ │ ├── gh10043-014.phpt │ │ │ ├── gh10043-015.phpt │ │ │ ├── gh10043-016.phpt │ │ │ ├── gh13612.phpt │ │ │ ├── notify.phpt │ │ │ ├── weakmap_basic_map_behavior.phpt │ │ │ ├── weakmap_dtor_exception.phpt │ │ │ ├── weakmap_error_conditions.phpt │ │ │ ├── weakmap_iteration.phpt │ │ │ ├── weakmap_multiple_weakrefs.phpt │ │ │ ├── weakmap_nested.phpt │ │ │ ├── weakmap_object_reference.phpt │ │ │ ├── weakmap_weakness.phpt │ │ │ ├── weakrefs_001.phpt │ │ │ ├── weakrefs_002.phpt │ │ │ ├── weakrefs_003.phpt │ │ │ ├── weakrefs_004.phpt │ │ │ ├── weakrefs_005.phpt │ │ │ ├── weakrefs_006.phpt │ │ │ └── weakrefs_debug_dump.phpt │ │ ├── write_property_ref_overwrite_return.phpt │ │ ├── xor_001.phpt │ │ ├── xor_002.phpt │ │ ├── xor_003.phpt │ │ ├── zend_ini/ │ │ │ ├── gh11876.phpt │ │ │ ├── gh16886.phpt │ │ │ ├── gh16892.phpt │ │ │ ├── oss_fuzz_428983568.phpt │ │ │ ├── zend_ini_parse_quantity.phpt │ │ │ ├── zend_ini_parse_quantity_binary_prefixes.phpt │ │ │ ├── zend_ini_parse_quantity_error.phpt │ │ │ ├── zend_ini_parse_quantity_hex_prefixes.phpt │ │ │ ├── zend_ini_parse_quantity_ini_set_error.phpt │ │ │ ├── zend_ini_parse_quantity_ini_setting_error.phpt │ │ │ ├── zend_ini_parse_quantity_octal_prefixes.phpt │ │ │ ├── zend_ini_parse_quantity_overflow.phpt │ │ │ ├── zend_ini_parse_quantity_zero.phpt │ │ │ └── zend_ini_parse_uquantity_overflow.phpt │ │ ├── zend_operators.phpt │ │ ├── zend_signed_multiply-32bit.phpt │ │ ├── zend_signed_multiply-64bit-2.phpt │ │ ├── zend_signed_multiply-64bit.phpt │ │ └── zend_strtod.phpt │ ├── zend.c │ ├── zend.h │ ├── zend_API.c │ ├── zend_API.h │ ├── zend_alloc.c │ ├── zend_alloc.h │ ├── zend_alloc_sizes.h │ ├── zend_arena.h │ ├── zend_ast.c │ ├── zend_ast.h │ ├── zend_atomic.c │ ├── zend_atomic.h │ ├── zend_attributes.c │ ├── zend_attributes.h │ ├── zend_attributes.stub.php │ ├── zend_attributes_arginfo.h │ ├── zend_bitset.h │ ├── zend_build.h │ ├── zend_builtin_functions.c │ ├── zend_builtin_functions.h │ ├── zend_builtin_functions.stub.php │ ├── zend_builtin_functions_arginfo.h │ ├── zend_call_stack.c │ ├── zend_call_stack.h │ ├── zend_closures.c │ ├── zend_closures.h │ ├── zend_closures.stub.php │ ├── zend_closures_arginfo.h │ ├── zend_compile.c │ ├── zend_compile.h │ ├── zend_config.w32.h │ ├── zend_constants.c │ ├── zend_constants.h │ ├── zend_constants.stub.php │ ├── zend_constants_arginfo.h │ ├── zend_cpuinfo.c │ ├── zend_cpuinfo.h │ ├── zend_default_classes.c │ ├── zend_dtrace.c │ ├── zend_dtrace.d │ ├── zend_dtrace.h │ ├── zend_enum.c │ ├── zend_enum.h │ ├── zend_enum.stub.php │ ├── zend_enum_arginfo.h │ ├── zend_errors.h │ ├── zend_exceptions.c │ ├── zend_exceptions.h │ ├── zend_exceptions.stub.php │ ├── zend_exceptions_arginfo.h │ ├── zend_execute.c │ ├── zend_execute.h │ ├── zend_execute_API.c │ ├── zend_extensions.c │ ├── zend_extensions.h │ ├── zend_fibers.c │ ├── zend_fibers.h │ ├── zend_fibers.stub.php │ ├── zend_fibers_arginfo.h │ ├── zend_float.c │ ├── zend_float.h │ ├── zend_frameless_function.c │ ├── zend_frameless_function.h │ ├── zend_gc.c │ ├── zend_gc.h │ ├── zend_gdb.c │ ├── zend_gdb.h │ ├── zend_generators.c │ ├── zend_generators.h │ ├── zend_generators.stub.php │ ├── zend_generators_arginfo.h │ ├── zend_globals.h │ ├── zend_globals_macros.h │ ├── zend_hash.c │ ├── zend_hash.h │ ├── zend_highlight.c │ ├── zend_highlight.h │ ├── zend_hrtime.c │ ├── zend_hrtime.h │ ├── zend_inheritance.c │ ├── zend_inheritance.h │ ├── zend_ini.c │ ├── zend_ini.h │ ├── zend_ini_parser.y │ ├── zend_ini_scanner.h │ ├── zend_ini_scanner.l │ ├── zend_interfaces.c │ ├── zend_interfaces.h │ ├── zend_interfaces.stub.php │ ├── zend_interfaces_arginfo.h │ ├── zend_istdiostream.h │ ├── zend_iterators.c │ ├── zend_iterators.h │ ├── zend_language_parser.y │ ├── zend_language_scanner.h │ ├── zend_language_scanner.l │ ├── zend_lazy_objects.c │ ├── zend_lazy_objects.h │ ├── zend_list.c │ ├── zend_list.h │ ├── zend_llist.c │ ├── zend_llist.h │ ├── zend_long.h │ ├── zend_map_ptr.h │ ├── zend_max_execution_timer.c │ ├── zend_max_execution_timer.h │ ├── zend_mmap.h │ ├── zend_modules.h │ ├── zend_multibyte.c │ ├── zend_multibyte.h │ ├── zend_multiply.h │ ├── zend_object_handlers.c │ ├── zend_object_handlers.h │ ├── zend_objects.c │ ├── zend_objects.h │ ├── zend_objects_API.c │ ├── zend_objects_API.h │ ├── zend_observer.c │ ├── zend_observer.h │ ├── zend_opcode.c │ ├── zend_operators.c │ ├── zend_operators.h │ ├── zend_portability.h │ ├── zend_property_hooks.c │ ├── zend_property_hooks.h │ ├── zend_ptr_stack.c │ ├── zend_ptr_stack.h │ ├── zend_range_check.h │ ├── zend_signal.c │ ├── zend_signal.h │ ├── zend_smart_str.c │ ├── zend_smart_str.h │ ├── zend_smart_str_public.h │ ├── zend_smart_string.h │ ├── zend_smart_string_public.h │ ├── zend_sort.c │ ├── zend_sort.h │ ├── zend_stack.c │ ├── zend_stack.h │ ├── zend_stream.c │ ├── zend_stream.h │ ├── zend_string.c │ ├── zend_string.h │ ├── zend_strtod.c │ ├── zend_strtod.h │ ├── zend_strtod_int.h │ ├── zend_system_id.c │ ├── zend_system_id.h │ ├── zend_type_info.h │ ├── zend_types.h │ ├── zend_variables.c │ ├── zend_variables.h │ ├── zend_verify_type_inference.h │ ├── zend_virtual_cwd.c │ ├── zend_virtual_cwd.h │ ├── zend_vm.h │ ├── zend_vm_def.h │ ├── zend_vm_execute.h │ ├── zend_vm_execute.skl │ ├── zend_vm_gen.php │ ├── zend_vm_handlers.h │ ├── zend_vm_opcodes.c │ ├── zend_vm_opcodes.h │ ├── zend_vm_trace_handlers.h │ ├── zend_vm_trace_lines.h │ ├── zend_vm_trace_map.h │ ├── zend_weakrefs.c │ ├── zend_weakrefs.h │ ├── zend_weakrefs.stub.php │ └── zend_weakrefs_arginfo.h ├── build/ │ ├── Makefile.gcov │ ├── Makefile.global │ ├── ax_check_compile_flag.m4 │ ├── ax_func_which_gethostbyname_r.m4 │ ├── ax_gcc_func_attribute.m4 │ ├── config-stubs │ ├── config.guess │ ├── config.sub │ ├── gen_stub.php │ ├── genif.sh │ ├── libtool.m4 │ ├── ltmain.sh │ ├── order_by_dep.awk │ ├── php.m4 │ ├── php_cxx_compile_stdcxx.m4 │ ├── pkg.m4 │ ├── print_include.awk │ └── shtool ├── build-release-example.sh ├── buildconf ├── composer.json ├── configure.ac ├── diff.php ├── docs/ │ ├── ChangeLog.md │ ├── Cygwin.md │ ├── FAQ.md │ ├── diff.md │ ├── extensions.md │ ├── linux.md │ ├── macOS.md │ ├── options.md │ ├── tags.md │ ├── upgrade.md │ └── wsl.md ├── ext/ │ ├── bcmath/ │ │ ├── CREDITS │ │ ├── bcmath.c │ │ ├── bcmath.stub.php │ │ ├── bcmath_arginfo.h │ │ ├── config.m4 │ │ ├── config.w32 │ │ ├── libbcmath/ │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── src/ │ │ │ ├── add.c │ │ │ ├── bcmath.h │ │ │ ├── compare.c │ │ │ ├── config.h │ │ │ ├── convert.c │ │ │ ├── convert.h │ │ │ ├── div.c │ │ │ ├── divmod.c │ │ │ ├── doaddsub.c │ │ │ ├── floor_or_ceil.c │ │ │ ├── init.c │ │ │ ├── int2num.c │ │ │ ├── long2num.c │ │ │ ├── nearzero.c │ │ │ ├── neg.c │ │ │ ├── num2long.c │ │ │ ├── num2str.c │ │ │ ├── private.h │ │ │ ├── raise.c │ │ │ ├── raisemod.c │ │ │ ├── recmul.c │ │ │ ├── rmzero.c │ │ │ ├── round.c │ │ │ ├── sqrt.c │ │ │ ├── str2num.c │ │ │ ├── sub.c │ │ │ └── zero.c │ │ ├── php_bcmath.h │ │ └── tests/ │ │ ├── bcadd.phpt │ │ ├── bcadd_error.phpt │ │ ├── bcadd_large_numbers.phpt │ │ ├── bcadd_zero.phpt │ │ ├── bcceil.phpt │ │ ├── bcceil_error.phpt │ │ ├── bccomp.phpt │ │ ├── bccomp_error.phpt │ │ ├── bccomp_variation001.phpt │ │ ├── bccomp_variation002.phpt │ │ ├── bcdiv.phpt │ │ ├── bcdiv_by_one.phpt │ │ ├── bcdiv_by_pow_10.phpt │ │ ├── bcdiv_error1.phpt │ │ ├── bcdiv_error2.phpt │ │ ├── bcdiv_large_numbers.phpt │ │ ├── bcdiv_zero.phpt │ │ ├── bcdivmod.phpt │ │ ├── bcdivmod_by_zero.phpt │ │ ├── bcfloor.phpt │ │ ├── bcfloor_error.phpt │ │ ├── bcmod.phpt │ │ ├── bcmod_error2.phpt │ │ ├── bcmod_error3.phpt │ │ ├── bcmod_large_numbers.phpt │ │ ├── bcmod_zero.phpt │ │ ├── bcmul.phpt │ │ ├── bcmul_check_overflow.phpt │ │ ├── bcmul_error.phpt │ │ ├── bcmul_large_numbers.phpt │ │ ├── bcmul_zero.phpt │ │ ├── bcpow.phpt │ │ ├── bcpow_div_by_zero.phpt │ │ ├── bcpow_error1.phpt │ │ ├── bcpow_error2.phpt │ │ ├── bcpow_error3.phpt │ │ ├── bcpow_large_numbers.phpt │ │ ├── bcpow_zero.phpt │ │ ├── bcpowmod.phpt │ │ ├── bcpowmod_error.phpt │ │ ├── bcpowmod_negative_exponent.phpt │ │ ├── bcpowmod_with_mod_1.phpt │ │ ├── bcpowmod_zero_modulus.phpt │ │ ├── bcround_all.phpt │ │ ├── bcround_away_from_zero.phpt │ │ ├── bcround_ceiling.phpt │ │ ├── bcround_early_return.phpt │ │ ├── bcround_error.phpt │ │ ├── bcround_floor.phpt │ │ ├── bcround_half_down.phpt │ │ ├── bcround_half_even.phpt │ │ ├── bcround_half_odd.phpt │ │ ├── bcround_half_up.phpt │ │ ├── bcround_test_helper.inc │ │ ├── bcround_toward_zero.phpt │ │ ├── bcscale.phpt │ │ ├── bcscale_variation001.phpt │ │ ├── bcscale_variation002.phpt │ │ ├── bcscale_variation003.phpt │ │ ├── bcsqrt.phpt │ │ ├── bcsqrt_error1.phpt │ │ ├── bcsqrt_error2.phpt │ │ ├── bcsub.phpt │ │ ├── bcsub_error.phpt │ │ ├── bcsub_large_numbers.phpt │ │ ├── bcsub_zero.phpt │ │ ├── bug44995.phpt │ │ ├── bug46781.phpt │ │ ├── bug54598.phpt │ │ ├── bug60377.phpt │ │ ├── bug66364.phpt │ │ ├── bug72093.phpt │ │ ├── bug75178.phpt │ │ ├── bug78238.phpt │ │ ├── bug78878.phpt │ │ ├── bug80545.phpt │ │ ├── gh15968.phpt │ │ ├── gh16262.phpt │ │ ├── gh16265.phpt │ │ ├── gh16978.phpt │ │ ├── gh17275.phpt │ │ ├── gh17398.phpt │ │ ├── negative_scale.phpt │ │ ├── number/ │ │ │ ├── cast.phpt │ │ │ ├── cast_warning.phpt │ │ │ ├── class_extends_error.phpt │ │ │ ├── clone.phpt │ │ │ ├── construct_32bit.phpt │ │ │ ├── construct_64bit.phpt │ │ │ ├── construct_error.phpt │ │ │ ├── construct_float.phpt │ │ │ ├── gh18641.phpt │ │ │ ├── methods/ │ │ │ │ ├── add.phpt │ │ │ │ ├── add_with_scale.phpt │ │ │ │ ├── calc_methods_num_arg_error.phpt │ │ │ │ ├── calc_methods_scale_arg_error.phpt │ │ │ │ ├── ceil.phpt │ │ │ │ ├── compare.phpt │ │ │ │ ├── compare_arg_error.phpt │ │ │ │ ├── compare_near_zero.phpt │ │ │ │ ├── compare_with_scale.phpt │ │ │ │ ├── div.phpt │ │ │ │ ├── div_mod_by_zero.phpt │ │ │ │ ├── div_with_scale.phpt │ │ │ │ ├── divmod.phpt │ │ │ │ ├── divmod_with_scale.phpt │ │ │ │ ├── floor.phpt │ │ │ │ ├── mod.phpt │ │ │ │ ├── mod_with_scale.phpt │ │ │ │ ├── mul.phpt │ │ │ │ ├── mul_with_scale.phpt │ │ │ │ ├── pow.phpt │ │ │ │ ├── pow_div_by_zero.phpt │ │ │ │ ├── pow_with_scale.phpt │ │ │
Showing preview only (2,511K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (26244 symbols across 1565 files)
FILE: TSRM/TSRM.c
type tsrm_tls_entry (line 27) | typedef struct _tsrm_tls_entry tsrm_tls_entry;
type _tsrm_tls_entry (line 32) | struct _tsrm_tls_entry {
type tsrm_resource_type (line 40) | typedef struct {
function TSRM_API (line 119) | TSRM_API bool tsrm_startup(int expected_threads, int expected_resources,...
function ts_free_resources (line 164) | static void ts_free_resources(tsrm_tls_entry *thread_resources)
function TSRM_API (line 183) | TSRM_API void tsrm_shutdown(void)
function TSRM_API (line 239) | TSRM_API void tsrm_env_lock(void) {
function TSRM_API (line 243) | TSRM_API void tsrm_env_unlock(void) {
function tsrm_update_active_threads (line 248) | static void tsrm_update_active_threads(void)
function TSRM_API (line 277) | TSRM_API ts_rsrc_id ts_allocate_id(ts_rsrc_id *rsrc_id, size_t size, ts_...
function TSRM_API (line 315) | TSRM_API void tsrm_reserve(size_t size)
function TSRM_API (line 323) | TSRM_API ts_rsrc_id ts_allocate_fast_id(ts_rsrc_id *rsrc_id, size_t *off...
function set_thread_local_storage_resource_to (line 371) | static void set_thread_local_storage_resource_to(tsrm_tls_entry *thread_...
function allocate_new_resource (line 378) | static void allocate_new_resource(tsrm_tls_entry **thread_resources_ptr,...
function TSRM_API (line 417) | TSRM_API void *ts_resource_ex(ts_rsrc_id id, THREAD_T *th_id)
function ts_free_thread (line 510) | void ts_free_thread(void)
function ts_free_id (line 544) | void ts_free_id(ts_rsrc_id id)
function TSRM_API (line 579) | TSRM_API void ts_apply_for_id(ts_rsrc_id id, void (*cb)(void *))
function TSRM_API (line 606) | TSRM_API THREAD_T tsrm_thread_id(void)
function TSRM_API (line 617) | TSRM_API MUTEX_T tsrm_mutex_alloc(void)
function TSRM_API (line 635) | TSRM_API void tsrm_mutex_free(MUTEX_T mutexp)
function TSRM_API (line 656) | TSRM_API int tsrm_mutex_lock(MUTEX_T mutexp)
function TSRM_API (line 672) | TSRM_API int tsrm_mutex_unlock(MUTEX_T mutexp)
function TSRM_API (line 687) | TSRM_API int tsrm_sigmask(int how, const sigset_t *set, sigset_t *oldset)
function TSRM_API (line 696) | TSRM_API void *tsrm_set_new_thread_begin_handler(tsrm_thread_begin_func_...
function TSRM_API (line 705) | TSRM_API void *tsrm_set_new_thread_end_handler(tsrm_thread_end_func_t ne...
function TSRM_API (line 714) | TSRM_API void *tsrm_set_shutdown_handler(tsrm_shutdown_func_t shutdown_h...
function tsrm_error (line 728) | int tsrm_error(int level, const char *format, ...)
function tsrm_error_set (line 748) | void tsrm_error_set(int level, const char *debug_filename)
function TSRM_API (line 768) | TSRM_API void *tsrm_get_ls_cache(void)
function TSRM_API (line 775) | TSRM_API size_t tsrm_get_ls_cache_tcb_offset(void)
function TSRM_API (line 826) | TSRM_API bool tsrm_is_main_thread(void)
function TSRM_API (line 831) | TSRM_API bool tsrm_is_shutdown(void)
function TSRM_API (line 836) | TSRM_API const char *tsrm_api_name(void)
function TSRM_API (line 845) | TSRM_API bool tsrm_is_managed_thread(void)
FILE: TSRM/TSRM.h
type tsrm_intptr_t (line 38) | typedef intptr_t tsrm_intptr_t;
type tsrm_uintptr_t (line 39) | typedef uintptr_t tsrm_uintptr_t;
type ts_rsrc_id (line 60) | typedef int ts_rsrc_id;
FILE: TSRM/tsrm_win32.c
function tsrm_win32_ctor (line 41) | static void tsrm_win32_ctor(tsrm_win32_globals *globals)
function tsrm_win32_dtor (line 63) | static void tsrm_win32_dtor(tsrm_win32_globals *globals)
function TSRM_API (line 89) | TSRM_API void tsrm_win32_startup(void)
function TSRM_API (line 98) | TSRM_API void tsrm_win32_shutdown(void)
function PSID (line 140) | PSID tsrm_win32_get_token_sid(HANDLE hToken)
function TSRM_API (line 190) | TSRM_API int tsrm_win32_access(const char *pathname, int mode)
function process_pair (line 372) | static process_pair *process_get(FILE *stream)
function shm_pair (line 400) | static shm_pair *shm_get(key_t key, void *addr)
function HANDLE (line 434) | static HANDLE dupHandle(HANDLE fh, BOOL inherit)
function TSRM_API (line 443) | TSRM_API FILE *popen(const char *command, const char *type)
function TSRM_API (line 449) | TSRM_API FILE *popen_ex(const char *command, const char *type, const cha...
function TSRM_API (line 596) | TSRM_API int pclose(FILE *stream)
function key_t (line 622) | static key_t tsrm_choose_random_shm_key(key_t prev_key) {
function TSRM_API (line 635) | TSRM_API int shmget(key_t key, size_t size, int flags)
function TSRM_API (line 725) | TSRM_API void *shmat(int key, const void *shmaddr, int flags)
function TSRM_API (line 741) | TSRM_API int shmdt(const void *shmaddr)
function TSRM_API (line 762) | TSRM_API int shmctl(int key, int cmd, struct shmid_ds *buf)
function zend_always_inline (line 793) | static zend_always_inline void UnixTimeToFileTime(time_t t, LPFILETIME p...
function TSRM_API (line 804) | TSRM_API int win32_utime(const char *filename, struct utimbuf *buf) /* {...
FILE: TSRM/tsrm_win32.h
type ipc_perm (line 25) | struct ipc_perm {
type shmid_ds (line 35) | struct shmid_ds {
type process_pair (line 46) | typedef struct {
type shm_pair (line 51) | typedef struct {
type tsrm_win32_globals (line 57) | typedef struct {
type utimbuf (line 100) | struct utimbuf
type shmid_ds (line 105) | struct shmid_ds
FILE: Zend/Optimizer/block_pass.c
function zend_optimizer_get_persistent_constant (line 33) | bool zend_optimizer_get_persistent_constant(zend_string *name, zval *res...
function strip_leading_nops (line 65) | static void strip_leading_nops(zend_op_array *op_array, zend_basic_block...
function strip_nops (line 75) | static void strip_nops(zend_op_array *op_array, zend_basic_block *b)
function get_const_switch_target (line 109) | static int get_const_switch_target(zend_cfg *cfg, zend_op_array *op_arra...
function zend_optimize_block (line 134) | static void zend_optimize_block(zend_basic_block *block, zend_op_array *...
function assemble_code_blocks (line 935) | static void assemble_code_blocks(zend_cfg *cfg, zend_op_array *op_array,...
function zend_always_inline (line 1110) | static zend_always_inline zend_basic_block *get_target_block(const zend_...
function zend_always_inline (line 1126) | static zend_always_inline zend_basic_block *get_follow_block(const zend_...
function zend_always_inline (line 1142) | static zend_always_inline zend_basic_block *get_next_block(const zend_cf...
function zend_always_inline (line 1163) | static zend_always_inline bool in_hitlist(int target, int *jmp_hitlist, ...
function zend_jmp_optimization (line 1182) | static void zend_jmp_optimization(zend_basic_block *block, zend_op_array...
function zend_t_usage (line 1409) | static void zend_t_usage(zend_cfg *cfg, zend_op_array *op_array, zend_bi...
function zend_merge_blocks (line 1613) | static void zend_merge_blocks(zend_op_array *op_array, zend_cfg *cfg, ui...
function zend_optimize_cfg (line 1673) | void zend_optimize_cfg(zend_op_array *op_array, zend_optimizer_ctx *ctx)
FILE: Zend/Optimizer/compact_literals.c
type literal_info (line 38) | typedef struct _literal_info {
function type_num_classes (line 46) | static size_t type_num_classes(const zend_op_array *op_array, uint32_t a...
function add_static_slot (line 90) | static uint32_t add_static_slot(HashTable *hash,
function bias_key (line 119) | static inline void bias_key(zend_string *key, uint32_t bias)
function zend_string (line 126) | static zend_string *create_str_cache_key(zval *literal, uint8_t num_rela...
function zend_optimizer_compact_literals (line 154) | void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optim...
FILE: Zend/Optimizer/compact_vars.c
function zend_optimizer_compact_vars (line 25) | void zend_optimizer_compact_vars(zend_op_array *op_array) {
FILE: Zend/Optimizer/dce.c
type context (line 49) | typedef struct {
function is_bad_mod (line 62) | static inline bool is_bad_mod(const zend_ssa *ssa, int use, int def) {
function may_have_side_effects (line 74) | static inline bool may_have_side_effects(
function zend_always_inline (line 273) | static zend_always_inline void add_to_worklists(context *ctx, int var_nu...
function add_to_phi_worklist_no_val (line 286) | static inline void add_to_phi_worklist_no_val(context *ctx, int var_num) {
function zend_always_inline (line 293) | static zend_always_inline void add_operands_to_worklists(context *ctx, z...
function zend_always_inline (line 317) | static zend_always_inline void add_phi_sources_to_worklists(context *ctx...
function is_var_dead (line 325) | static inline bool is_var_dead(context *ctx, int var_num) {
function try_remove_var_def (line 340) | static bool try_remove_var_def(context *ctx, int free_var, int use_chain...
function zend_always_inline (line 392) | static zend_always_inline bool may_be_refcounted(uint32_t type) {
function is_free_of_live_var (line 396) | static inline bool is_free_of_live_var(context *ctx, zend_op *opline, ze...
function dce_instr (line 413) | static bool dce_instr(context *ctx, zend_op *opline, zend_ssa_op *ssa_op) {
function get_common_phi_source (line 466) | static inline int get_common_phi_source(zend_ssa *ssa, zend_ssa_phi *phi) {
function try_remove_trivial_phi (line 486) | static void try_remove_trivial_phi(context *ctx, zend_ssa_phi *phi) {
function may_break_varargs (line 506) | static inline bool may_break_varargs(const zend_op_array *op_array, cons...
function may_throw_dce_exception (line 522) | static inline bool may_throw_dce_exception(const zend_op *opline) {
function dce_optimize_op_array (line 526) | int dce_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *o...
FILE: Zend/Optimizer/dfa_pass.c
function zend_result (line 41) | zend_result zend_dfa_analyze_op_array(zend_op_array *op_array, zend_opti...
function zend_ssa_remove_nops (line 113) | static void zend_ssa_remove_nops(zend_op_array *op_array, zend_ssa *ssa,...
function safe_instanceof (line 257) | static bool safe_instanceof(zend_class_entry *ce1, zend_class_entry *ce2) {
function can_elide_list_type (line 268) | static inline bool can_elide_list_type(
function can_elide_return_type_check (line 294) | static inline bool can_elide_return_type_check(
function opline_supports_assign_contraction (line 321) | static bool opline_supports_assign_contraction(
function variable_defined_or_used_in_range (line 383) | static bool variable_defined_or_used_in_range(zend_ssa *ssa, int var, in...
function zend_dfa_optimize_calls (line 401) | int zend_dfa_optimize_calls(zend_op_array *op_array, zend_ssa *ssa)
function zend_always_inline (line 482) | static zend_always_inline void take_successor_0(zend_ssa *ssa, int block...
function zend_always_inline (line 492) | static zend_always_inline void take_successor_1(zend_ssa *ssa, int block...
function zend_always_inline (line 503) | static zend_always_inline void take_successor_ex(zend_ssa *ssa, int bloc...
function compress_block (line 516) | static void compress_block(zend_op_array *op_array, zend_basic_block *bl...
function replace_predecessor (line 529) | static void replace_predecessor(zend_ssa *ssa, int block_id, int old_pre...
function zend_ssa_replace_control_link (line 580) | static void zend_ssa_replace_control_link(zend_op_array *op_array, zend_...
function zend_ssa_unlink_block (line 653) | static void zend_ssa_unlink_block(zend_op_array *op_array, zend_ssa *ssa...
function zend_dfa_optimize_jmps (line 686) | static int zend_dfa_optimize_jmps(zend_op_array *op_array, zend_ssa *ssa)
function zend_dfa_try_to_replace_result (line 965) | static bool zend_dfa_try_to_replace_result(zend_op_array *op_array, zend...
function zend_dfa_optimize_op_array (line 1037) | void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_...
function zend_optimize_dfa (line 1665) | void zend_optimize_dfa(zend_op_array *op_array, zend_optimizer_ctx *ctx)
FILE: Zend/Optimizer/escape_analysis.c
function zend_always_inline (line 34) | static zend_always_inline void union_find_init(int *parent, int *size, i...
function zend_always_inline (line 45) | static zend_always_inline int union_find_root(int *parent, int i) /* {{{ */
function zend_always_inline (line 59) | static zend_always_inline void union_find_unite(int *parent, int *size, ...
function zend_result (line 76) | static zend_result zend_build_equi_escape_sets(int *parent, zend_op_arra...
function is_allocation_def (line 150) | static bool is_allocation_def(zend_op_array *op_array, zend_ssa *ssa, in...
function is_local_def (line 221) | static bool is_local_def(zend_op_array *op_array, zend_ssa *ssa, int def...
function is_escape_use (line 271) | static bool is_escape_use(zend_op_array *op_array, zend_ssa *ssa, int us...
function zend_result (line 382) | zend_result zend_ssa_escape_analysis(const zend_script *script, zend_op_...
FILE: Zend/Optimizer/nop_removal.c
function zend_optimizer_nop_removal (line 33) | void zend_optimizer_nop_removal(zend_op_array *op_array, zend_optimizer_...
FILE: Zend/Optimizer/optimize_func_calls.c
type optimizer_call_info (line 31) | typedef struct _optimizer_call_info {
function zend_delete_call_instructions (line 40) | static void zend_delete_call_instructions(zend_op_array *op_array, zend_...
function zend_try_inline_call (line 79) | static void zend_try_inline_call(zend_op_array *op_array, zend_op *fcall...
function has_known_send_mode (line 138) | static bool has_known_send_mode(const optimizer_call_info *info, uint32_...
function zend_optimize_func_calls (line 151) | void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ct...
FILE: Zend/Optimizer/optimize_temp_vars_5.c
function zend_optimize_temporary_variables (line 43) | void zend_optimize_temporary_variables(zend_op_array *op_array, zend_opt...
FILE: Zend/Optimizer/pass1.c
function replace_by_const_or_qm_assign (line 43) | static void replace_by_const_or_qm_assign(zend_op_array *op_array, zend_...
function zend_optimizer_pass1 (line 60) | void zend_optimizer_pass1(zend_op_array *op_array, zend_optimizer_ctx *ctx)
FILE: Zend/Optimizer/pass3.c
function zend_always_inline (line 34) | static zend_always_inline bool in_hitlist(zend_op *target, zend_op **jmp...
function zend_optimizer_pass3 (line 53) | void zend_optimizer_pass3(zend_op_array *op_array, zend_optimizer_ctx *ctx)
FILE: Zend/Optimizer/sccp.c
type sccp_ctx (line 78) | typedef struct _sccp_ctx {
function scp_dump_value (line 101) | static void scp_dump_value(zval *zv) {
function empty_partial_array (line 119) | static void empty_partial_array(zval *zv)
function dup_partial_array (line 125) | static void dup_partial_array(zval *dst, const zval *src)
function empty_partial_object (line 131) | static void empty_partial_object(zval *zv)
function dup_partial_object (line 137) | static void dup_partial_object(zval *dst, const zval *src)
function value_known (line 143) | static inline bool value_known(zval *zv) {
function set_value (line 149) | static void set_value(scdf_ctx *scdf, sccp_ctx *ctx, int var, const zval...
function zval (line 189) | static zval *get_op1_value(sccp_ctx *ctx, zend_op *opline, const zend_ss...
function zval (line 199) | static zval *get_op2_value(sccp_ctx *ctx, const zend_op *opline, const z...
function can_replace_op1 (line 209) | static bool can_replace_op1(
function can_replace_op2 (line 279) | static bool can_replace_op2(
function try_replace_op1 (line 292) | static bool try_replace_op1(
function try_replace_op2 (line 305) | static bool try_replace_op2(
function zend_result (line 318) | static inline zend_result ct_eval_binary_op(zval *result, uint8_t binop,...
function zend_result (line 327) | static inline zend_result ct_eval_bool_cast(zval *result, zval *op) {
function zend_result (line 343) | static inline zend_result zval_to_string_offset(zend_long *result, zval ...
function zend_result (line 359) | static inline zend_result fetch_array_elem(zval **result, zval *op1, zva...
function zend_result (line 389) | static inline zend_result ct_eval_fetch_dim(zval *result, zval *op1, zva...
function zend_result (line 410) | static inline zend_result ct_eval_isset_isempty(zval *result, uint32_t e...
function zend_result (line 426) | static inline zend_result ct_eval_isset_dim(zval *result, uint32_t exten...
function zend_result (line 445) | static inline zend_result ct_eval_del_array_elem(zval *result, const zva...
function zend_result (line 479) | static inline zend_result ct_eval_add_array_elem(zval *result, zval *val...
function zend_result (line 528) | static inline zend_result ct_eval_add_array_unpack(zval *result, zval *a...
function zend_result (line 550) | static inline zend_result ct_eval_assign_dim(zval *result, zval *value, ...
function zend_result (line 589) | static inline zend_result fetch_obj_prop(zval **result, zval *op1, zval ...
function zend_result (line 599) | static inline zend_result ct_eval_fetch_obj(zval *result, zval *op1, zva...
function zend_result (line 610) | static inline zend_result ct_eval_isset_obj(zval *result, uint32_t exten...
function zend_result (line 626) | static inline zend_result ct_eval_del_obj_prop(zval *result, const zval ...
function zend_result (line 640) | static inline zend_result ct_eval_add_obj_prop(zval *result, zval *value...
function zend_result (line 653) | static inline zend_result ct_eval_assign_obj(zval *result, zval *value, ...
function zend_result (line 666) | static inline zend_result ct_eval_incdec(zval *result, uint8_t opcode, z...
function ct_eval_type_check (line 693) | static inline void ct_eval_type_check(zval *result, uint32_t type_mask, ...
function zend_result (line 703) | static inline zend_result ct_eval_in_array(zval *result, uint32_t extend...
function zend_result (line 738) | static inline zend_result ct_eval_array_key_exists(zval *result, zval *o...
function can_ct_eval_func_call (line 758) | static bool can_ct_eval_func_call(zend_function *func, zend_string *name...
function zend_result (line 792) | static inline zend_result ct_eval_func_call_ex(
function zend_result (line 852) | static inline zend_result ct_eval_func_call(
function sccp_visit_instr (line 871) | static void sccp_visit_instr(scdf_ctx *scdf, zend_op *opline, zend_ssa_o...
function zval (line 1770) | static zval *value_from_type_and_range(sccp_ctx *ctx, int var_num, zval ...
function sccp_mark_feasible_successors (line 1822) | static void sccp_mark_feasible_successors(
function join_hash_tables (line 1949) | static void join_hash_tables(HashTable *ret, HashTable *ht1, HashTable *...
function zend_result (line 1972) | static zend_result join_partial_arrays(zval *a, zval *b)
function zend_result (line 1989) | static zend_result join_partial_objects(zval *a, zval *b)
function join_phi_values (line 2005) | static void join_phi_values(zval *a, zval *b, bool escape) {
function sccp_visit_phi (line 2037) | static void sccp_visit_phi(scdf_ctx *scdf, zend_ssa_phi *phi) {
function remove_call (line 2082) | static int remove_call(sccp_ctx *ctx, zend_op *opline, zend_ssa_op *ssa_op)
function try_remove_definition (line 2121) | static int try_remove_definition(sccp_ctx *ctx, int var_num, zend_ssa_va...
function replace_constant_operands (line 2369) | static int replace_constant_operands(sccp_ctx *ctx) {
function sccp_context_init (line 2436) | static void sccp_context_init(zend_optimizer_ctx *ctx, sccp_ctx *sccp,
function sccp_context_free (line 2460) | static void sccp_context_free(sccp_ctx *sccp) {
function sccp_optimize_op_array (line 2467) | int sccp_optimize_op_array(zend_optimizer_ctx *ctx, zend_op_array *op_ar...
FILE: Zend/Optimizer/scdf.c
function scdf_mark_edge_feasible (line 54) | void scdf_mark_edge_feasible(scdf_ctx *scdf, int from, int to) {
function scdf_init (line 82) | void scdf_init(zend_optimizer_ctx *ctx, scdf_ctx *scdf, zend_op_array *o...
function scdf_solve (line 103) | void scdf_solve(scdf_ctx *scdf, const char *name) {
function is_live_loop_var_free (line 187) | static bool is_live_loop_var_free(
function kept_alive_by_loop_var_free (line 208) | static bool kept_alive_by_loop_var_free(scdf_ctx *scdf, const zend_basic...
function cleanup_loop_var_free_block (line 223) | static uint32_t cleanup_loop_var_free_block(scdf_ctx *scdf, zend_basic_b...
function scdf_remove_unreachable_blocks (line 259) | uint32_t scdf_remove_unreachable_blocks(scdf_ctx *scdf) {
FILE: Zend/Optimizer/scdf.h
type scdf_ctx (line 24) | typedef struct _scdf_ctx {
function scdf_add_to_worklist (line 55) | static inline void scdf_add_to_worklist(scdf_ctx *scdf, int var_num) {
function scdf_add_def_to_worklist (line 69) | static inline void scdf_add_def_to_worklist(scdf_ctx *scdf, int var_num) {
function scdf_edge (line 78) | static inline uint32_t scdf_edge(const zend_cfg *cfg, int from, int to) {
function scdf_is_edge_feasible (line 92) | static inline bool scdf_is_edge_feasible(const scdf_ctx *scdf, int from,...
FILE: Zend/Optimizer/ssa_integrity.c
function is_in_use_chain (line 24) | static inline bool is_in_use_chain(zend_ssa *ssa, int var, int check) {
function is_in_phi_use_chain (line 34) | static inline bool is_in_phi_use_chain(zend_ssa *ssa, int var, zend_ssa_...
function is_used_by_op (line 44) | static inline bool is_used_by_op(zend_ssa *ssa, int op, int check) {
function is_defined_by_op (line 51) | static inline bool is_defined_by_op(zend_ssa *ssa, int op, int check) {
function is_in_phi_sources (line 58) | static inline bool is_in_phi_sources(zend_ssa *ssa, zend_ssa_phi *phi, i...
function is_in_predecessors (line 68) | static inline bool is_in_predecessors(zend_cfg *cfg, zend_basic_block *b...
function is_in_successors (line 78) | static inline bool is_in_successors(zend_basic_block *block, int check) {
function is_var_type (line 88) | static inline bool is_var_type(uint8_t type) {
function is_defined (line 92) | static inline bool is_defined(const zend_ssa *ssa, const zend_op_array *...
function ssa_verify_integrity (line 116) | void ssa_verify_integrity(zend_op_array *op_array, zend_ssa *ssa, const ...
FILE: Zend/Optimizer/zend_call_graph.c
function zend_op_array_calc (line 29) | static void zend_op_array_calc(zend_op_array *op_array, void *context)
function zend_op_array_collect (line 35) | static void zend_op_array_collect(zend_op_array *op_array, void *context)
function ZEND_API (line 46) | ZEND_API void zend_analyze_calls(zend_arena **arena, zend_script *script...
function zend_is_indirectly_recursive (line 172) | static bool zend_is_indirectly_recursive(zend_op_array *root, zend_op_ar...
function zend_analyze_recursion (line 198) | static void zend_analyze_recursion(zend_call_graph *call_graph)
function zend_sort_op_arrays (line 234) | static void zend_sort_op_arrays(zend_call_graph *call_graph)
function ZEND_API (line 241) | ZEND_API void zend_build_call_graph(zend_arena **arena, zend_script *scr...
function ZEND_API (line 253) | ZEND_API void zend_analyze_call_graph(zend_arena **arena, zend_script *s...
function ZEND_API (line 265) | ZEND_API zend_call_info **zend_build_call_map(zend_arena **arena, zend_f...
FILE: Zend/Optimizer/zend_call_graph.h
type zend_send_arg_info (line 26) | typedef struct _zend_send_arg_info {
type _zend_call_info (line 30) | struct _zend_call_info {
type _zend_func_info (line 46) | struct _zend_func_info {
type zend_call_graph (line 56) | typedef struct _zend_call_graph {
FILE: Zend/Optimizer/zend_cfg.c
function zend_mark_reachable (line 27) | static void zend_mark_reachable(zend_op *opcodes, zend_cfg *cfg, zend_ba...
function zend_mark_reachable_blocks (line 107) | static void zend_mark_reachable_blocks(const zend_op_array *op_array, ze...
function zend_cfg_remark_reachable_blocks (line 232) | void zend_cfg_remark_reachable_blocks(const zend_op_array *op_array, zen...
function initialize_block (line 255) | static void initialize_block(zend_basic_block *block) {
function ZEND_API (line 273) | ZEND_API void zend_build_cfg(zend_arena **arena, const zend_op_array *op...
function ZEND_API (line 595) | ZEND_API void zend_cfg_build_predecessors(zend_arena **arena, zend_cfg *...
function compute_postnum_recursive (line 657) | static void compute_postnum_recursive(
function ZEND_API (line 676) | ZEND_API void zend_cfg_compute_dominators_tree(const zend_op_array *op_a...
function dominates (line 769) | static bool dominates(zend_basic_block *blocks, int a, int b) /* {{{ */
function ZEND_API (line 778) | ZEND_API void zend_cfg_identify_loops(const zend_op_array *op_array, zen...
FILE: Zend/Optimizer/zend_cfg.h
type zend_basic_block (line 42) | typedef struct _zend_basic_block {
type zend_cfg (line 84) | typedef struct _zend_cfg {
FILE: Zend/Optimizer/zend_dfg.c
function zend_always_inline (line 22) | static zend_always_inline void _zend_dfg_add_use_def_op(const zend_op_ar...
function ZEND_API (line 246) | ZEND_API void zend_dfg_add_use_def_op(const zend_op_array *op_array, con...
function zend_build_dfg (line 252) | void zend_build_dfg(const zend_op_array *op_array, const zend_cfg *cfg, ...
FILE: Zend/Optimizer/zend_dfg.h
type zend_dfg (line 25) | typedef struct _zend_dfg {
FILE: Zend/Optimizer/zend_dump.c
function zend_dump_ht (line 28) | void zend_dump_ht(HashTable *ht)
function zend_dump_const (line 51) | void zend_dump_const(const zval *zv)
function zend_dump_class_fetch_type (line 85) | static void zend_dump_class_fetch_type(uint32_t fetch_type)
function zend_dump_unused_op (line 118) | static void zend_dump_unused_op(const zend_op *opline, znode_op op, uint...
function ZEND_API (line 140) | ZEND_API void zend_dump_var(const zend_op_array *op_array, uint8_t var_t...
function zend_dump_range (line 153) | static void zend_dump_range(const zend_ssa_range *r)
function zend_dump_type_info (line 175) | static void zend_dump_type_info(uint32_t info, zend_class_entry *ce, int...
function zend_dump_ssa_var_info (line 359) | static void zend_dump_ssa_var_info(const zend_ssa *ssa, int ssa_var_num,...
function ZEND_API (line 369) | ZEND_API void zend_dump_ssa_var(const zend_op_array *op_array, const zen...
function zend_dump_type_constraint (line 394) | static void zend_dump_type_constraint(const zend_op_array *op_array, con...
function zend_dump_range_constraint (line 400) | static void zend_dump_range_constraint(const zend_op_array *op_array, co...
function ZEND_API (line 442) | ZEND_API void zend_dump_op(const zend_op_array *op_array, const zend_bas...
function ZEND_API (line 759) | ZEND_API void zend_dump_op_line(const zend_op_array *op_array, const zen...
function zend_dump_block_info (line 783) | static void zend_dump_block_info(const zend_cfg *cfg, int n, uint32_t du...
function zend_dump_block_header (line 881) | static void zend_dump_block_header(const zend_cfg *cfg, const zend_op_ar...
function zend_dump_op_array_name (line 917) | void zend_dump_op_array_name(const zend_op_array *op_array)
function ZEND_API (line 930) | ZEND_API void zend_dump_op_array(const zend_op_array *op_array, uint32_t...
function zend_dump_dominators (line 1163) | void zend_dump_dominators(const zend_op_array *op_array, const zend_cfg ...
function zend_dump_ssa_variables (line 1178) | void zend_dump_ssa_variables(const zend_op_array *op_array, const zend_s...
function zend_dump_var_set (line 1203) | static void zend_dump_var_set(const zend_op_array *op_array, const char ...
function zend_dump_dfg (line 1222) | void zend_dump_dfg(const zend_op_array *op_array, const zend_cfg *cfg, c...
function zend_dump_phi_placement (line 1238) | void zend_dump_phi_placement(const zend_op_array *op_array, const zend_s...
FILE: Zend/Optimizer/zend_func_info.c
type func_info_t (line 34) | typedef struct _func_info_t {
function zend_range_info (line 52) | static uint32_t zend_range_info(const zend_call_info *call_info, const z...
function zend_get_internal_func_info (line 101) | uint32_t zend_get_internal_func_info(
function ZEND_API (line 132) | ZEND_API uint32_t zend_get_func_info(
function zend_func_info_add (line 201) | static void zend_func_info_add(const func_info_t *func_infos, size_t n)
function zend_result (line 214) | zend_result zend_func_info_startup(void)
function zend_result (line 231) | zend_result zend_func_info_shutdown(void)
FILE: Zend/Optimizer/zend_func_info.h
type zend_func_info (line 44) | typedef struct _zend_func_info zend_func_info;
type zend_call_info (line 45) | typedef struct _zend_call_info zend_call_info;
FILE: Zend/Optimizer/zend_inference.c
function add_will_overflow (line 165) | static inline bool add_will_overflow(zend_long a, zend_long b) {
function sub_will_overflow (line 170) | static inline bool sub_will_overflow(zend_long a, zend_long b) {
function zend_ssa_check_scc_var (line 178) | static void zend_ssa_check_scc_var(const zend_op_array *op_array, zend_s...
function ZEND_API (line 219) | ZEND_API void zend_ssa_find_sccs(const zend_op_array *op_array, zend_ssa...
type zend_scc_iterator (line 260) | typedef struct _zend_scc_iterator {
function zend_scc_next (line 269) | static int zend_scc_next(const zend_op_array *op_array, zend_ssa *ssa, i...
function zend_ssa_check_scc_var (line 388) | static void zend_ssa_check_scc_var(const zend_op_array *op_array, zend_s...
function ZEND_API (line 443) | ZEND_API void zend_ssa_find_sccs(const zend_op_array *op_array, zend_ssa...
function ZEND_API (line 490) | ZEND_API void zend_ssa_find_false_dependencies(const zend_op_array *op_a...
function zend_ulong (line 546) | static zend_ulong minOR(zend_ulong a, zend_ulong b, zend_ulong c, zend_u...
function zend_ulong (line 570) | static zend_ulong maxOR(zend_ulong a, zend_ulong b, zend_ulong c, zend_u...
function zend_ulong (line 593) | static zend_ulong minAND(zend_ulong a, zend_ulong b, zend_ulong c, zend_...
function zend_ulong (line 616) | static zend_ulong maxAND(zend_ulong a, zend_ulong b, zend_ulong c, zend_...
function zend_ssa_range_or (line 653) | static void zend_ssa_range_or(zend_long a, zend_long b, zend_long c, zen...
function zend_ssa_range_and (line 701) | static void zend_ssa_range_and(zend_long a, zend_long b, zend_long c, ze...
function zend_abs_range (line 738) | static inline bool zend_abs_range(
function zend_long (line 760) | static inline zend_long safe_shift_left(zend_long n, zend_long s) {
function shift_left_overflows (line 764) | static inline bool shift_left_overflows(zend_long n, zend_long s) {
function float_div (line 775) | static void float_div(zend_long a, zend_long b, zend_long *r1, zend_long...
function zend_inference_calc_binary_op_range (line 786) | static bool zend_inference_calc_binary_op_range(
function zend_inference_calc_range (line 1071) | static bool zend_inference_calc_range(const zend_op_array *op_array, con...
function ZEND_API (line 1252) | ZEND_API bool zend_inference_propagate_range(const zend_op_array *op_arr...
function zend_inference_init_range (line 1600) | static void zend_inference_init_range(const zend_op_array *op_array, zen...
function zend_inference_widening_meet (line 1616) | static bool zend_inference_widening_meet(zend_ssa_var_info *var_info, ze...
function zend_ssa_range_widening (line 1648) | static bool zend_ssa_range_widening(const zend_op_array *op_array, zend_...
function zend_inference_narrowing_meet (line 1661) | static bool zend_inference_narrowing_meet(zend_ssa_var_info *var_info, z...
function zend_ssa_range_narrowing (line 1693) | static bool zend_ssa_range_narrowing(const zend_op_array *op_array, zend...
function zend_check_inner_cycles (line 1717) | static bool zend_check_inner_cycles(const zend_op_array *op_array, zend_...
function zend_infer_ranges_warmup (line 1729) | static void zend_infer_ranges_warmup(const zend_op_array *op_array, zend...
function zend_infer_ranges (line 1827) | static void zend_infer_ranges(const zend_op_array *op_array, zend_ssa *s...
function get_ssa_alias_types (line 1944) | static uint32_t get_ssa_alias_types(zend_ssa_alias_kind alias) {
function add_usages (line 2031) | static void add_usages(const zend_op_array *op_array, zend_ssa *ssa, zen...
function emit_type_narrowing_warning (line 2084) | static void emit_type_narrowing_warning(const zend_op_array *op_array, z...
function ZEND_FASTCALL (line 2098) | ZEND_FASTCALL zend_array_type_info(const zval *zv)
function ZEND_API (line 2132) | ZEND_API uint32_t zend_array_element_type(uint32_t t1, uint8_t op_type, ...
function assign_dim_array_result_type (line 2193) | static uint32_t assign_dim_array_result_type(
function assign_dim_result_type (line 2238) | static uint32_t assign_dim_result_type(
function binary_op_result_type (line 2259) | static uint32_t binary_op_result_type(
function zend_convert_type_declaration_mask (line 2358) | static uint32_t zend_convert_type_declaration_mask(uint32_t type_mask) {
function zend_convert_type (line 2375) | static uint32_t zend_convert_type(const zend_script *script, zend_type t...
function ZEND_API (line 2405) | ZEND_API uint32_t zend_fetch_arg_info_type(const zend_script *script, co...
function zend_property_info (line 2410) | static const zend_property_info *lookup_prop_info(const zend_class_entry...
function zend_property_info (line 2437) | static const zend_property_info *zend_fetch_prop_info(const zend_op_arra...
function zend_property_info (line 2460) | static const zend_property_info *zend_fetch_static_prop_info(const zend_...
function zend_fetch_prop_type (line 2496) | static uint32_t zend_fetch_prop_type(const zend_script *script, const ze...
function result_may_be_separated (line 2508) | static bool result_may_be_separated(zend_ssa *ssa, zend_ssa_op *ssa_op)
function zend_always_inline (line 2527) | static zend_always_inline zend_result _zend_update_type_info(
function ZEND_API (line 4118) | ZEND_API zend_result zend_update_type_info(
function get_class_entry_rank (line 4130) | static uint32_t get_class_entry_rank(zend_class_entry *ce) {
function zend_class_entry (line 4142) | static zend_class_entry *join_class_entries(
function safe_instanceof (line 4176) | static bool safe_instanceof(zend_class_entry *ce1, zend_class_entry *ce2) {
function zend_result (line 4187) | static zend_result zend_infer_types_ex(const zend_op_array *op_array, co...
function is_narrowable_instr (line 4271) | static bool is_narrowable_instr(zend_op *opline) {
function is_effective_op1_double_cast (line 4276) | static bool is_effective_op1_double_cast(zend_op *opline, zval *op2) {
function is_effective_op2_double_cast (line 4282) | static bool is_effective_op2_double_cast(zend_op *opline, zval *op1) {
function can_convert_to_double (line 4309) | static bool can_convert_to_double(
function zend_result (line 4441) | static zend_result zend_type_narrowing(const zend_op_array *op_array, co...
function is_recursive_tail_call (line 4494) | static bool is_recursive_tail_call(const zend_op_array *op_array,
function zend_get_return_info_from_signature_only (line 4515) | uint32_t zend_get_return_info_from_signature_only(
function ZEND_API (line 4542) | ZEND_API void zend_init_func_return_info(
function zend_func_return_info (line 4556) | static void zend_func_return_info(const zend_op_array *op_array,
function zend_result (line 4713) | static zend_result zend_infer_types(const zend_op_array *op_array, const...
function zend_mark_cv_references (line 4746) | static void zend_mark_cv_references(const zend_op_array *op_array, const...
function ZEND_API (line 4884) | ZEND_API zend_result zend_ssa_inference(zend_arena **arena, const zend_o...
function ZEND_API (line 4925) | ZEND_API bool zend_may_throw_ex(const zend_op *opline, const zend_ssa_op...
function ZEND_API (line 5340) | ZEND_API bool zend_may_throw(const zend_op *opline, const zend_ssa_op *s...
FILE: Zend/Optimizer/zend_inference.h
function zend_always_inline (line 148) | static zend_always_inline uint32_t _const_op_type(const zval *zv) {
function zend_always_inline (line 165) | static zend_always_inline uint32_t get_ssa_var_info(const zend_ssa *ssa,...
function zend_always_inline (line 209) | static zend_always_inline bool zend_add_will_overflow(zend_long a, zend_...
function zend_always_inline (line 213) | static zend_always_inline bool zend_sub_will_overflow(zend_long a, zend_...
FILE: Zend/Optimizer/zend_optimizer.c
function zend_optimizer_collect_constant (line 44) | void zend_optimizer_collect_constant(zend_optimizer_ctx *ctx, zval *name...
function zend_result (line 56) | zend_result zend_optimizer_eval_binary_op(zval *result, uint8_t opcode, ...
function zend_result (line 67) | zend_result zend_optimizer_eval_unary_op(zval *result, uint8_t opcode, z...
function zend_result (line 83) | zend_result zend_optimizer_eval_cast(zval *result, uint32_t type, zval *...
function zend_result (line 115) | zend_result zend_optimizer_eval_strlen(zval *result, const zval *op1) /*...
function zend_result (line 125) | zend_result zend_optimizer_eval_special_func_call(
function zend_optimizer_get_collected_constant (line 203) | bool zend_optimizer_get_collected_constant(HashTable *constants, zval *n...
function zend_optimizer_convert_to_free_op1 (line 214) | void zend_optimizer_convert_to_free_op1(zend_op_array *op_array, zend_op...
function zend_optimizer_add_literal (line 233) | int zend_optimizer_add_literal(zend_op_array *op_array, const zval *zv)
function zend_optimizer_add_literal_string (line 243) | static inline int zend_optimizer_add_literal_string(zend_op_array *op_ar...
function drop_leading_backslash (line 250) | static inline void drop_leading_backslash(zval *val) {
function alloc_cache_slots (line 258) | static inline uint32_t alloc_cache_slots(zend_op_array *op_array, uint32...
function zend_optimizer_update_op1_const (line 277) | bool zend_optimizer_update_op1_const(zend_op_array *op_array,
function zend_optimizer_update_op2_const (line 438) | bool zend_optimizer_update_op2_const(zend_op_array *op_array,
function zend_optimizer_replace_by_const (line 620) | bool zend_optimizer_replace_by_const(zend_op_array *op_array,
function zend_optimizer_migrate_jump (line 708) | void zend_optimizer_migrate_jump(zend_op_array *op_array, zend_op *new_o...
function zend_optimizer_shift_jump (line 753) | void zend_optimizer_shift_jump(zend_op_array *op_array, zend_op *opline,...
function zend_optimizer_ignore_class (line 797) | static bool zend_optimizer_ignore_class(zval *ce_zv, zend_string *filename)
function zend_optimizer_ignore_function (line 812) | static bool zend_optimizer_ignore_function(zval *fbc_zv, zend_string *fi...
function zend_class_entry (line 833) | zend_class_entry *zend_optimizer_get_class_entry(
function zend_class_entry (line 852) | zend_class_entry *zend_optimizer_get_class_entry_from_op1(
function zend_class_constant (line 869) | const zend_class_constant *zend_fetch_class_const_info(
function zend_function (line 921) | zend_function *zend_optimizer_get_called_func(
function zend_optimizer_classify_function (line 1035) | uint32_t zend_optimizer_classify_function(zend_string *name, uint32_t nu...
function zend_op (line 1055) | zend_op *zend_optimizer_get_loop_var_def(const zend_op_array *op_array, ...
function zend_optimize (line 1067) | static void zend_optimize(zend_op_array *op_array,
function zend_revert_pass_two (line 1185) | static void zend_revert_pass_two(zend_op_array *op_array)
function zend_redo_pass_two (line 1215) | static void zend_redo_pass_two(zend_op_array *op_array)
function zend_redo_pass_two_ex (line 1325) | static void zend_redo_pass_two_ex(zend_op_array *op_array, zend_ssa *ssa)
function zend_optimize_op_array (line 1467) | static void zend_optimize_op_array(zend_op_array *op_array,
function zend_adjust_fcall_stack_size (line 1484) | static void zend_adjust_fcall_stack_size(zend_op_array *op_array, zend_o...
function zend_adjust_fcall_stack_size_graph (line 1504) | static void zend_adjust_fcall_stack_size_graph(zend_op_array *op_array)
function needs_live_range (line 1523) | static bool needs_live_range(zend_op_array *op_array, zend_op *def_oplin...
function zend_foreach_op_array_helper (line 1543) | static void zend_foreach_op_array_helper(
function zend_foreach_op_array (line 1551) | void zend_foreach_op_array(zend_script *script, zend_op_array_func_t fun...
function step_optimize_op_array (line 1591) | static void step_optimize_op_array(zend_op_array *op_array, void *contex...
function step_adjust_fcall_stack_size (line 1595) | static void step_adjust_fcall_stack_size(zend_op_array *op_array, void *...
function step_dump_after_optimizer (line 1599) | static void step_dump_after_optimizer(zend_op_array *op_array, void *con...
function zend_optimizer_call_registered_passes (line 1603) | static void zend_optimizer_call_registered_passes(zend_script *script, v...
function ZEND_API (line 1613) | ZEND_API void zend_optimize_script(zend_script *script, zend_long optimi...
function ZEND_API (line 1775) | ZEND_API int zend_optimizer_register_pass(zend_optimizer_pass_t pass)
function ZEND_API (line 1791) | ZEND_API void zend_optimizer_unregister_pass(int idx)
function zend_result (line 1796) | zend_result zend_optimizer_startup(void)
function zend_result (line 1801) | zend_result zend_optimizer_shutdown(void)
FILE: Zend/Optimizer/zend_optimizer.h
type zend_script (line 86) | typedef struct _zend_script {
FILE: Zend/Optimizer/zend_optimizer_internal.h
type zend_optimizer_ctx (line 46) | typedef struct _zend_optimizer_ctx {
function zend_optimizer_is_loop_var_free (line 76) | static inline bool zend_optimizer_is_loop_var_free(const zend_op *opline) {
FILE: Zend/Optimizer/zend_ssa.c
function dominates (line 28) | static bool dominates(const zend_basic_block *blocks, int a, int b) {
function will_rejoin (line 35) | static bool will_rejoin(
function needs_pi (line 61) | static bool needs_pi(const zend_op_array *op_array, const zend_dfg *dfg,...
function zend_ssa_phi (line 93) | static zend_ssa_phi *add_pi(
function pi_range (line 132) | static void pi_range(
function pi_range_equals (line 150) | static inline void pi_range_equals(zend_ssa_phi *phi, int var, zend_long...
function pi_range_not_equals (line 153) | static inline void pi_range_not_equals(zend_ssa_phi *phi, int var, zend_...
function pi_range_min (line 156) | static inline void pi_range_min(zend_ssa_phi *phi, int var, zend_long va...
function pi_range_max (line 159) | static inline void pi_range_max(zend_ssa_phi *phi, int var, zend_long va...
function pi_type_mask (line 163) | static void pi_type_mask(zend_ssa_phi *phi, uint32_t type_mask) {
function pi_not_type_mask (line 172) | static inline void pi_not_type_mask(zend_ssa_phi *phi, uint32_t type_mas...
function mask_for_type_check (line 176) | static inline uint32_t mask_for_type_check(uint32_t type) {
function find_adjusted_tmp_var (line 186) | static int find_adjusted_tmp_var(const zend_op_array *op_array, uint32_t...
function place_essa_pis (line 242) | static void place_essa_pis(
function zend_always_inline (line 544) | static zend_always_inline int _zend_ssa_rename_op(const zend_op_array *o...
function ZEND_API (line 814) | ZEND_API int zend_ssa_rename_op(const zend_op_array *op_array, const zen...
function zend_ssa_rename_in_block (line 820) | static void zend_ssa_rename_in_block(const zend_op_array *op_array, uint...
function zend_result (line 914) | static zend_result zend_ssa_rename(const zend_op_array *op_array, uint32...
function ZEND_API (line 996) | ZEND_API zend_result zend_build_ssa(zend_arena **arena, const zend_scrip...
function ZEND_API (line 1144) | ZEND_API void zend_ssa_compute_use_def_chains(zend_arena **arena, const ...
function zend_ssa_unlink_use_chain (line 1262) | void zend_ssa_unlink_use_chain(zend_ssa *ssa, int op, int var) /* {{{ */
function zend_ssa_replace_use_chain (line 1301) | void zend_ssa_replace_use_chain(zend_ssa *ssa, int op, int new_op, int v...
function zend_ssa_remove_instr (line 1341) | void zend_ssa_remove_instr(zend_ssa *ssa, zend_op *opline, zend_ssa_op *...
function zend_ssa_phi (line 1372) | static inline zend_ssa_phi **zend_ssa_next_use_phi_ptr(zend_ssa *ssa, in...
function zend_ssa_remove_use_of_phi_source (line 1391) | static inline void zend_ssa_remove_use_of_phi_source(zend_ssa *ssa, zend...
function zend_ssa_remove_uses_of_phi_sources (line 1403) | static void zend_ssa_remove_uses_of_phi_sources(zend_ssa *ssa, zend_ssa_...
function zend_ssa_remove_phi_from_block (line 1412) | static void zend_ssa_remove_phi_from_block(zend_ssa *ssa, zend_ssa_phi *...
function zend_ssa_remove_defs_of_instr (line 1424) | void zend_ssa_remove_defs_of_instr(zend_ssa *ssa, zend_ssa_op *ssa_op) /...
function zend_ssa_remove_phi_source (line 1441) | static inline void zend_ssa_remove_phi_source(zend_ssa *ssa, zend_ssa_ph...
function zend_ssa_remove_phi (line 1470) | void zend_ssa_remove_phi(zend_ssa *ssa, zend_ssa_phi *phi) /* {{{ */
function zend_ssa_remove_uses_of_var (line 1482) | void zend_ssa_remove_uses_of_var(zend_ssa *ssa, int var_num) /* {{{ */
function zend_ssa_remove_predecessor (line 1515) | void zend_ssa_remove_predecessor(zend_ssa *ssa, int from, int to) /* {{{ */
function zend_ssa_remove_block (line 1561) | void zend_ssa_remove_block(zend_op_array *op_array, zend_ssa *ssa, int i...
function zend_ssa_remove_block_from_cfg (line 1590) | void zend_ssa_remove_block_from_cfg(zend_ssa *ssa, int i) /* {{{ */
function propagate_phi_type_widening (line 1643) | static void propagate_phi_type_widening(zend_ssa *ssa, int var) /* {{{ */
function zend_ssa_rename_var_uses (line 1655) | void zend_ssa_rename_var_uses(zend_ssa *ssa, int old, int new, bool upda...
FILE: Zend/Optimizer/zend_ssa.h
type zend_ssa_range (line 25) | typedef struct _zend_ssa_range {
type zend_ssa_negative_lat (line 32) | typedef enum _zend_ssa_negative_lat {
type zend_ssa_range_constraint (line 42) | typedef struct _zend_ssa_range_constraint {
type zend_ssa_type_constraint (line 51) | typedef struct _zend_ssa_type_constraint {
type zend_ssa_pi_constraint (line 56) | typedef union _zend_ssa_pi_constraint {
type zend_ssa_phi (line 62) | typedef struct _zend_ssa_phi zend_ssa_phi;
type _zend_ssa_phi (line 63) | struct _zend_ssa_phi {
type zend_ssa_block (line 78) | typedef struct _zend_ssa_block {
type zend_ssa_op (line 82) | typedef struct _zend_ssa_op {
type zend_ssa_alias_kind (line 94) | typedef enum _zend_ssa_alias_kind {
type zend_ssa_escape_state (line 100) | typedef enum _zend_ssa_escape_state {
type zend_ssa_var (line 107) | typedef struct _zend_ssa_var {
type zend_ssa_var_info (line 121) | typedef struct _zend_ssa_var_info {
type zend_ssa (line 135) | typedef struct _zend_ssa {
function zend_always_inline (line 162) | static zend_always_inline void _zend_ssa_remove_def(zend_ssa_var *var)
function zend_always_inline (line 170) | static zend_always_inline void zend_ssa_remove_result_def(zend_ssa *ssa,...
function zend_always_inline (line 177) | static zend_always_inline void zend_ssa_remove_op1_def(zend_ssa *ssa, ze...
function zend_always_inline (line 184) | static zend_always_inline void zend_ssa_remove_op2_def(zend_ssa *ssa, ze...
function zend_always_inline (line 193) | static zend_always_inline int zend_ssa_next_use(const zend_ssa_op *ssa_o...
function zend_always_inline (line 205) | static zend_always_inline zend_ssa_phi* zend_ssa_next_use_phi(const zend...
function zend_always_inline (line 220) | static zend_always_inline bool zend_ssa_is_no_val_use(const zend_op *opl...
function zend_always_inline (line 239) | static zend_always_inline void zend_ssa_rename_defs_of_instr(zend_ssa *s...
FILE: Zend/Optimizer/zend_worklist.h
type zend_worklist_stack (line 25) | typedef struct _zend_worklist_stack {
function zend_worklist_stack_prepare (line 40) | static inline void zend_worklist_stack_prepare(zend_arena **arena, zend_...
function zend_worklist_stack_push (line 49) | static inline void zend_worklist_stack_push(zend_worklist_stack *stack, ...
function zend_worklist_stack_peek (line 55) | static inline int zend_worklist_stack_peek(const zend_worklist_stack *st...
function zend_worklist_stack_pop (line 61) | static inline int zend_worklist_stack_pop(zend_worklist_stack *stack)
type zend_worklist (line 67) | typedef struct _zend_worklist {
function zend_worklist_prepare (line 83) | static inline void zend_worklist_prepare(zend_arena **arena, zend_workli...
function zend_worklist_len (line 90) | static inline int zend_worklist_len(const zend_worklist *worklist)
function zend_worklist_push (line 95) | static inline bool zend_worklist_push(zend_worklist *worklist, int i)
function zend_worklist_peek (line 108) | static inline int zend_worklist_peek(const zend_worklist *worklist)
function zend_worklist_pop (line 113) | static inline int zend_worklist_pop(zend_worklist *worklist)
FILE: Zend/bench.php
function simple (line 6) | function simple() {
function simplecall (line 18) | function simplecall() {
function hallo (line 25) | function hallo($a) {
function simpleucall (line 28) | function simpleucall() {
function simpleudcall (line 35) | function simpleudcall() {
function hallo2 (line 40) | function hallo2($a) {
function mandel (line 45) | function mandel() {
function mandel2 (line 85) | function mandel2() {
function Ack (line 99) | function Ack($m, $n){
function ackermann (line 105) | function ackermann($n) {
function ary (line 112) | function ary($n) {
function ary2 (line 125) | function ary2($n) {
function ary3 (line 158) | function ary3($n) {
function fibo_r (line 174) | function fibo_r($n){
function fibo (line 178) | function fibo($n) {
function hash1 (line 185) | function hash1($n) {
function hash2 (line 198) | function hash2($n) {
function gen_random (line 213) | function gen_random ($n) {
function heapsort_r (line 218) | function heapsort_r($n, &$ra) {
function heapsort (line 250) | function heapsort($N) {
function mkmatrix (line 267) | function mkmatrix ($rows, $cols) {
function mmult (line 278) | function mmult ($rows, $cols, $m1, $m2) {
function matrix (line 292) | function matrix($n) {
function nestedloop (line 304) | function nestedloop($n) {
function sieve (line 318) | function sieve($n) {
function strcat (line 337) | function strcat($n) {
function gethrtime (line 348) | function gethrtime()
function start_test (line 354) | function start_test()
function end_test (line 360) | function end_test($start, $name)
function total (line 374) | function total()
FILE: Zend/micro_bench.php
function hallo (line 3) | function hallo() {
function simpleucall (line 6) | function simpleucall($n) {
function simpleudcall (line 11) | function simpleudcall($n) {
function hallo2 (line 16) | function hallo2() {
function simpleicall (line 19) | function simpleicall($n) {
class Foo (line 24) | class Foo {
method read_static (line 29) | static function read_static($n) {
method write_static (line 35) | static function write_static($n) {
method isset_static (line 41) | static function isset_static($n) {
method empty_static (line 47) | static function empty_static($n) {
method f (line 53) | static function f() {
method call_static (line 56) | static function call_static($n) {
method read_prop (line 62) | function read_prop($n) {
method write_prop (line 68) | function write_prop($n) {
method assign_add_prop (line 74) | function assign_add_prop($n) {
method pre_inc_prop (line 80) | function pre_inc_prop($n) {
method pre_dec_prop (line 86) | function pre_dec_prop($n) {
method post_inc_prop (line 92) | function post_inc_prop($n) {
method post_dec_prop (line 98) | function post_dec_prop($n) {
method isset_prop (line 104) | function isset_prop($n) {
method empty_prop (line 110) | function empty_prop($n) {
method g (line 116) | function g() {
method call (line 119) | function call($n) {
method read_const (line 125) | function read_const($n) {
function read_static (line 133) | function read_static($n) {
function write_static (line 139) | function write_static($n) {
function isset_static (line 145) | function isset_static($n) {
function empty_static (line 151) | function empty_static($n) {
function call_static (line 157) | function call_static($n) {
function create_object (line 163) | function create_object($n) {
function read_const (line 171) | function read_const($n) {
function read_auto_global (line 177) | function read_auto_global($n) {
function read_global_var (line 185) | function read_global_var($n) {
function read_hash (line 191) | function read_hash($n) {
function read_str_offset (line 198) | function read_str_offset($n) {
function issetor (line 205) | function issetor($n) {
function issetor2 (line 212) | function issetor2($n) {
function ternary (line 219) | function ternary($n) {
function ternary2 (line 227) | function ternary2($n) {
function empty_loop (line 236) | function empty_loop($n) {
function gethrtime (line 241) | function gethrtime()
function start_test (line 247) | function start_test()
function end_test (line 253) | function end_test($start, $name, $overhead = null)
function total (line 273) | function total()
FILE: Zend/zend.c
function ZEND_INI_MH (line 111) | static ZEND_INI_MH(OnUpdateErrorReporting) /* {{{ */
function ZEND_INI_MH (line 122) | static ZEND_INI_MH(OnUpdateGCEnabled) /* {{{ */
function ZEND_INI_DISP (line 133) | static ZEND_INI_DISP(zend_gc_enabled_displayer_cb) /* {{{ */
function ZEND_INI_MH (line 144) | static ZEND_INI_MH(OnUpdateScriptEncoding) /* {{{ */
function ZEND_INI_MH (line 156) | static ZEND_INI_MH(OnUpdateAssertions) /* {{{ */
function ZEND_INI_MH (line 175) | static ZEND_INI_MH(OnSetExceptionStringParamMaxLen) /* {{{ */
function ZEND_INI_MH (line 188) | static ZEND_INI_MH(OnUpdateMaxAllowedStackSize) /* {{{ */
function ZEND_INI_MH (line 204) | static ZEND_INI_MH(OnUpdateReservedStackSize) /* {{{ */
function ZEND_INI_MH (line 239) | static ZEND_INI_MH(OnUpdateFiberStackSize) /* {{{ */
function zend_vspprintf (line 283) | size_t zend_vspprintf(char **pbuf, size_t max_len, const char *format, v...
function ZEND_API (line 311) | ZEND_API size_t zend_spprintf(char **message, size_t max_len, const char...
function ZEND_API (line 323) | ZEND_API size_t zend_spprintf_unchecked(char **message, size_t max_len, ...
function ZEND_API (line 335) | ZEND_API zend_string *zend_vstrpprintf(size_t max_len, const char *forma...
function ZEND_API (line 353) | ZEND_API zend_string *zend_strpprintf(size_t max_len, const char *format...
function ZEND_API (line 365) | ZEND_API zend_string *zend_strpprintf_unchecked(size_t max_len, const ch...
function print_hash (line 379) | static void print_hash(smart_str *buf, HashTable *ht, int indent, bool i...
function print_flat_hash (line 430) | static void print_flat_hash(smart_str *buf, HashTable *ht) /* {{{ */
function ZEND_API (line 453) | ZEND_API bool zend_make_printable_zval(zval *expr, zval *expr_copy) /* {...
function ZEND_API (line 464) | ZEND_API size_t zend_print_zval(zval *expr, int indent) /* {{{ */
function zend_print_flat_zval_r_to_buf (line 479) | void zend_print_flat_zval_r_to_buf(smart_str *buf, zval *expr) /* {{{ */
function ZEND_API (line 534) | ZEND_API void zend_print_flat_zval_r(zval *expr)
function zend_print_zval_r_to_buf (line 543) | static void zend_print_zval_r_to_buf(smart_str *buf, zval *expr, int ind...
function ZEND_API (line 616) | ZEND_API zend_string *zend_print_zval_r_to_str(zval *expr, int indent) /...
function ZEND_API (line 625) | ZEND_API void zend_print_zval_r(zval *expr, int indent) /* {{{ */
function FILE (line 633) | static FILE *zend_fopen_wrapper(zend_string *filename, zend_string **ope...
function zend_set_default_compile_time_values (line 650) | static void zend_set_default_compile_time_values(void) /* {{{ */
function zend_get_windows_version_info (line 661) | static void zend_get_windows_version_info(OSVERSIONINFOEX *osvi) /* {{{ */
function zend_init_exception_op (line 672) | static void zend_init_exception_op(void) /* {{{ */
function zend_init_call_trampoline_op (line 684) | static void zend_init_call_trampoline_op(void) /* {{{ */
function auto_global_dtor (line 692) | static void auto_global_dtor(zval *zv) /* {{{ */
function auto_global_copy_ctor (line 699) | static void auto_global_copy_ctor(zval *zv) /* {{{ */
function compiler_globals_ctor (line 712) | static void compiler_globals_ctor(zend_compiler_globals *compiler_global...
function compiler_globals_dtor (line 753) | static void compiler_globals_dtor(zend_compiler_globals *compiler_global...
function executor_globals_ctor (line 799) | static void executor_globals_ctor(zend_executor_globals *executor_global...
function executor_globals_persistent_list_dtor (line 852) | static void executor_globals_persistent_list_dtor(void *storage)
function executor_globals_dtor (line 861) | static void executor_globals_dtor(zend_executor_globals *executor_global...
function zend_new_thread_end_handler (line 872) | static void zend_new_thread_end_handler(THREAD_T thread_id) /* {{{ */
function ini_scanner_globals_ctor (line 889) | static void ini_scanner_globals_ctor(zend_ini_scanner_globals *scanner_g...
function php_scanner_globals_ctor (line 895) | static void php_scanner_globals_ctor(zend_php_scanner_globals *scanner_g...
function module_destructor_zval (line 901) | static void module_destructor_zval(zval *zv) /* {{{ */
function php_auto_globals_create_globals (line 908) | static bool php_auto_globals_create_globals(zend_string *name) /* {{{ */
function zend_startup (line 916) | void zend_startup(zend_utility_functions *utility_functions) /* {{{ */
function zend_register_standard_ini_entries (line 1080) | void zend_register_standard_ini_entries(void) /* {{{ */
function zend_result (line 1090) | zend_result zend_post_startup(void) /* {{{ */
function zend_shutdown (line 1158) | void zend_shutdown(void) /* {{{ */
function zend_set_utility_values (line 1232) | void zend_set_utility_values(zend_utility_values *utility_values) /* {{{ */
function ZEND_COLD (line 1239) | ZEND_COLD void zenderror(const char *error) /* {{{ */
function _zend_bailout (line 1252) | void _zend_bailout(const char *filename, uint32_t lineno) /* {{{ */
function ZEND_API (line 1269) | ZEND_API size_t zend_get_page_size(void)
function ZEND_API (line 1284) | ZEND_API void zend_append_version_info(const zend_extension *extension) ...
function ZEND_API (line 1306) | ZEND_API const char *get_zend_version(void) /* {{{ */
function ZEND_API (line 1312) | ZEND_API void zend_activate(void) /* {{{ */
function zend_call_destructors (line 1329) | void zend_call_destructors(void) /* {{{ */
function ZEND_API (line 1337) | ZEND_API void zend_deactivate(void) /* {{{ */
function ZEND_API (line 1393) | ZEND_API void zend_message_dispatcher(zend_long message, const void *dat...
function ZEND_API (line 1401) | ZEND_API zval *zend_get_configuration_directive(zend_string *name) /* {{...
function zend_error_zstr_at (line 1428) | void zend_error_zstr_at(
function ZEND_COLD (line 1592) | static ZEND_COLD void zend_error_va_list(
function ZEND_COLD (line 1601) | static ZEND_COLD void get_filename_lineno(int type, zend_string **filena...
function zend_error_at (line 1642) | void zend_error_at(
function zend_error (line 1666) | void zend_error(int type, const char *format, ...) {
function zend_error_unchecked (line 1670) | void zend_error_unchecked(int type, const char *format, ...) {
function zend_error_at_noreturn (line 1674) | void zend_error_at_noreturn(
function zend_error_noreturn (line 1703) | void zend_error_noreturn(int type, const char *format, ...)
function zend_error_noreturn_unchecked (line 1708) | void zend_error_noreturn_unchecked(int type, const char *format, ...)
function zend_strerror_noreturn (line 1713) | void zend_strerror_noreturn(int type, int errn, const char *message)
function zend_error_zstr (line 1731) | void zend_error_zstr(int type, zend_string *message) {
function ZEND_API (line 1738) | ZEND_API void zend_begin_record_errors(void)
function ZEND_API (line 1746) | ZEND_API void zend_emit_recorded_errors(void)
function ZEND_API (line 1755) | ZEND_API void zend_free_recorded_errors(void)
function zend_throw_error (line 1772) | void zend_throw_error(zend_class_entry *exception_ce, const char *format...
function zend_illegal_container_offset (line 1802) | void zend_illegal_container_offset(const zend_string *container, const z...
function zend_type_error (line 1824) | void zend_type_error(const char *format, ...) /* {{{ */
function zend_argument_count_error (line 1836) | void zend_argument_count_error(const char *format, ...) /* {{{ */
function zend_value_error (line 1849) | void zend_value_error(const char *format, ...) /* {{{ */
function zend_output_debug_string (line 1861) | void zend_output_debug_string(bool trigger_break, const char *format, .....
function zend_user_exception_handler (line 1887) | void zend_user_exception_handler(void) /* {{{ */
function ZEND_API (line 1925) | ZEND_API zend_result zend_execute_script(int type, zval *retval, zend_fi...
function ZEND_API (line 1954) | ZEND_API zend_result zend_execute_scripts(int type, zval *retval, int fi...
function ZEND_API (line 1980) | ZEND_API char *zend_make_compiled_string_description(const char *name) /...
function free_estring (line 2002) | void free_estring(char **str_p) /* {{{ */
function ZEND_API (line 2011) | ZEND_API void zend_map_ptr_reset(void)
function ZEND_API (line 2016) | ZEND_API void *zend_map_ptr_new(void)
function ZEND_API (line 2032) | ZEND_API void *zend_map_ptr_new_static(void)
function ZEND_API (line 2053) | ZEND_API void zend_map_ptr_extend(size_t last)
function ZEND_API (line 2070) | ZEND_API void zend_alloc_ce_cache(zend_string *type_name)
FILE: Zend/zend.h
type _zend_serialize_data (line 79) | struct _zend_serialize_data
type _zend_unserialize_data (line 80) | struct _zend_unserialize_data
type zend_serialize_data (line 82) | typedef struct _zend_serialize_data zend_serialize_data;
type zend_unserialize_data (line 83) | typedef struct _zend_unserialize_data zend_unserialize_data;
type zend_class_name (line 85) | typedef struct _zend_class_name {
type zend_trait_method_reference (line 90) | typedef struct _zend_trait_method_reference {
type zend_trait_precedence (line 95) | typedef struct _zend_trait_precedence {
type zend_trait_alias (line 101) | typedef struct _zend_trait_alias {
type zend_class_mutable_data (line 115) | typedef struct _zend_class_mutable_data {
type zend_class_dependency (line 122) | typedef struct _zend_class_dependency {
type zend_inheritance_cache_entry (line 127) | typedef struct _zend_inheritance_cache_entry zend_inheritance_cache_entry;
type zend_error_info (line 129) | typedef struct _zend_error_info {
type _zend_inheritance_cache_entry (line 136) | struct _zend_inheritance_cache_entry {
type _zend_class_entry (line 147) | struct _zend_class_entry {
type zend_random_bytes_insecure_state (line 239) | typedef union {
type zend_utility_functions (line 244) | typedef struct _zend_utility_functions {
type zend_utility_values (line 262) | typedef struct _zend_utility_values {
function zend_always_inline (line 315) | static zend_always_inline size_t zend_print_variable(zval *var) {
type zend_error_handling_t (line 431) | typedef enum {
type zend_error_handling (line 436) | typedef struct {
FILE: Zend/zend_API.c
function ZEND_API (line 50) | ZEND_API zend_result zend_get_parameters_array_ex(uint32_t param_count, ...
function ZEND_API (line 72) | ZEND_API zend_result zend_copy_parameters_array(uint32_t param_count, zv...
function zend_wrong_param_count (line 94) | void zend_wrong_param_count(void) /* {{{ */
function zend_wrong_property_read (line 103) | void zend_wrong_property_read(zval *object, zval *property)
function ZEND_API (line 112) | ZEND_API const char *zend_get_type_by_const(int type) /* {{{ */
function ZEND_API (line 148) | ZEND_API const char *zend_zval_value_name(const zval *arg)
function ZEND_API (line 167) | ZEND_API const char *zend_zval_type_name(const zval *arg)
function ZEND_API (line 184) | ZEND_API zend_string *zend_zval_get_legacy_type(const zval *arg) /* {{{ */
function zend_wrong_parameters_none_error (line 214) | zend_wrong_parameters_none_error(void) /* {{{ */
function zend_wrong_parameters_count_error (line 225) | void ZEND_FASTCALL zend_wrong_parameters_count_error(uint32_t min_num_ar...
function zend_wrong_parameter_error (line 243) | void ZEND_FASTCALL zend_wrong_parameter_error(int error_code, uint32_t n...
function zend_wrong_parameter_type_error (line 284) | void ZEND_FASTCALL zend_wrong_parameter_type_error(uint32_t num, zend_ex...
function zend_wrong_parameter_class_error (line 305) | void ZEND_FASTCALL zend_wrong_parameter_class_error(uint32_t num, const ...
function zend_wrong_parameter_class_or_null_error (line 315) | void ZEND_FASTCALL zend_wrong_parameter_class_or_null_error(uint32_t num...
function zend_wrong_parameter_class_or_long_error (line 325) | void ZEND_FASTCALL zend_wrong_parameter_class_or_long_error(uint32_t num...
function zend_wrong_parameter_class_or_long_or_null_error (line 335) | void ZEND_FASTCALL zend_wrong_parameter_class_or_long_or_null_error(uint...
function zend_wrong_parameter_class_or_string_error (line 345) | void ZEND_FASTCALL zend_wrong_parameter_class_or_string_error(uint32_t n...
function zend_wrong_parameter_class_or_string_or_null_error (line 355) | void ZEND_FASTCALL zend_wrong_parameter_class_or_string_or_null_error(ui...
function zend_wrong_callback_error (line 365) | void ZEND_FASTCALL zend_wrong_callback_error(uint32_t num, char *error) ...
function zend_wrong_callback_or_null_error (line 374) | void ZEND_FASTCALL zend_wrong_callback_or_null_error(uint32_t num, char ...
function zend_unexpected_extra_named_error (line 383) | zend_unexpected_extra_named_error(void)
function zend_argument_error_variadic (line 391) | void ZEND_FASTCALL zend_argument_error_variadic(zend_class_entry *error_...
function zend_argument_error (line 413) | void zend_argument_error(zend_class_entry *error_ce, uint32_t arg_num, c...
function zend_argument_type_error (line 423) | void zend_argument_type_error(uint32_t arg_num, const char *format, ...)...
function zend_argument_value_error (line 433) | void zend_argument_value_error(uint32_t arg_num, const char *format, ......
function zend_argument_must_not_be_empty_error (line 443) | void zend_argument_must_not_be_empty_error(uint32_t arg_num)
function zend_class_redeclaration_error_ex (line 448) | void zend_class_redeclaration_error_ex(int type, zend_string *new_name, ...
function zend_class_redeclaration_error (line 463) | void zend_class_redeclaration_error(int type, zend_class_entry *old_ce)
function ZEND_FASTCALL (line 468) | ZEND_FASTCALL zend_parse_arg_class(zval *arg, zend_class_entry **pce, ui...
function ZEND_COLD (line 497) | static ZEND_COLD bool zend_null_arg_deprecated(const char *fallback_type...
function ZEND_FASTCALL (line 526) | ZEND_FASTCALL zend_parse_arg_bool_weak(const zval *arg, bool *dest, uint...
function ZEND_FASTCALL (line 540) | ZEND_FASTCALL zend_parse_arg_bool_slow(const zval *arg, bool *dest, uint...
function ZEND_FASTCALL (line 549) | ZEND_FASTCALL zend_flf_parse_arg_bool_slow(const zval *arg, bool *dest, ...
function ZEND_FASTCALL (line 557) | ZEND_FASTCALL zend_parse_arg_long_weak(const zval *arg, zend_long *dest,...
function ZEND_FASTCALL (line 627) | ZEND_FASTCALL zend_parse_arg_long_slow(const zval *arg, zend_long *dest,...
function ZEND_FASTCALL (line 636) | ZEND_FASTCALL zend_flf_parse_arg_long_slow(const zval *arg, zend_long *d...
function ZEND_FASTCALL (line 644) | ZEND_FASTCALL zend_parse_arg_double_weak(const zval *arg, double *dest, ...
function ZEND_FASTCALL (line 676) | ZEND_FASTCALL zend_parse_arg_double_slow(const zval *arg, double *dest, ...
function ZEND_FASTCALL (line 688) | ZEND_FASTCALL zend_parse_arg_number_slow(zval *arg, zval **dest, uint32_...
function ZEND_FASTCALL (line 722) | ZEND_FASTCALL zend_parse_arg_number_or_str_slow(zval *arg, zval **dest, ...
function ZEND_FASTCALL (line 751) | ZEND_FASTCALL zend_parse_arg_str_weak(zval *arg, zend_string **dest, uin...
function ZEND_FASTCALL (line 776) | ZEND_FASTCALL zend_parse_arg_str_slow(zval *arg, zend_string **dest, uin...
function ZEND_FASTCALL (line 785) | ZEND_FASTCALL zend_flf_parse_arg_str_slow(zval *arg, zend_string **dest,...
function ZEND_FASTCALL (line 793) | ZEND_FASTCALL zend_parse_arg_str_or_long_slow(zval *arg, zend_string **d...
function zend_result (line 1091) | static zend_result zend_parse_arg(uint32_t arg_num, zval *arg, va_list *...
function ZEND_API (line 1123) | ZEND_API zend_result zend_parse_parameter(int flags, uint32_t arg_num, z...
function ZEND_COLD (line 1135) | static ZEND_COLD void zend_parse_parameters_debug_error(const char *msg) {
function zend_result (line 1144) | static zend_result zend_parse_va_args(uint32_t num_args, const char *typ...
function ZEND_API (line 1287) | ZEND_API zend_result zend_parse_parameters_ex(int flags, uint32_t num_ar...
function ZEND_API (line 1300) | ZEND_API zend_result zend_parse_parameters(uint32_t num_args, const char...
function ZEND_API (line 1314) | ZEND_API zend_result zend_parse_method_parameters(uint32_t num_args, zva...
function ZEND_API (line 1354) | ZEND_API zend_result zend_parse_method_parameters_ex(int flags, uint32_t...
function ZEND_API (line 1392) | ZEND_API void zend_merge_properties(zval *obj, HashTable *properties) /*...
function zend_class_mutable_data (line 1413) | static zend_class_mutable_data *zend_allocate_mutable_data(zend_class_en...
function ZEND_API (line 1429) | ZEND_API HashTable *zend_separate_class_constants_table(zend_class_entry...
function zend_result (line 1469) | static zend_result update_property(zval *val, zend_property_info *prop_i...
function ZEND_API (line 1490) | ZEND_API zend_result zend_update_class_constant(zend_class_constant *c, ...
function ZEND_API (line 1521) | ZEND_API zend_result zend_update_class_constants(zend_class_entry *class...
function zend_always_inline (line 1664) | static zend_always_inline void _object_properties_init(zend_object *obje...
function ZEND_API (line 1691) | ZEND_API void object_properties_init(zend_object *object, zend_class_ent...
function ZEND_API (line 1698) | ZEND_API void object_properties_init_ex(zend_object *object, HashTable *...
function ZEND_API (line 1731) | ZEND_API void object_properties_load(zend_object *object, HashTable *pro...
function zend_always_inline (line 1812) | static zend_always_inline zend_result _object_and_properties_init(zval *...
function ZEND_API (line 1854) | ZEND_API zend_result object_and_properties_init(zval *arg, zend_class_en...
function ZEND_API (line 1860) | ZEND_API zend_result object_init_ex(zval *arg, zend_class_entry *class_t...
function ZEND_API (line 1866) | ZEND_API zend_result object_init_with_constructor(zval *arg, zend_class_...
function ZEND_API (line 1933) | ZEND_API void object_init(zval *arg) /* {{{ */
function ZEND_API (line 1939) | ZEND_API void add_assoc_long_ex(zval *arg, const char *key, size_t key_l...
function ZEND_API (line 1948) | ZEND_API void add_assoc_null_ex(zval *arg, const char *key, size_t key_l...
function ZEND_API (line 1957) | ZEND_API void add_assoc_bool_ex(zval *arg, const char *key, size_t key_l...
function ZEND_API (line 1966) | ZEND_API void add_assoc_resource_ex(zval *arg, const char *key, size_t k...
function ZEND_API (line 1975) | ZEND_API void add_assoc_double_ex(zval *arg, const char *key, size_t key...
function ZEND_API (line 1984) | ZEND_API void add_assoc_str_ex(zval *arg, const char *key, size_t key_le...
function ZEND_API (line 1993) | ZEND_API void add_assoc_string_ex(zval *arg, const char *key, size_t key...
function ZEND_API (line 2002) | ZEND_API void add_assoc_stringl_ex(zval *arg, const char *key, size_t ke...
function ZEND_API (line 2011) | ZEND_API void add_assoc_array_ex(zval *arg, const char *key, size_t key_...
function ZEND_API (line 2020) | ZEND_API void add_assoc_object_ex(zval *arg, const char *key, size_t key...
function ZEND_API (line 2029) | ZEND_API void add_assoc_reference_ex(zval *arg, const char *key, size_t ...
function ZEND_API (line 2038) | ZEND_API void add_assoc_zval_ex(zval *arg, const char *key, size_t key_l...
function ZEND_API (line 2044) | ZEND_API void add_index_long(zval *arg, zend_ulong index, zend_long n) /...
function ZEND_API (line 2053) | ZEND_API void add_index_null(zval *arg, zend_ulong index) /* {{{ */
function ZEND_API (line 2062) | ZEND_API void add_index_bool(zval *arg, zend_ulong index, bool b) /* {{{ */
function ZEND_API (line 2071) | ZEND_API void add_index_resource(zval *arg, zend_ulong index, zend_resou...
function ZEND_API (line 2080) | ZEND_API void add_index_double(zval *arg, zend_ulong index, double d) /*...
function ZEND_API (line 2089) | ZEND_API void add_index_str(zval *arg, zend_ulong index, zend_string *st...
function ZEND_API (line 2098) | ZEND_API void add_index_string(zval *arg, zend_ulong index, const char *...
function ZEND_API (line 2107) | ZEND_API void add_index_stringl(zval *arg, zend_ulong index, const char ...
function ZEND_API (line 2116) | ZEND_API void add_index_array(zval *arg, zend_ulong index, zend_array *a...
function ZEND_API (line 2125) | ZEND_API void add_index_object(zval *arg, zend_ulong index, zend_object ...
function ZEND_API (line 2134) | ZEND_API void add_index_reference(zval *arg, zend_ulong index, zend_refe...
function ZEND_API (line 2143) | ZEND_API zend_result add_next_index_long(zval *arg, zend_long n) /* {{{ */
function ZEND_API (line 2152) | ZEND_API zend_result add_next_index_null(zval *arg) /* {{{ */
function ZEND_API (line 2161) | ZEND_API zend_result add_next_index_bool(zval *arg, bool b) /* {{{ */
function ZEND_API (line 2170) | ZEND_API zend_result add_next_index_resource(zval *arg, zend_resource *r...
function ZEND_API (line 2179) | ZEND_API zend_result add_next_index_double(zval *arg, double d) /* {{{ */
function ZEND_API (line 2188) | ZEND_API zend_result add_next_index_str(zval *arg, zend_string *str) /* ...
function ZEND_API (line 2197) | ZEND_API zend_result add_next_index_string(zval *arg, const char *str) /...
function ZEND_API (line 2206) | ZEND_API zend_result add_next_index_stringl(zval *arg, const char *str, ...
function ZEND_API (line 2215) | ZEND_API zend_result add_next_index_array(zval *arg, zend_array *arr) /*...
function ZEND_API (line 2224) | ZEND_API zend_result add_next_index_object(zval *arg, zend_object *obj) ...
function ZEND_API (line 2233) | ZEND_API zend_result add_next_index_reference(zval *arg, zend_reference ...
function ZEND_API (line 2242) | ZEND_API zend_result array_set_zval_key(HashTable *ht, zval *key, zval *...
function ZEND_API (line 2283) | ZEND_API void add_property_long_ex(zval *arg, const char *key, size_t ke...
function ZEND_API (line 2292) | ZEND_API void add_property_bool_ex(zval *arg, const char *key, size_t ke...
function ZEND_API (line 2301) | ZEND_API void add_property_null_ex(zval *arg, const char *key, size_t ke...
function ZEND_API (line 2310) | ZEND_API void add_property_resource_ex(zval *arg, const char *key, size_...
function ZEND_API (line 2320) | ZEND_API void add_property_double_ex(zval *arg, const char *key, size_t ...
function ZEND_API (line 2329) | ZEND_API void add_property_str_ex(zval *arg, const char *key, size_t key...
function ZEND_API (line 2339) | ZEND_API void add_property_string_ex(zval *arg, const char *key, size_t ...
function ZEND_API (line 2349) | ZEND_API void add_property_stringl_ex(zval *arg, const char *key, size_t...
function ZEND_API (line 2359) | ZEND_API void add_property_array_ex(zval *arg, const char *key, size_t k...
function ZEND_API (line 2369) | ZEND_API void add_property_object_ex(zval *arg, const char *key, size_t ...
function ZEND_API (line 2379) | ZEND_API void add_property_reference_ex(zval *arg, const char *key, size...
function ZEND_API (line 2389) | ZEND_API void add_property_zval_ex(zval *arg, const char *key, size_t ke...
function ZEND_API (line 2399) | ZEND_API zend_result zend_startup_module_ex(zend_module_entry *module) /...
function zend_startup_module_zval (line 2457) | static int zend_startup_module_zval(zval *zv) /* {{{ */
function zend_sort_modules (line 2465) | static void zend_sort_modules(void *base, size_t count, size_t siz, comp...
function ZEND_API (line 2500) | ZEND_API void zend_collect_module_handlers(void) /* {{{ */
function ZEND_API (line 2581) | ZEND_API void zend_startup_modules(void) /* {{{ */
function ZEND_API (line 2588) | ZEND_API void zend_destroy_modules(void) /* {{{ */
function ZEND_API (line 2598) | ZEND_API zend_module_entry* zend_register_module_ex(zend_module_entry *m...
function ZEND_API (line 2666) | ZEND_API zend_module_entry* zend_register_internal_module(zend_module_en...
function zend_check_magic_method_args (line 2672) | static void zend_check_magic_method_args(
function zend_check_magic_method_arg_type (line 2697) | static void zend_check_magic_method_arg_type(uint32_t arg_num, const zen...
function zend_check_magic_method_return_type (line 2710) | static void zend_check_magic_method_return_type(const zend_class_entry *...
function zend_check_magic_method_non_static (line 2736) | static void zend_check_magic_method_non_static(
function zend_check_magic_method_static (line 2745) | static void zend_check_magic_method_static(
function zend_check_magic_method_public (line 2754) | static void zend_check_magic_method_public(
function zend_check_magic_method_no_return_type (line 2764) | static void zend_check_magic_method_no_return_type(
function ZEND_API (line 2773) | ZEND_API void zend_check_magic_method_implementation(const zend_class_en...
function ZEND_API (line 2870) | ZEND_API void zend_add_magic_method(zend_class_entry *ce, zend_function ...
function zend_always_inline (line 2912) | static zend_always_inline void zend_normalize_internal_type(zend_type *t...
function ZEND_API (line 2938) | ZEND_API zend_result zend_register_functions(zend_class_entry *scope, co...
function ZEND_API (line 3238) | ZEND_API void zend_unregister_functions(const zend_function_entry *funct...
function ZEND_API (line 3264) | ZEND_API zend_result zend_startup_module(zend_module_entry *module) /* {...
function ZEND_API (line 3273) | ZEND_API zend_result zend_get_module_started(const char *module_name) /*...
function clean_module_classes (line 3282) | static void clean_module_classes(int module_number) /* {{{ */
function clean_module_function (line 3296) | static int clean_module_function(zval *el, void *arg) /* {{{ */
function clean_module_functions (line 3308) | static void clean_module_functions(zend_module_entry *module) /* {{{ */
function module_destructor (line 3314) | void module_destructor(zend_module_entry *module) /* {{{ */
function module_registry_unload (line 3371) | void module_registry_unload(const zend_module_entry *module)
function ZEND_API (line 3382) | ZEND_API void zend_activate_modules(void) /* {{{ */
function ZEND_API (line 3398) | ZEND_API void zend_deactivate_modules(void) /* {{{ */
function zend_unload_modules (line 3426) | void zend_unload_modules(void) /* {{{ */
function ZEND_API (line 3438) | ZEND_API void zend_post_deactivate_modules(void) /* {{{ */
function ZEND_API (line 3475) | ZEND_API int zend_next_free_module(void) /* {{{ */
function zend_class_entry (line 3481) | static zend_class_entry *do_register_internal_class(zend_class_entry *or...
function ZEND_API (line 3517) | ZEND_API zend_class_entry *zend_register_internal_class_ex(zend_class_en...
function ZEND_API (line 3523) | ZEND_API zend_class_entry *zend_register_internal_class_with_flags(
function ZEND_API (line 3538) | ZEND_API void zend_class_implements(zend_class_entry *class_entry, int n...
function ZEND_API (line 3562) | ZEND_API zend_class_entry *zend_register_internal_class(zend_class_entry...
function ZEND_API (line 3568) | ZEND_API zend_class_entry *zend_register_internal_interface(zend_class_e...
function ZEND_API (line 3574) | ZEND_API zend_result zend_register_class_alias_ex(const char *name, size...
function ZEND_API (line 3616) | ZEND_API zend_result zend_set_hash_symbol(zval *symbol, const char *name...
function zend_disable_function (line 3640) | static void zend_disable_function(const char *function_name, size_t func...
function ZEND_API (line 3652) | ZEND_API void zend_disable_functions(const char *function_list) /* {{{ */
function ZEND_COLD (line 3690) | static ZEND_COLD zend_object *display_disabled_class(zend_class_entry *c...
function ZEND_API (line 3718) | ZEND_API zend_result zend_disable_class(const char *class_name, size_t c...
function zend_always_inline (line 3758) | static zend_always_inline zend_class_entry *get_scope(zend_execute_data ...
function zend_is_callable_check_class (line 3763) | static bool zend_is_callable_check_class(zend_string *name, zend_class_e...
function ZEND_API (line 3856) | ZEND_API void zend_release_fcall_info_cache(zend_fcall_info_cache *fcc) {
function zend_always_inline (line 3867) | static zend_always_inline bool zend_is_callable_check_func(zval *callabl...
function ZEND_API (line 4117) | ZEND_API zend_string *zend_get_callable_name_ex(zval *callable, zend_obj...
function ZEND_API (line 4165) | ZEND_API zend_string *zend_get_callable_name(zval *callable) /* {{{ */
function ZEND_API (line 4171) | ZEND_API bool zend_is_callable_at_frame(
function ZEND_API (line 4282) | ZEND_API bool zend_is_callable_ex(zval *callable, zend_object *object, u...
function ZEND_API (line 4297) | ZEND_API bool zend_is_callable(zval *callable, uint32_t check_flags, zen...
function ZEND_API (line 4303) | ZEND_API bool zend_make_callable(zval *callable, zend_string **callable_...
function ZEND_API (line 4321) | ZEND_API zend_result zend_fcall_info_init(zval *callable, uint32_t check...
function ZEND_API (line 4339) | ZEND_API void zend_fcall_info_args_clear(zend_fcall_info *fci, bool free...
function ZEND_API (line 4358) | ZEND_API void zend_fcall_info_args_save(zend_fcall_info *fci, uint32_t *...
function ZEND_API (line 4367) | ZEND_API void zend_fcall_info_args_restore(zend_fcall_info *fci, uint32_...
function ZEND_API (line 4375) | ZEND_API zend_result zend_fcall_info_args_ex(zend_fcall_info *fci, zend_...
function ZEND_API (line 4408) | ZEND_API zend_result zend_fcall_info_args(zend_fcall_info *fci, zval *ar...
function ZEND_API (line 4414) | ZEND_API void zend_fcall_info_argp(zend_fcall_info *fci, uint32_t argc, ...
function ZEND_API (line 4429) | ZEND_API void zend_fcall_info_argv(zend_fcall_info *fci, uint32_t argc, ...
function ZEND_API (line 4446) | ZEND_API void zend_fcall_info_argn(zend_fcall_info *fci, uint32_t argc, ...
function ZEND_API (line 4456) | ZEND_API zend_result zend_fcall_info_call(zend_fcall_info *fci, zend_fca...
function ZEND_API (line 4479) | ZEND_API void zend_get_callable_zval_from_fcc(const zend_fcall_info_cach...
function ZEND_API (line 4497) | ZEND_API const char *zend_get_module_version(const char *module_name) /*...
function zend_always_inline (line 4511) | static zend_always_inline bool is_persistent_class(zend_class_entry *ce) {
function ZEND_API (line 4516) | ZEND_API zend_property_info *zend_declare_typed_property(zend_class_entr...
function ZEND_API (line 4675) | ZEND_API zend_result zend_try_assign_typed_ref_ex(zend_reference *ref, z...
function ZEND_API (line 4688) | ZEND_API zend_result zend_try_assign_typed_ref(zend_reference *ref, zval...
function ZEND_API (line 4694) | ZEND_API zend_result zend_try_assign_typed_ref_null(zend_reference *ref)...
function ZEND_API (line 4703) | ZEND_API zend_result zend_try_assign_typed_ref_bool(zend_reference *ref,...
function ZEND_API (line 4712) | ZEND_API zend_result zend_try_assign_typed_ref_long(zend_reference *ref,...
function ZEND_API (line 4721) | ZEND_API zend_result zend_try_assign_typed_ref_double(zend_reference *re...
function ZEND_API (line 4730) | ZEND_API zend_result zend_try_assign_typed_ref_empty_string(zend_referen...
function ZEND_API (line 4739) | ZEND_API zend_result zend_try_assign_typed_ref_str(zend_reference *ref, ...
function ZEND_API (line 4748) | ZEND_API zend_result zend_try_assign_typed_ref_string(zend_reference *re...
function ZEND_API (line 4757) | ZEND_API zend_result zend_try_assign_typed_ref_stringl(zend_reference *r...
function ZEND_API (line 4766) | ZEND_API zend_result zend_try_assign_typed_ref_arr(zend_reference *ref, ...
function ZEND_API (line 4775) | ZEND_API zend_result zend_try_assign_typed_ref_res(zend_reference *ref, ...
function ZEND_API (line 4784) | ZEND_API zend_result zend_try_assign_typed_ref_zval(zend_reference *ref,...
function ZEND_API (line 4793) | ZEND_API zend_result zend_try_assign_typed_ref_zval_ex(zend_reference *r...
function ZEND_API (line 4802) | ZEND_API void zend_declare_property_ex(zend_class_entry *ce, zend_string...
function ZEND_API (line 4808) | ZEND_API void zend_declare_property(zend_class_entry *ce, const char *na...
function ZEND_API (line 4816) | ZEND_API void zend_declare_property_null(zend_class_entry *ce, const cha...
function ZEND_API (line 4825) | ZEND_API void zend_declare_property_bool(zend_class_entry *ce, const cha...
function ZEND_API (line 4834) | ZEND_API void zend_declare_property_long(zend_class_entry *ce, const cha...
function ZEND_API (line 4843) | ZEND_API void zend_declare_property_double(zend_class_entry *ce, const c...
function ZEND_API (line 4852) | ZEND_API void zend_declare_property_string(zend_class_entry *ce, const c...
function ZEND_API (line 4861) | ZEND_API void zend_declare_property_stringl(zend_class_entry *ce, const ...
function ZEND_API (line 4870) | ZEND_API zend_class_constant *zend_declare_typed_class_constant(zend_cla...
function ZEND_API (line 4920) | ZEND_API zend_class_constant *zend_declare_class_constant_ex(zend_class_...
function ZEND_API (line 4925) | ZEND_API void zend_declare_class_constant(zend_class_entry *ce, const ch...
function ZEND_API (line 4939) | ZEND_API void zend_declare_class_constant_null(zend_class_entry *ce, con...
function ZEND_API (line 4948) | ZEND_API void zend_declare_class_constant_long(zend_class_entry *ce, con...
function ZEND_API (line 4957) | ZEND_API void zend_declare_class_constant_bool(zend_class_entry *ce, con...
function ZEND_API (line 4966) | ZEND_API void zend_declare_class_constant_double(zend_class_entry *ce, c...
function ZEND_API (line 4975) | ZEND_API void zend_declare_class_constant_stringl(zend_class_entry *ce, ...
function ZEND_API (line 4984) | ZEND_API void zend_declare_class_constant_string(zend_class_entry *ce, c...
function ZEND_API (line 4990) | ZEND_API void zend_update_property_ex(zend_class_entry *scope, zend_obje...
function ZEND_API (line 5002) | ZEND_API void zend_update_property(zend_class_entry *scope, zend_object ...
function ZEND_API (line 5017) | ZEND_API void zend_update_property_null(zend_class_entry *scope, zend_ob...
function ZEND_API (line 5026) | ZEND_API void zend_unset_property(zend_class_entry *scope, zend_object *...
function ZEND_API (line 5041) | ZEND_API void zend_update_property_bool(zend_class_entry *scope, zend_ob...
function ZEND_API (line 5050) | ZEND_API void zend_update_property_long(zend_class_entry *scope, zend_ob...
function ZEND_API (line 5059) | ZEND_API void zend_update_property_double(zend_class_entry *scope, zend_...
function ZEND_API (line 5068) | ZEND_API void zend_update_property_str(zend_class_entry *scope, zend_obj...
function ZEND_API (line 5077) | ZEND_API void zend_update_property_string(zend_class_entry *scope, zend_...
function ZEND_API (line 5087) | ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zend...
function ZEND_API (line 5097) | ZEND_API zend_result zend_update_static_property_ex(zend_class_entry *sc...
function ZEND_API (line 5133) | ZEND_API zend_result zend_update_static_property(zend_class_entry *scope...
function ZEND_API (line 5142) | ZEND_API zend_result zend_update_static_property_null(zend_class_entry *...
function ZEND_API (line 5151) | ZEND_API zend_result zend_update_static_property_bool(zend_class_entry *...
function ZEND_API (line 5160) | ZEND_API zend_result zend_update_static_property_long(zend_class_entry *...
function ZEND_API (line 5169) | ZEND_API zend_result zend_update_static_property_double(zend_class_entry...
function ZEND_API (line 5178) | ZEND_API zend_result zend_update_static_property_string(zend_class_entry...
function ZEND_API (line 5188) | ZEND_API zend_result zend_update_static_property_stringl(zend_class_entr...
function ZEND_API (line 5198) | ZEND_API zval *zend_read_property_ex(zend_class_entry *scope, zend_objec...
function ZEND_API (line 5212) | ZEND_API zval *zend_read_property(zend_class_entry *scope, zend_object *...
function ZEND_API (line 5224) | ZEND_API zval *zend_read_static_property_ex(zend_class_entry *scope, zen...
function ZEND_API (line 5237) | ZEND_API zval *zend_read_static_property(zend_class_entry *scope, const ...
function ZEND_API (line 5246) | ZEND_API void zend_save_error_handling(zend_error_handling *current) /* ...
function ZEND_API (line 5253) | ZEND_API void zend_replace_error_handling(zend_error_handling_t error_ha...
function ZEND_API (line 5264) | ZEND_API void zend_restore_error_handling(zend_error_handling *saved) /*...
function ZEND_API (line 5285) | ZEND_API bool zend_is_iterable(const zval *iterable) /* {{{ */
function ZEND_API (line 5298) | ZEND_API bool zend_is_countable(const zval *countable) /* {{{ */
function zend_result (line 5315) | static zend_result get_default_via_ast(zval *default_value_zval, const c...
function zend_string (line 5350) | static zend_string *try_parse_string(const char *str, size_t len, char q...
function ZEND_API (line 5363) | ZEND_API zend_result zend_get_default_from_internal_arg_info(
FILE: Zend/zend_API.h
type zend_function_entry (line 35) | typedef struct _zend_function_entry {
type zend_fcall_info (line 45) | typedef struct _zend_fcall_info {
type zend_fcall_info_cache (line 59) | typedef struct _zend_fcall_info_cache {
function zend_always_inline (line 399) | static zend_always_inline zend_result zend_register_class_alias(const ch...
function zend_always_inline (line 451) | static zend_always_inline HashTable *zend_class_constants_table(zend_cla...
function zend_always_inline (line 465) | static zend_always_inline zval *zend_class_default_properties_table(zend...
function zend_always_inline (line 475) | static zend_always_inline void zend_class_set_backed_enum_table(zend_cla...
function zend_always_inline (line 485) | static zend_always_inline HashTable *zend_class_backed_enum_table(zend_c...
function zend_always_inline (line 562) | static zend_always_inline void add_assoc_long(zval *arg, const char *key...
function zend_always_inline (line 565) | static zend_always_inline void add_assoc_null(zval *arg, const char *key) {
function zend_always_inline (line 568) | static zend_always_inline void add_assoc_bool(zval *arg, const char *key...
function zend_always_inline (line 571) | static zend_always_inline void add_assoc_resource(zval *arg, const char ...
function zend_always_inline (line 574) | static zend_always_inline void add_assoc_double(zval *arg, const char *k...
function zend_always_inline (line 577) | static zend_always_inline void add_assoc_str(zval *arg, const char *key,...
function zend_always_inline (line 580) | static zend_always_inline void add_assoc_string(zval *arg, const char *k...
function zend_always_inline (line 583) | static zend_always_inline void add_assoc_stringl(zval *arg, const char *...
function zend_always_inline (line 586) | static zend_always_inline void add_assoc_array(zval *arg, const char *ke...
function zend_always_inline (line 589) | static zend_always_inline void add_assoc_object(zval *arg, const char *k...
function zend_always_inline (line 592) | static zend_always_inline void add_assoc_reference(zval *arg, const char...
function zend_always_inline (line 595) | static zend_always_inline void add_assoc_zval(zval *arg, const char *key...
function zend_always_inline (line 611) | static zend_always_inline zend_result add_index_zval(zval *arg, zend_ulo...
function zend_always_inline (line 628) | static zend_always_inline zend_result add_next_index_zval(zval *arg, zva...
function zend_always_inline (line 648) | static zend_always_inline void add_property_long(zval *arg, const char *...
function zend_always_inline (line 651) | static zend_always_inline void add_property_null(zval *arg, const char *...
function zend_always_inline (line 654) | static zend_always_inline void add_property_bool(zval *arg, const char *...
function zend_always_inline (line 657) | static zend_always_inline void add_property_resource(zval *arg, const ch...
function zend_always_inline (line 660) | static zend_always_inline void add_property_double(zval *arg, const char...
function zend_always_inline (line 663) | static zend_always_inline void add_property_str(zval *arg, const char *k...
function zend_always_inline (line 666) | static zend_always_inline void add_property_string(zval *arg, const char...
function zend_always_inline (line 669) | static zend_always_inline void add_property_stringl(zval *arg, const cha...
function zend_always_inline (line 672) | static zend_always_inline void add_property_array(zval *arg, const char ...
function zend_always_inline (line 675) | static zend_always_inline void add_property_object(zval *arg, const char...
function zend_always_inline (line 678) | static zend_always_inline void add_property_reference(zval *arg, const c...
function zend_always_inline (line 681) | static zend_always_inline void add_property_zval(zval *arg, const char *...
function zend_always_inline (line 750) | static zend_always_inline bool zend_fcc_equals(const zend_fcall_info_cac...
function zend_always_inline (line 767) | static zend_always_inline void zend_fcc_addref(zend_fcall_info_cache *fcc)
function zend_always_inline (line 786) | static zend_always_inline void zend_fcc_dup(/* restrict */ zend_fcall_in...
function zend_always_inline (line 792) | static zend_always_inline void zend_fcc_dtor(zend_fcall_info_cache *fcc)
function zend_always_inline (line 809) | static zend_always_inline void zend_get_gc_buffer_add_fcc(zend_get_gc_bu...
function zend_always_inline (line 826) | static zend_always_inline zend_result zend_call_function_with_return_value(
function zend_always_inline (line 842) | static zend_always_inline void zend_call_known_fcc(
function zend_always_inline (line 856) | static zend_always_inline void zend_call_known_instance_method(
function zend_always_inline (line 863) | static zend_always_inline void zend_call_known_instance_method_with_0_pa...
function zend_always_inline (line 869) | static zend_always_inline void zend_call_known_instance_method_with_1_pa...
function zend_forbid_dynamic_call (line 895) | zend_forbid_dynamic_call(void)
function zend_always_inline (line 913) | static zend_always_inline const char *zend_get_object_type(const zend_cl...
function zend_always_inline (line 918) | static zend_always_inline const char *zend_get_object_type_uc(const zend...
function zend_always_inline (line 939) | static zend_always_inline bool zend_str_has_nul_byte(const zend_string *...
function zend_always_inline (line 943) | static zend_always_inline bool zend_char_has_nul_byte(const char *s, siz...
function zend_always_inline (line 1474) | static zend_always_inline zval *zend_try_array_init_size(zval *zv, uint3...
function zend_always_inline (line 1496) | static zend_always_inline zval *zend_try_array_init(zval *zv)
type zend_expected_type (line 1549) | typedef enum _zend_expected_type {
function zend_always_inline (line 2192) | static zend_always_inline bool zend_parse_arg_bool_ex(const zval *arg, b...
function zend_always_inline (line 2214) | static zend_always_inline bool zend_parse_arg_bool(const zval *arg, bool...
function zend_always_inline (line 2219) | static zend_always_inline bool zend_parse_arg_long_ex(zval *arg, zend_lo...
function zend_always_inline (line 2239) | static zend_always_inline bool zend_parse_arg_long(zval *arg, zend_long ...
function zend_always_inline (line 2244) | static zend_always_inline bool zend_parse_arg_double(const zval *arg, do...
function zend_always_inline (line 2260) | static zend_always_inline bool zend_parse_arg_number(zval *arg, zval **d...
function zend_always_inline (line 2272) | static zend_always_inline bool zend_parse_arg_number_or_str(zval *arg, z...
function zend_always_inline (line 2284) | static zend_always_inline bool zend_parse_arg_str_ex(zval *arg, zend_str...
function zend_always_inline (line 2300) | static zend_always_inline bool zend_parse_arg_str(zval *arg, zend_string...
function zend_always_inline (line 2305) | static zend_always_inline bool zend_parse_arg_string(zval *arg, char **d...
function zend_always_inline (line 2322) | static zend_always_inline bool zend_parse_arg_path_str(zval *arg, zend_s...
function zend_always_inline (line 2331) | static zend_always_inline bool zend_parse_arg_path(zval *arg, char **des...
function zend_always_inline (line 2348) | static zend_always_inline bool zend_parse_arg_iterable(zval *arg, zval *...
function zend_always_inline (line 2363) | static zend_always_inline bool zend_parse_arg_array(zval *arg, zval **de...
function zend_always_inline (line 2376) | static zend_always_inline bool zend_parse_arg_array_ht(const zval *arg, ...
function zend_always_inline (line 2399) | static zend_always_inline bool zend_parse_arg_array_ht_or_long(
function zend_always_inline (line 2422) | static zend_always_inline bool zend_parse_arg_object(zval *arg, zval **d...
function zend_always_inline (line 2435) | static zend_always_inline bool zend_parse_arg_obj(const zval *arg, zend_...
function zend_always_inline (line 2448) | static zend_always_inline bool zend_parse_arg_obj_or_long(
function zend_always_inline (line 2471) | static zend_always_inline bool zend_parse_arg_resource(zval *arg, zval *...
function zend_always_inline (line 2483) | static zend_always_inline bool zend_parse_arg_func(zval *arg, zend_fcall...
function zend_always_inline (line 2501) | static zend_always_inline void zend_parse_arg_zval(zval *arg, zval **des...
function zend_always_inline (line 2509) | static zend_always_inline void zend_parse_arg_zval_deref(zval *arg, zval...
function zend_always_inline (line 2514) | static zend_always_inline bool zend_parse_arg_array_ht_or_str(
function zend_always_inline (line 2533) | static zend_always_inline bool zend_parse_arg_str_or_long(zval *arg, zen...
function zend_always_inline (line 2553) | static zend_always_inline bool zend_parse_arg_obj_or_class_name(
function zend_always_inline (line 2571) | static zend_always_inline bool zend_parse_arg_obj_or_str(
FILE: Zend/zend_alloc.c
type pid_t (line 74) | typedef int pid_t;
type zend_mm_page_info (line 176) | typedef uint32_t zend_mm_page_info;
type zend_ulong (line 177) | typedef zend_ulong zend_mm_bitset;
type zend_mm_bitset (line 189) | typedef zend_mm_bitset zend_mm_page_map[ZEND_MM_PAGE_MAP_LEN];
type zend_mm_page (line 226) | typedef struct _zend_mm_page zend_mm_page;
type zend_mm_bin (line 227) | typedef struct _zend_mm_bin zend_mm_bin;
type zend_mm_free_slot (line 228) | typedef struct _zend_mm_free_slot zend_mm_free_slot;
type zend_mm_chunk (line 229) | typedef struct _zend_mm_chunk zend_mm_chunk;
type zend_mm_huge_list (line 230) | typedef struct _zend_mm_huge_list zend_mm_huge_list;
type _zend_mm_heap (line 266) | struct _zend_mm_heap {
type _zend_mm_chunk (line 314) | struct _zend_mm_chunk {
type _zend_mm_page (line 327) | struct _zend_mm_page {
type _zend_mm_bin (line 335) | struct _zend_mm_bin {
type _zend_mm_free_slot (line 339) | struct _zend_mm_free_slot {
type _zend_mm_huge_list (line 343) | struct _zend_mm_huge_list {
function ZEND_COLD (line 371) | ZEND_COLD void zend_debug_alloc_output(char *format, ...)
function zend_mm_panic (line 388) | void zend_mm_panic(const char *message)
function zend_mm_safe_error (line 401) | void zend_mm_safe_error(zend_mm_heap *heap,
function zend_mm_munmap (line 449) | static void zend_mm_munmap(void *addr, size_t size)
function zend_always_inline (line 616) | static zend_always_inline int zend_mm_bitset_is_set(zend_mm_bitset *bits...
function zend_always_inline (line 621) | static zend_always_inline void zend_mm_bitset_set_bit(zend_mm_bitset *bi...
function zend_always_inline (line 626) | static zend_always_inline void zend_mm_bitset_reset_bit(zend_mm_bitset *...
function zend_always_inline (line 631) | static zend_always_inline void zend_mm_bitset_set_range(zend_mm_bitset *...
function zend_always_inline (line 663) | static zend_always_inline void zend_mm_bitset_reset_range(zend_mm_bitset...
function zend_always_inline (line 695) | static zend_always_inline int zend_mm_bitset_is_free_range(zend_mm_bitse...
function zend_always_inline (line 735) | static zend_always_inline void zend_mm_hugepage(void* ptr, size_t size)
function zend_mm_chunk_free (line 819) | static void zend_mm_chunk_free(zend_mm_heap *heap, void *addr, size_t size)
function zend_mm_chunk_truncate (line 830) | static int zend_mm_chunk_truncate(zend_mm_heap *heap, void *addr, size_t...
function zend_mm_chunk_extend (line 849) | static int zend_mm_chunk_extend(zend_mm_heap *heap, void *addr, size_t o...
function zend_always_inline (line 876) | static zend_always_inline void zend_mm_chunk_init(zend_mm_heap *heap, ze...
function zend_always_inline (line 1123) | static zend_always_inline void *zend_mm_alloc_large_ex(zend_mm_heap *hea...
function zend_never_inline (line 1142) | static zend_never_inline void *zend_mm_alloc_large(zend_mm_heap *heap, s...
function zend_always_inline (line 1147) | static zend_always_inline void zend_mm_delete_chunk(zend_mm_heap *heap, ...
function zend_always_inline (line 1185) | static zend_always_inline void zend_mm_free_pages_ex(zend_mm_heap *heap,...
function zend_never_inline (line 1199) | static zend_never_inline void zend_mm_free_pages(zend_mm_heap *heap, zen...
function zend_always_inline (line 1204) | static zend_always_inline void zend_mm_free_large(zend_mm_heap *heap, ze...
function zend_always_inline (line 1217) | static zend_always_inline int zend_mm_small_size_to_bit(int size)
function zend_always_inline (line 1248) | static zend_always_inline int zend_mm_small_size_to_bin(size_t size)
function zend_always_inline (line 1294) | static zend_always_inline zend_mm_free_slot* zend_mm_encode_free_slot(co...
function zend_always_inline (line 1303) | static zend_always_inline zend_mm_free_slot* zend_mm_decode_free_slot(ze...
function zend_always_inline (line 1312) | static zend_always_inline void zend_mm_set_next_free_slot(zend_mm_heap *...
function zend_always_inline (line 1320) | static zend_always_inline zend_mm_free_slot *zend_mm_get_next_free_slot(...
function zend_never_inline (line 1339) | static zend_never_inline void *zend_mm_alloc_small_slow(zend_mm_heap *he...
function zend_always_inline (line 1395) | static zend_always_inline void *zend_mm_alloc_small(zend_mm_heap *heap, ...
function zend_always_inline (line 1417) | static zend_always_inline void zend_mm_free_small(zend_mm_heap *heap, vo...
function zend_always_inline (line 1444) | static zend_always_inline zend_mm_debug_info *zend_mm_get_debug_info(zen...
function zend_always_inline (line 1467) | static zend_always_inline void *zend_mm_alloc_heap(zend_mm_heap *heap, s...
function zend_always_inline (line 1517) | static zend_always_inline void zend_mm_free_heap(zend_mm_heap *heap, voi...
function zend_mm_size (line 1542) | static size_t zend_mm_size(zend_mm_heap *heap, void *ptr ZEND_FILE_LINE_...
function zend_never_inline (line 1570) | static zend_never_inline void *zend_mm_realloc_slow(zend_mm_heap *heap, ...
function zend_never_inline (line 1588) | static zend_never_inline void *zend_mm_realloc_huge(zend_mm_heap *heap, ...
function zend_always_inline (line 1675) | static zend_always_inline void *zend_mm_realloc_heap(zend_mm_heap *heap,...
function zend_mm_add_huge_block (line 1840) | static void zend_mm_add_huge_block(zend_mm_heap *heap, void *ptr, size_t...
function zend_mm_del_huge_block (line 1857) | static size_t zend_mm_del_huge_block(zend_mm_heap *heap, void *ptr ZEND_...
function zend_mm_get_huge_block_size (line 1881) | static size_t zend_mm_get_huge_block_size(zend_mm_heap *heap, void *ptr ...
function zend_mm_change_huge_block_size (line 1897) | static void zend_mm_change_huge_block_size(zend_mm_heap *heap, void *ptr...
function zend_mm_free_huge (line 1990) | static void zend_mm_free_huge(zend_mm_heap *heap, void *ptr ZEND_FILE_LI...
function zend_mm_refresh_key (line 2009) | static void zend_mm_refresh_key(zend_mm_heap *heap)
function zend_mm_init_key (line 2014) | static void zend_mm_init_key(zend_mm_heap *heap)
function zend_mm_heap (line 2020) | static zend_mm_heap *zend_mm_init(void)
function ZEND_API (line 2072) | ZEND_API size_t zend_mm_gc(zend_mm_heap *heap)
function zend_long (line 2203) | static zend_long zend_mm_find_leaks_small(zend_mm_chunk *p, uint32_t i, ...
function zend_long (line 2230) | static zend_long zend_mm_find_leaks(zend_mm_heap *heap, zend_mm_chunk *p...
function zend_long (line 2261) | static zend_long zend_mm_find_leaks_huge(zend_mm_heap *heap, zend_mm_hug...
function zend_mm_check_leaks (line 2282) | static void zend_mm_check_leaks(zend_mm_heap *heap)
function ZEND_API (line 2394) | ZEND_API void zend_mm_shutdown(zend_mm_heap *heap, bool full, bool silent)
function ZEND_API (line 2531) | ZEND_API void* ZEND_FASTCALL _zend_mm_alloc(zend_mm_heap *heap, size_t s...
function ZEND_FASTCALL (line 2536) | ZEND_FASTCALL _zend_mm_free(zend_mm_heap *heap, void *ptr ZEND_FILE_LINE...
function ZEND_FASTCALL (line 2551) | ZEND_FASTCALL _zend_mm_block_size(zend_mm_heap *heap, void *ptr ZEND_FIL...
type zend_alloc_globals (line 2572) | typedef struct _zend_alloc_globals {
function ZEND_API (line 2585) | ZEND_API bool is_zend_mm(void)
function ZEND_API (line 2594) | ZEND_API bool is_zend_ptr(const void *ptr)
function ZEND_API (line 2670) | ZEND_API void* ZEND_FASTCALL _emalloc_huge(size_t size)
function _efree_large (line 2712) | void ZEND_FASTCALL _efree_large(void *ptr, size_t size)
function ZEND_FASTCALL (line 2728) | ZEND_FASTCALL _efree_huge(void *ptr, size_t size)
function ZEND_API (line 2736) | ZEND_API void* ZEND_FASTCALL _emalloc(size_t size ZEND_FILE_LINE_DC ZEND...
function ZEND_FASTCALL (line 2746) | ZEND_FASTCALL _efree(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
function ZEND_API (line 2757) | ZEND_API void* ZEND_FASTCALL _erealloc(void *ptr, size_t size ZEND_FILE_...
function ZEND_API (line 2767) | ZEND_API void* ZEND_FASTCALL _erealloc2(void *ptr, size_t size, size_t c...
function ZEND_FASTCALL (line 2777) | ZEND_FASTCALL _zend_mem_block_size(void *ptr ZEND_FILE_LINE_DC ZEND_FILE...
function ZEND_API (line 2782) | ZEND_API void* ZEND_FASTCALL _safe_emalloc(size_t nmemb, size_t size, si...
function ZEND_API (line 2787) | ZEND_API void* ZEND_FASTCALL _safe_malloc(size_t nmemb, size_t size, siz...
function ZEND_API (line 2792) | ZEND_API void* ZEND_FASTCALL _safe_erealloc(void *ptr, size_t nmemb, siz...
function ZEND_API (line 2797) | ZEND_API void* ZEND_FASTCALL _safe_realloc(void *ptr, size_t nmemb, size...
function ZEND_API (line 2802) | ZEND_API void* ZEND_FASTCALL _ecalloc(size_t nmemb, size_t size ZEND_FIL...
function ZEND_API (line 2812) | ZEND_API char* ZEND_FASTCALL _estrdup(const char *s ZEND_FILE_LINE_DC ZE...
function ZEND_API (line 2826) | ZEND_API char* ZEND_FASTCALL _estrndup(const char *s, size_t length ZEND...
function ZEND_API (line 2841) | ZEND_API char* ZEND_FASTCALL zend_strndup(const char *s, size_t length)
function ZEND_API (line 2859) | ZEND_API zend_result zend_set_memory_limit(size_t memory_limit)
function ZEND_API (line 2883) | ZEND_API bool zend_alloc_in_memory_limit_error_reporting(void)
function ZEND_API (line 2892) | ZEND_API size_t zend_memory_usage(bool real_usage)
function ZEND_API (line 2905) | ZEND_API size_t zend_memory_peak_usage(bool real_usage)
function ZEND_API (line 2917) | ZEND_API void zend_memory_reset_peak_usage(void)
function ZEND_API (line 2925) | ZEND_API void shutdown_memory_manager(bool silent, bool full_shutdown)
function zend_out_of_memory (line 2930) | void zend_out_of_memory(void)
function zend_always_inline (line 2937) | static zend_always_inline void tracked_add(zend_mm_heap *heap, void *ptr...
function zend_always_inline (line 2945) | static zend_always_inline zval *tracked_get_size_zv(zend_mm_heap *heap, ...
function zend_always_inline (line 2952) | static zend_always_inline void tracked_check_limit(zend_mm_heap *heap, s...
function tracked_free (line 2986) | static void tracked_free(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG...
function tracked_free_all (line 3028) | static void tracked_free_all(zend_mm_heap *heap) {
function alloc_globals_ctor (line 3038) | static void alloc_globals_ctor(zend_alloc_globals *alloc_globals)
function alloc_globals_dtor (line 3077) | static void alloc_globals_dtor(zend_alloc_globals *alloc_globals)
function ZEND_API (line 3083) | ZEND_API void start_memory_manager(void)
function ZEND_API (line 3099) | ZEND_API zend_mm_heap *zend_mm_set_heap(zend_mm_heap *new_heap)
function ZEND_API (line 3108) | ZEND_API zend_mm_heap *zend_mm_get_heap(void)
function ZEND_API (line 3113) | ZEND_API bool zend_mm_is_custom_heap(zend_mm_heap *new_heap)
function ZEND_API (line 3122) | ZEND_API void zend_mm_set_custom_handlers(zend_mm_heap *heap,
function ZEND_API (line 3132) | ZEND_API void zend_mm_set_custom_handlers_ex(zend_mm_heap *heap,
function ZEND_API (line 3155) | ZEND_API void zend_mm_get_custom_handlers(zend_mm_heap *heap,
function ZEND_API (line 3165) | ZEND_API void zend_mm_get_custom_handlers_ex(zend_mm_heap *heap,
function ZEND_API (line 3205) | ZEND_API zend_mm_storage *zend_mm_get_storage(zend_mm_heap *heap)
function ZEND_API (line 3214) | ZEND_API zend_mm_heap *zend_mm_startup(void)
function ZEND_API (line 3219) | ZEND_API zend_mm_heap *zend_mm_startup_ex(const zend_mm_handlers *handle...
function ZEND_API (line 3292) | ZEND_API void * __zend_malloc(size_t len ZEND_FILE_LINE_DC ZEND_FILE_LIN...
function ZEND_API (line 3301) | ZEND_API void * __zend_calloc(size_t nmemb, size_t len ZEND_FILE_LINE_DC...
function ZEND_API (line 3311) | ZEND_API void * __zend_realloc(void *p, size_t len ZEND_FILE_LINE_DC ZEN...
function ZEND_API (line 3320) | ZEND_API void __zend_free(void *p ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
function ZEND_API (line 3326) | ZEND_API char * __zend_strdup(const char *s)
function zend_mm_globals_size (line 3336) | size_t zend_mm_globals_size(void)
FILE: Zend/zend_alloc.h
type zend_leak_info (line 40) | typedef struct _zend_leak_info {
type zend_mm_debug_info (line 50) | typedef struct _zend_mm_debug_info {
type zend_mm_heap (line 244) | typedef struct _zend_mm_heap zend_mm_heap;
type zend_mm_storage (line 297) | typedef struct _zend_mm_storage zend_mm_storage;
type zend_mm_handlers (line 304) | typedef struct _zend_mm_handlers {
type _zend_mm_storage (line 311) | struct _zend_mm_storage {
FILE: Zend/zend_arena.h
type zend_arena (line 26) | typedef struct _zend_arena zend_arena;
type _zend_arena (line 28) | struct _zend_arena {
function zend_always_inline (line 34) | static zend_always_inline zend_arena* zend_arena_create(size_t size)
function zend_always_inline (line 44) | static zend_always_inline void zend_arena_destroy(zend_arena *arena)
function zend_always_inline (line 53) | static zend_always_inline void* zend_arena_alloc(zend_arena **arena_ptr,...
function zend_always_inline (line 79) | static zend_always_inline void* zend_arena_calloc(zend_arena **arena_ptr...
function zend_always_inline (line 94) | static zend_always_inline void* zend_arena_checkpoint(zend_arena *arena)
function zend_always_inline (line 99) | static zend_always_inline void zend_arena_release(zend_arena **arena_ptr...
function zend_always_inline (line 113) | static zend_always_inline bool zend_arena_contains(zend_arena *arena, vo...
type zend_arena (line 129) | typedef struct _zend_arena zend_arena;
type _zend_arena (line 131) | struct _zend_arena {
function zend_always_inline (line 140) | static zend_always_inline zend_arena *zend_arena_create(size_t _size)
function zend_always_inline (line 150) | static zend_always_inline void zend_arena_destroy(zend_arena *arena)
function zend_always_inline (line 163) | static zend_always_inline void *zend_arena_alloc(zend_arena **arena_ptr,...
function zend_always_inline (line 175) | static zend_always_inline void* zend_arena_calloc(zend_arena **arena_ptr...
function zend_always_inline (line 190) | static zend_always_inline void* zend_arena_checkpoint(zend_arena *arena)
function zend_always_inline (line 195) | static zend_always_inline void zend_arena_release(zend_arena **arena_ptr...
function zend_always_inline (line 216) | static zend_always_inline bool zend_arena_contains(zend_arena *arena, vo...
FILE: Zend/zend_ast.c
function zend_ast_list_size (line 41) | static inline size_t zend_ast_list_size(uint32_t children) {
function ZEND_API (line 45) | ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_znode(znode *node) {
function zend_always_inline (line 56) | static zend_always_inline zend_ast * zend_ast_create_zval_int(zval *zv, ...
function ZEND_API (line 67) | ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_zval_with_lineno(zval ...
function ZEND_API (line 71) | ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_zval_ex(zval *zv, zend...
function ZEND_API (line 75) | ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_zval(zval *zv) {
function ZEND_API (line 79) | ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_zval_from_str(zend_str...
function ZEND_API (line 85) | ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_zval_from_long(zend_lo...
function ZEND_API (line 91) | ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_constant(zend_string *...
function ZEND_API (line 102) | ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_class_const_or_name(ze...
function ZEND_API (line 112) | ZEND_API zend_ast *zend_ast_create_decl(
function ZEND_API (line 136) | ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_0(zend_ast_kind kind) {
function ZEND_API (line 148) | ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_1(zend_ast_kind kind, ...
function ZEND_API (line 167) | ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_2(zend_ast_kind kind, ...
function ZEND_API (line 189) | ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_3(zend_ast_kind kind, ...
function ZEND_API (line 214) | ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_4(zend_ast_kind kind, ...
function ZEND_API (line 242) | ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_5(zend_ast_kind kind, ...
function ZEND_API (line 273) | ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_va(
function ZEND_API (line 293) | ZEND_API zend_ast * zend_ast_create_n(unsigned kind, ...) {
function ZEND_API (line 301) | ZEND_API zend_ast * zend_ast_create_ex_n(
function ZEND_API (line 310) | ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_list_0(zend_ast_kind k...
function ZEND_API (line 324) | ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_list_1(zend_ast_kind k...
function ZEND_API (line 348) | ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_list_2(zend_ast_kind k...
function zend_ast (line 379) | static zend_ast *zend_ast_create_from_va_list(zend_ast_kind kind, zend_a...
function ZEND_API (line 405) | ZEND_API zend_ast *zend_ast_create_ex(zend_ast_kind kind, zend_ast_attr ...
function ZEND_API (line 416) | ZEND_API zend_ast *zend_ast_create(zend_ast_kind kind, ...) {
function ZEND_API (line 427) | ZEND_API zend_ast *zend_ast_create_list(uint32_t init_children, zend_ast...
function zend_ast (line 459) | zend_ast *zend_ast_create_concat_op(zend_ast *op0, zend_ast *op1) {
function is_power_of_two (line 472) | static inline bool is_power_of_two(uint32_t n) {
function ZEND_API (line 476) | ZEND_API zend_ast * ZEND_FASTCALL zend_ast_list_add(zend_ast *ast, zend_...
function zend_result (line 486) | static zend_result zend_ast_add_array_element(zval *result, zval *offset...
function zend_result (line 506) | static zend_result zend_ast_add_unpacked_element(zval *result, zval *exp...
function zend_class_entry (line 531) | static zend_class_entry *zend_ast_fetch_class(zend_ast *ast, zend_class_...
function ZEND_FASTCALL (line 544) | ZEND_FASTCALL zend_ast_evaluate_ex(
function ZEND_FASTCALL (line 567) | ZEND_FASTCALL zend_ast_evaluate_inner(
function ZEND_FASTCALL (line 1062) | ZEND_FASTCALL zend_ast_evaluate(zval *result, zend_ast *ast, zend_class_...
function zend_ast_tree_size (line 1069) | static size_t ZEND_FASTCALL zend_ast_tree_size(zend_ast *ast)
function ZEND_FASTCALL (line 1164) | ZEND_FASTCALL zend_ast_destroy(zend_ast *ast)
function ZEND_FASTCALL (line 1212) | ZEND_FASTCALL zend_ast_ref_destroy(zend_ast_ref *ast)
function ZEND_API (line 1218) | ZEND_API void zend_ast_apply(zend_ast *ast, zend_ast_apply_func fn, void...
function ZEND_COLD (line 1271) | static ZEND_COLD void zend_ast_export_str(smart_str *str, zend_string *s)
function ZEND_COLD (line 1286) | static ZEND_COLD void zend_ast_export_qstr(smart_str *str, char quote, z...
function ZEND_COLD (line 1331) | static ZEND_COLD void zend_ast_export_indent(smart_str *str, int indent)
function ZEND_COLD (line 1339) | static ZEND_COLD void zend_ast_export_name(smart_str *str, zend_ast *ast...
function ZEND_COLD (line 1352) | static ZEND_COLD void zend_ast_export_ns_name(smart_str *str, zend_ast *...
function ZEND_COLD (line 1370) | static ZEND_COLD bool zend_ast_valid_var_char(char ch)
function ZEND_COLD (line 1383) | static ZEND_COLD bool zend_ast_valid_var_name(const char *s, size_t len)
function ZEND_COLD (line 1409) | static ZEND_COLD bool zend_ast_var_needs_braces(char ch)
function ZEND_COLD (line 1414) | static ZEND_COLD void zend_ast_export_var(smart_str *str, zend_ast *ast,...
function ZEND_COLD (line 1432) | static ZEND_COLD void zend_ast_export_list(smart_str *str, zend_ast_list...
function ZEND_COLD (line 1445) | static ZEND_COLD void zend_ast_export_encaps_list(smart_str *str, char q...
function ZEND_COLD (line 1474) | static ZEND_COLD void zend_ast_export_name_list_ex(smart_str *str, zend_...
function ZEND_COLD (line 1490) | static ZEND_COLD void zend_ast_export_var_list(smart_str *str, zend_ast_...
function ZEND_COLD (line 1507) | static ZEND_COLD void zend_ast_export_stmt(smart_str *str, zend_ast *ast...
function ZEND_COLD (line 1557) | static ZEND_COLD void zend_ast_export_if_stmt(smart_str *str, zend_ast_l...
function ZEND_COLD (line 1594) | static ZEND_COLD void zend_ast_export_zval(smart_str *str, zval *zv, int...
function ZEND_COLD (line 1651) | static ZEND_COLD void zend_ast_export_class_no_header(smart_str *str, ze...
function ZEND_COLD (line 1666) | static ZEND_COLD void zend_ast_export_attribute_group(smart_str *str, ze...
function ZEND_COLD (line 1684) | static ZEND_COLD void zend_ast_export_attributes(smart_str *str, zend_as...
function ZEND_COLD (line 1702) | static ZEND_COLD void zend_ast_export_visibility(smart_str *str, uint32_...
function ZEND_COLD (line 1722) | static ZEND_COLD void zend_ast_export_type(smart_str *str, zend_ast *ast...
function ZEND_COLD (line 1749) | static ZEND_COLD void zend_ast_export_hook_list(smart_str *str, zend_ast...
function ZEND_COLD (line 1829) | static ZEND_COLD void zend_ast_export_ex(smart_str *str, zend_ast *ast, ...
function zend_string (line 2680) | zend_string *zend_ast_export(const char *prefix, zend_ast *ast, const ch...
FILE: Zend/zend_ast.h
type _zend_ast_kind (line 34) | enum _zend_ast_kind {
type zend_ast_kind (line 183) | typedef uint16_t zend_ast_kind;
type zend_ast_attr (line 184) | typedef uint16_t zend_ast_attr;
type _zend_ast (line 186) | struct _zend_ast {
type zend_ast_list (line 194) | typedef struct _zend_ast_list {
type zend_ast_zval (line 203) | typedef struct _zend_ast_zval {
type zend_ast_decl (line 210) | typedef struct _zend_ast_decl {
function zend_always_inline (line 255) | static zend_always_inline zend_ast * zend_ast_create_ex_0(zend_ast_kind ...
function zend_always_inline (line 260) | static zend_always_inline zend_ast * zend_ast_create_ex_1(zend_ast_kind ...
function zend_always_inline (line 265) | static zend_always_inline zend_ast * zend_ast_create_ex_2(zend_ast_kind ...
function zend_always_inline (line 270) | static zend_always_inline zend_ast * zend_ast_create_ex_3(zend_ast_kind ...
function zend_always_inline (line 275) | static zend_always_inline zend_ast * zend_ast_create_ex_4(zend_ast_kind ...
function zend_always_inline (line 280) | static zend_always_inline zend_ast * zend_ast_create_ex_5(zend_ast_kind ...
type zend_ast_evaluate_ctx (line 310) | typedef struct {
function zend_always_inline (line 325) | static zend_always_inline size_t zend_ast_size(uint32_t children) {
function zend_always_inline (line 329) | static zend_always_inline bool zend_ast_is_special(zend_ast *ast) {
function zend_always_inline (line 333) | static zend_always_inline bool zend_ast_is_list(zend_ast *ast) {
function zend_always_inline (line 336) | static zend_always_inline zend_ast_list *zend_ast_get_list(zend_ast *ast) {
function zend_always_inline (line 341) | static zend_always_inline zval *zend_ast_get_zval(zend_ast *ast) {
function zend_always_inline (line 345) | static zend_always_inline zend_string *zend_ast_get_str(zend_ast *ast) {
function zend_always_inline (line 351) | static zend_always_inline zend_string *zend_ast_get_constant_name(zend_a...
function zend_always_inline (line 357) | static zend_always_inline uint32_t zend_ast_get_num_children(zend_ast *a...
function zend_always_inline (line 361) | static zend_always_inline uint32_t zend_ast_get_lineno(zend_ast *ast) {
function zend_always_inline (line 373) | static zend_always_inline zend_ast *zend_ast_create_binary_op(uint32_t o...
function zend_always_inline (line 379) | static zend_always_inline zend_ast *zend_ast_create_assign_op(uint32_t o...
function zend_always_inline (line 382) | static zend_always_inline zend_ast *zend_ast_create_cast(uint32_t type, ...
function zend_always_inline (line 385) | static zend_always_inline zend_ast *zend_ast_list_rtrim(zend_ast *ast) {
FILE: Zend/zend_atomic.c
function ZEND_API (line 26) | ZEND_API void zend_atomic_bool_init(zend_atomic_bool *obj, bool desired) {
function ZEND_API (line 30) | ZEND_API void zend_atomic_int_init(zend_atomic_int *obj, int desired) {
function ZEND_API (line 34) | ZEND_API bool zend_atomic_bool_exchange(zend_atomic_bool *obj, bool desi...
function ZEND_API (line 38) | ZEND_API int zend_atomic_int_exchange(zend_atomic_int *obj, int desired) {
function ZEND_API (line 42) | ZEND_API bool zend_atomic_bool_compare_exchange(zend_atomic_bool *obj, b...
function ZEND_API (line 47) | ZEND_API bool zend_atomic_int_compare_exchange(zend_atomic_int *obj, int...
function ZEND_API (line 52) | ZEND_API void zend_atomic_bool_store(zend_atomic_bool *obj, bool desired) {
function ZEND_API (line 56) | ZEND_API void zend_atomic_int_store(zend_atomic_int *obj, int desired) {
function ZEND_API (line 62) | ZEND_API bool zend_atomic_bool_load(zend_atomic_bool *obj) {
function ZEND_API (line 65) | ZEND_API int zend_atomic_int_load(zend_atomic_int *obj) {
function ZEND_API (line 69) | ZEND_API bool zend_atomic_bool_load(const zend_atomic_bool *obj) {
function ZEND_API (line 72) | ZEND_API int zend_atomic_int_load(const zend_atomic_int *obj) {
FILE: Zend/zend_atomic.h
type zend_atomic_bool (line 43) | typedef struct zend_atomic_bool_s {
type zend_atomic_int (line 46) | typedef struct zend_atomic_int_s {
type zend_atomic_bool (line 54) | typedef struct zend_atomic_bool_s {
type zend_atomic_int (line 57) | typedef struct zend_atomic_int_s {
type zend_atomic_bool (line 61) | typedef struct zend_atomic_bool_s {
type zend_atomic_int (line 64) | typedef struct zend_atomic_int_s {
function zend_always_inline (line 98) | static zend_always_inline bool zend_atomic_bool_exchange_ex(zend_atomic_...
function zend_always_inline (line 102) | static zend_always_inline int zend_atomic_int_exchange_ex(zend_atomic_in...
function zend_always_inline (line 106) | static zend_always_inline bool zend_atomic_bool_compare_exchange_ex(zend...
function zend_always_inline (line 116) | static zend_always_inline bool zend_atomic_int_compare_exchange_ex(zend_...
function zend_always_inline (line 127) | static zend_always_inline bool zend_atomic_bool_load_ex(zend_atomic_bool...
function zend_always_inline (line 132) | static zend_always_inline int zend_atomic_int_load_ex(zend_atomic_int *o...
function zend_always_inline (line 137) | static zend_always_inline void zend_atomic_bool_store_ex(zend_atomic_boo...
function zend_always_inline (line 141) | static zend_always_inline void zend_atomic_int_store_ex(zend_atomic_int ...
function zend_always_inline (line 153) | static zend_always_inline bool zend_atomic_bool_exchange_ex(zend_atomic_...
function zend_always_inline (line 157) | static zend_always_inline int zend_atomic_int_exchange_ex(zend_atomic_in...
function zend_always_inline (line 161) | static zend_always_inline bool zend_atomic_bool_compare_exchange_ex(zend...
function zend_always_inline (line 165) | static zend_always_inline bool zend_atomic_int_compare_exchange_ex(zend_...
function zend_always_inline (line 169) | static zend_always_inline bool zend_atomic_bool_load_ex(const zend_atomi...
function zend_always_inline (line 173) | static zend_always_inline int zend_atomic_int_load_ex(const zend_atomic_...
function zend_always_inline (line 177) | static zend_always_inline void zend_atomic_bool_store_ex(zend_atomic_boo...
function zend_always_inline (line 181) | static zend_always_inline void zend_atomic_int_store_ex(zend_atomic_int ...
function zend_always_inline (line 195) | static zend_always_inline bool zend_atomic_bool_exchange_ex(zend_atomic_...
function zend_always_inline (line 201) | static zend_always_inline int zend_atomic_int_exchange_ex(zend_atomic_in...
function zend_always_inline (line 207) | static zend_always_inline bool zend_atomic_bool_compare_exchange_ex(zend...
function zend_always_inline (line 211) | static zend_always_inline bool zend_atomic_int_compare_exchange_ex(zend_...
function zend_always_inline (line 215) | static zend_always_inline bool zend_atomic_bool_load_ex(const zend_atomi...
function zend_always_inline (line 221) | static zend_always_inline int zend_atomic_int_load_ex(const zend_atomic_...
function zend_always_inline (line 227) | static zend_always_inline void zend_atomic_bool_store_ex(zend_atomic_boo...
function zend_always_inline (line 231) | static zend_always_inline void zend_atomic_int_store_ex(zend_atomic_int ...
function zend_always_inline (line 243) | static zend_always_inline bool zend_atomic_bool_exchange_ex(zend_atomic_...
function zend_always_inline (line 253) | static zend_always_inline int zend_atomic_int_exchange_ex(zend_atomic_in...
function zend_always_inline (line 263) | static zend_always_inline bool zend_atomic_bool_compare_exchange_ex(zend...
function zend_always_inline (line 273) | static zend_always_inline bool zend_atomic_int_compare_exchange_ex(zend_...
function zend_always_inline (line 283) | static zend_always_inline bool zend_atomic_bool_load_ex(zend_atomic_bool...
function zend_always_inline (line 288) | static zend_always_inline int zend_atomic_int_load_ex(zend_atomic_int *o...
function zend_always_inline (line 293) | static zend_always_inline void zend_atomic_bool_store_ex(zend_atomic_boo...
function zend_always_inline (line 299) | static zend_always_inline void zend_atomic_int_store_ex(zend_atomic_int ...
function zend_always_inline (line 315) | static zend_always_inline void zend_atomic_bool_store_ex(zend_atomic_boo...
function zend_always_inline (line 319) | static zend_always_inline void zend_atomic_int_store_ex(zend_atomic_int ...
function zend_always_inline (line 323) | static zend_always_inline bool zend_atomic_bool_compare_exchange_ex(zend...
function zend_always_inline (line 334) | static zend_always_inline bool zend_atomic_int_compare_exchange_ex(zend_...
function zend_always_inline (line 345) | static zend_always_inline bool zend_atomic_bool_load_ex(const zend_atomi...
function zend_always_inline (line 349) | static zend_always_inline int zend_atomic_int_load_ex(const zend_atomic_...
function zend_always_inline (line 353) | static zend_always_inline bool zend_atomic_bool_exchange_ex(zend_atomic_...
function zend_always_inline (line 359) | static zend_always_inline int zend_atomic_int_exchange_ex(zend_atomic_in...
FILE: Zend/zend_attributes.c
function zend_attribute_attribute_get_flags (line 39) | uint32_t zend_attribute_attribute_get_flags(zend_attribute *attr, zend_c...
function validate_allow_dynamic_properties (line 71) | static void validate_allow_dynamic_properties(
function HashTable (line 149) | static HashTable *attributes_sensitive_parameter_value_get_properties_fo...
function Z_PARAM_OPTIONAL (line 166) | Z_PARAM_OPTIONAL
function zend_attribute (line 196) | static zend_attribute *get_attribute(HashTable *attributes, zend_string ...
function zend_attribute (line 211) | static zend_attribute *get_attribute_str(HashTable *attributes, const ch...
function ZEND_API (line 226) | ZEND_API zend_attribute *zend_get_attribute(HashTable *attributes, zend_...
function ZEND_API (line 231) | ZEND_API zend_attribute *zend_get_attribute_str(HashTable *attributes, c...
function ZEND_API (line 236) | ZEND_API zend_attribute *zend_get_parameter_attribute(HashTable *attribu...
function ZEND_API (line 241) | ZEND_API zend_attribute *zend_get_parameter_attribute_str(HashTable *att...
function ZEND_API (line 246) | ZEND_API zend_result zend_get_attribute_value(zval *ret, zend_attribute ...
function ZEND_API (line 264) | ZEND_API zend_result zend_get_attribute_object(zval *obj, zend_class_ent...
function ZEND_API (line 360) | ZEND_API zend_string *zend_get_attribute_target_names(uint32_t flags)
function ZEND_API (line 377) | ZEND_API bool zend_is_attribute_repeated(HashTable *attributes, zend_att...
function attr_free (line 392) | static void attr_free(zval *v)
function ZEND_API (line 414) | ZEND_API zend_attribute *zend_add_attribute(HashTable **attributes, zend...
function free_internal_attribute (line 447) | static void free_internal_attribute(zval *v)
function ZEND_API (line 452) | ZEND_API zend_internal_attribute *zend_mark_internal_attribute(zend_clas...
function ZEND_API (line 479) | ZEND_API zend_internal_attribute *zend_internal_attribute_register(zend_...
function ZEND_API (line 487) | ZEND_API zend_internal_attribute *zend_internal_attribute_get(zend_strin...
function zend_register_attribute_ce (line 492) | void zend_register_attribute_ce(void)
function zend_attributes_shutdown (line 525) | void zend_attributes_shutdown(void)
FILE: Zend/zend_attributes.h
type zend_attribute_arg (line 51) | typedef struct {
type zend_attribute (line 56) | typedef struct _zend_attribute {
type zend_internal_attribute (line 67) | typedef struct _zend_internal_attribute {
function zend_always_inline (line 97) | static zend_always_inline zend_attribute *zend_add_class_attribute(zend_...
function zend_always_inline (line 103) | static zend_always_inline zend_attribute *zend_add_function_attribute(ze...
function zend_always_inline (line 109) | static zend_always_inline zend_attribute *zend_add_parameter_attribute(z...
function zend_always_inline (line 115) | static zend_always_inline zend_attribute *zend_add_property_attribute(ze...
function zend_always_inline (line 121) | static zend_always_inline zend_attribute *zend_add_class_constant_attrib...
FILE: Zend/zend_attributes.stub.php
class Attribute (line 5) | #[Attribute(Attribute::TARGET_CLASS)]
method __construct (line 27) | public function __construct(int $flags = Attribute::TARGET_ALL) {}
class ReturnTypeWillChange (line 30) | #[Attribute(Attribute::TARGET_METHOD)]
method __construct (line 33) | public function __construct() {}
class AllowDynamicProperties (line 36) | #[Attribute(Attribute::TARGET_CLASS)]
method __construct (line 39) | public function __construct() {}
class SensitiveParameter (line 45) | #[Attribute(Attribute::TARGET_PARAMETER)]
method __construct (line 48) | public function __construct() {}
class SensitiveParameterValue (line 55) | final class SensitiveParameterValue
method __construct (line 59) | public function __construct(mixed $value) {}
method getValue (line 61) | public function getValue(): mixed {}
method __debugInfo (line 63) | public function __debugInfo(): array {}
class Override (line 69) | #[Attribute(Attribute::TARGET_METHOD)]
method __construct (line 72) | public function __construct() {}
class Deprecated (line 78) | #[Attribute(Attribute::TARGET_METHOD|Attribute::TARGET_FUNCTION|Attribut...
method __construct (line 85) | public function __construct(?string $message = null, ?string $since = ...
FILE: Zend/zend_attributes_arginfo.h
function zend_class_entry (line 79) | static zend_class_entry *register_class_Attribute(void)
function zend_class_entry (line 150) | static zend_class_entry *register_class_ReturnTypeWillChange(void)
function zend_class_entry (line 167) | static zend_class_entry *register_class_AllowDynamicProperties(void)
function zend_class_entry (line 184) | static zend_class_entry *register_class_SensitiveParameter(void)
function zend_class_entry (line 201) | static zend_class_entry *register_class_SensitiveParameterValue(void)
function zend_class_entry (line 217) | static zend_class_entry *register_class_Override(void)
function zend_class_entry (line 234) | static zend_class_entry *register_class_Deprecated(void)
FILE: Zend/zend_bitset.h
type zend_ulong (line 29) | typedef zend_ulong *zend_bitset;
function zend_bitset_len (line 127) | static inline uint32_t zend_bitset_len(uint32_t n)
function zend_bitset_in (line 132) | static inline bool zend_bitset_in(zend_bitset set, uint32_t n)
function zend_bitset_incl (line 137) | static inline void zend_bitset_incl(zend_bitset set, uint32_t n)
function zend_bitset_excl (line 142) | static inline void zend_bitset_excl(zend_bitset set, uint32_t n)
function zend_bitset_clear (line 147) | static inline void zend_bitset_clear(zend_bitset set, uint32_t len)
function zend_bitset_empty (line 152) | static inline bool zend_bitset_empty(zend_bitset set, uint32_t len)
function zend_bitset_fill (line 163) | static inline void zend_bitset_fill(zend_bitset set, uint32_t len)
function zend_bitset_equal (line 168) | static inline bool zend_bitset_equal(zend_bitset set1, zend_bitset set2,...
function zend_bitset_copy (line 173) | static inline void zend_bitset_copy(zend_bitset set1, zend_bitset set2, ...
function zend_bitset_intersection (line 178) | static inline void zend_bitset_intersection(zend_bitset set1, zend_bitse...
function zend_bitset_union (line 187) | static inline void zend_bitset_union(zend_bitset set1, zend_bitset set2,...
function zend_bitset_difference (line 196) | static inline void zend_bitset_difference(zend_bitset set1, zend_bitset ...
function zend_bitset_union_with_intersection (line 205) | static inline void zend_bitset_union_with_intersection(zend_bitset set1,...
function zend_bitset_union_with_difference (line 214) | static inline void zend_bitset_union_with_difference(zend_bitset set1, z...
function zend_bitset_subset (line 223) | static inline bool zend_bitset_subset(zend_bitset set1, zend_bitset set2...
function zend_bitset_first (line 235) | static inline int zend_bitset_first(zend_bitset set, uint32_t len)
function zend_bitset_last (line 247) | static inline int zend_bitset_last(zend_bitset set, uint32_t len)
function zend_bitset_pop_first (line 293) | static inline int zend_bitset_pop_first(zend_bitset set, uint32_t len) {
FILE: Zend/zend_builtin_functions.c
function ZEND_MINIT_FUNCTION (line 37) | ZEND_MINIT_FUNCTION(core) { /* {{{ */
function zend_result (line 60) | zend_result zend_startup_builtin_functions(void) /* {{{ */
function ZEND_FUNCTION (line 72) | ZEND_FUNCTION(exit)
function ZEND_FUNCTION (line 100) | ZEND_FUNCTION(zend_version)
function ZEND_FUNCTION (line 110) | ZEND_FUNCTION(gc_mem_caches)
function ZEND_FUNCTION (line 120) | ZEND_FUNCTION(gc_collect_cycles)
function ZEND_FUNCTION (line 129) | ZEND_FUNCTION(gc_enabled)
function ZEND_FUNCTION (line 138) | ZEND_FUNCTION(gc_enable)
function ZEND_FUNCTION (line 151) | ZEND_FUNCTION(gc_disable)
function ZEND_FUNCTION (line 164) | ZEND_FUNCTION(gc_status)
function ZEND_FUNCTION (line 192) | ZEND_FUNCTION(func_num_args)
function ZEND_FUNCTION (line 212) | ZEND_FUNCTION(func_get_arg)
function ZEND_FUNCTION (line 258) | ZEND_FUNCTION(func_get_args)
function ZEND_FUNCTION (line 328) | ZEND_FUNCTION(strlen)
function ZEND_FUNCTION (line 341) | ZEND_FUNCTION(strcmp)
function ZEND_FUNCTION (line 355) | ZEND_FUNCTION(strncmp)
function ZEND_FUNCTION (line 376) | ZEND_FUNCTION(strcasecmp)
function ZEND_FUNCTION (line 390) | ZEND_FUNCTION(strncasecmp)
function ZEND_FUNCTION (line 411) | ZEND_FUNCTION(error_reporting)
function validate_constant_array_argument (line 458) | static bool validate_constant_array_argument(HashTable *ht, int argument...
function copy_constant_array (line 482) | static void copy_constant_array(zval *dst, zval *src) /* {{{ */
function ZEND_FUNCTION (line 509) | ZEND_FUNCTION(define)
function ZEND_FUNCTION (line 562) | ZEND_FUNCTION(defined)
function ZEND_FUNCTION (line 579) | ZEND_FUNCTION(get_class)
function ZEND_FUNCTION (line 607) | ZEND_FUNCTION(get_called_class)
function ZEND_FUNCTION (line 624) | ZEND_FUNCTION(get_parent_class)
function is_a_impl (line 649) | static void is_a_impl(INTERNAL_FUNCTION_PARAMETERS, bool only_subclass) ...
function ZEND_FUNCTION (line 702) | ZEND_FUNCTION(is_subclass_of)
function ZEND_FUNCTION (line 709) | ZEND_FUNCTION(is_a)
function add_class_vars (line 716) | static void add_class_vars(zend_class_entry *scope, zend_class_entry *ce...
function ZEND_FUNCTION (line 765) | ZEND_FUNCTION(get_class_vars)
function ZEND_FUNCTION (line 787) | ZEND_FUNCTION(get_object_vars)
function ZEND_FUNCTION (line 878) | ZEND_FUNCTION(get_mangled_object_vars)
function ZEND_FUNCTION (line 902) | ZEND_FUNCTION(get_class_methods)
function ZEND_FUNCTION (line 932) | ZEND_FUNCTION(method_exists)
function _property_exists (line 995) | static void _property_exists(zval *return_value, zval *object, zend_stri...
function ZEND_FUNCTION (line 1027) | ZEND_FUNCTION(property_exists)
function _class_exists_impl (line 1056) | static inline void _class_exists_impl(zval *return_value, zend_string *n...
function class_exists_impl (line 1091) | static inline void class_exists_impl(INTERNAL_FUNCTION_PARAMETERS, int f...
function ZEND_FUNCTION (line 1106) | ZEND_FUNCTION(class_exists)
function ZEND_FUNCTION (line 1141) | ZEND_FUNCTION(interface_exists)
function ZEND_FUNCTION (line 1148) | ZEND_FUNCTION(trait_exists)
function ZEND_FUNCTION (line 1154) | ZEND_FUNCTION(enum_exists)
function ZEND_FUNCTION (line 1160) | ZEND_FUNCTION(function_exists)
function ZEND_FUNCTION (line 1186) | ZEND_FUNCTION(class_alias)
function ZEND_FUNCTION (line 1217) | ZEND_FUNCTION(get_included_files)
function ZEND_FUNCTION (line 1233) | ZEND_FUNCTION(trigger_error)
function ZEND_FUNCTION (line 1267) | ZEND_FUNCTION(set_error_handler)
function ZEND_FUNCTION (line 1297) | ZEND_FUNCTION(restore_error_handler)
function ZEND_FUNCTION (line 1326) | ZEND_FUNCTION(set_exception_handler)
function ZEND_FUNCTION (line 1351) | ZEND_FUNCTION(restore_exception_handler)
function get_declared_class_impl (line 1371) | static inline void get_declared_class_impl(INTERNAL_FUNCTION_PARAMETERS,...
function ZEND_FUNCTION (line 1402) | ZEND_FUNCTION(get_declared_traits)
function ZEND_FUNCTION (line 1409) | ZEND_FUNCTION(get_declared_classes)
function ZEND_FUNCTION (line 1416) | ZEND_FUNCTION(get_declared_interfaces)
function ZEND_FUNCTION (line 1423) | ZEND_FUNCTION(get_defined_functions)
function ZEND_FUNCTION (line 1459) | ZEND_FUNCTION(get_defined_vars)
function ZEND_FUNCTION (line 1479) | ZEND_FUNCTION(zend_thread_id)
function ZEND_FUNCTION (line 1488) | ZEND_FUNCTION(get_resource_type)
function ZEND_FUNCTION (line 1507) | ZEND_FUNCTION(get_resource_id)
function ZEND_FUNCTION (line 1520) | ZEND_FUNCTION(get_resources)
function add_zendext_info (line 1566) | static void add_zendext_info(zend_extension *ext, void *arg) /* {{{ */
function ZEND_FUNCTION (line 1574) | ZEND_FUNCTION(get_loaded_extensions)
function ZEND_FUNCTION (line 1597) | ZEND_FUNCTION(get_defined_constants)
function debug_backtrace_get_args (line 1667) | static void debug_backtrace_get_args(zend_execute_data *call, zval *arg_...
function ZEND_FUNCTION (line 1812) | ZEND_FUNCTION(debug_print_backtrace)
function ZEND_API (line 1833) | ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_la...
function ZEND_FUNCTION (line 2152) | ZEND_FUNCTION(debug_backtrace)
function ZEND_FUNCTION (line 2166) | ZEND_FUNCTION(extension_loaded)
function ZEND_FUNCTION (line 2186) | ZEND_FUNCTION(get_extension_funcs)
FILE: Zend/zend_builtin_functions.h
type zval (line 25) | typedef struct _zval_struct zval;
FILE: Zend/zend_builtin_functions.stub.php
class stdClass (line 5) | #[\AllowDynamicProperties]
function exit (line 10) | function exit(string|int $status = 0): never {}
function die (line 13) | function die(string|int $status = 0): never {}
function zend_version (line 16) | function zend_version(): string {}
function func_num_args (line 18) | function func_num_args(): int {}
function func_get_arg (line 20) | function func_get_arg(int $position): mixed {}
function func_get_args (line 23) | function func_get_args(): array {}
function strlen (line 25) | function strlen(string $string): int {}
function strcmp (line 28) | function strcmp(string $string1, string $string2): int {}
function strncmp (line 31) | function strncmp(string $string1, string $string2, int $length): int {}
function strcasecmp (line 34) | function strcasecmp(string $string1, string $string2): int {}
function strncasecmp (line 37) | function strncasecmp(string $string1, string $string2, int $length): int {}
function error_reporting (line 39) | function error_reporting(?int $error_level = null): int {}
function define (line 41) | function define(string $constant_name, mixed $value, bool $case_insensit...
function defined (line 43) | function defined(string $constant_name): bool {}
function get_class (line 45) | function get_class(object $object = UNKNOWN): string {}
function get_called_class (line 47) | function get_called_class(): string {}
function get_parent_class (line 49) | function get_parent_class(object|string $object_or_class = UNKNOWN): str...
function is_subclass_of (line 52) | function is_subclass_of(mixed $object_or_class, string $class, bool $all...
function is_a (line 55) | function is_a(mixed $object_or_class, string $class, bool $allow_string ...
function get_class_vars (line 61) | function get_class_vars(string $class): array {}
function get_object_vars (line 63) | function get_object_vars(object $object): array {}
function get_mangled_object_vars (line 65) | function get_mangled_object_vars(object $object): array {}
function get_class_methods (line 71) | function get_class_methods(object|string $object_or_class): array {}
function method_exists (line 74) | function method_exists($object_or_class, string $method): bool {}
function property_exists (line 80) | function property_exists($object_or_class, string $property): bool {}
function class_exists (line 86) | function class_exists(string $class, bool $autoload = true): bool {}
function interface_exists (line 88) | function interface_exists(string $interface, bool $autoload = true): boo...
function trait_exists (line 90) | function trait_exists(string $trait, bool $autoload = true): bool {}
function enum_exists (line 92) | function enum_exists(string $enum, bool $autoload = true): bool {}
function function_exists (line 94) | function function_exists(string $function): bool {}
function class_alias (line 96) | function class_alias(string $class, string $alias, bool $autoload = true...
function get_included_files (line 102) | function get_included_files(): array {}
function get_required_files (line 108) | function get_required_files(): array {}
function trigger_error (line 110) | function trigger_error(string $message, int $error_level = E_USER_NOTICE...
function user_error (line 113) | function user_error(string $message, int $error_level = E_USER_NOTICE): ...
function set_error_handler (line 116) | function set_error_handler(?callable $callback, int $error_levels = E_AL...
function restore_error_handler (line 118) | function restore_error_handler(): true {}
function set_exception_handler (line 121) | function set_exception_handler(?callable $callback) {}
function restore_exception_handler (line 123) | function restore_exception_handler(): true {}
function get_declared_classes (line 129) | function get_declared_classes(): array {}
function get_declared_traits (line 135) | function get_declared_traits(): array {}
function get_declared_interfaces (line 141) | function get_declared_interfaces(): array {}
function get_defined_functions (line 147) | function get_defined_functions(bool $exclude_disabled = true): array {}
function get_defined_vars (line 153) | function get_defined_vars(): array {}
function get_resource_type (line 159) | function get_resource_type($resource): string {}
function get_resource_id (line 162) | function get_resource_id($resource): int {}
function get_resources (line 164) | function get_resources(?string $type = null): array {}
function get_loaded_extensions (line 170) | function get_loaded_extensions(bool $zend_extensions = false): array {}
function get_defined_constants (line 176) | function get_defined_constants(bool $categorize = false): array {}
function debug_backtrace (line 182) | function debug_backtrace(int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT, ...
function debug_print_backtrace (line 184) | function debug_print_backtrace(int $options = 0, int $limit = 0): void {}
function extension_loaded (line 186) | function extension_loaded(string $extension): bool {}
function get_extension_funcs (line 192) | function get_extension_funcs(string $extension): array|false {}
function zend_thread_id (line 195) | function zend_thread_id(): int {}
function gc_mem_caches (line 198) | function gc_mem_caches(): int {}
function gc_collect_cycles (line 200) | function gc_collect_cycles(): int {}
function gc_enabled (line 202) | function gc_enabled(): bool {}
function gc_enable (line 204) | function gc_enable(): void {}
function gc_disable (line 206) | function gc_disable(): void {}
function gc_status (line 212) | function gc_status(): array {}
FILE: Zend/zend_builtin_functions_arginfo.h
function zend_class_entry (line 367) | static zend_class_entry *register_class_stdClass(void)
FILE: Zend/zend_call_stack.c
type boolean_t (line 50) | typedef int boolean_t;
function ZEND_API (line 83) | ZEND_API void zend_call_stack_init(void) {
function zend_call_stack_is_main_thread (line 121) | static bool zend_call_stack_is_main_thread(void) {
function zend_call_stack_get_linux_pthread (line 130) | static bool zend_call_stack_get_linux_pthread(zend_call_stack *stack)
function zend_call_stack_get_linux_pthread (line 175) | static bool zend_call_stack_get_linux_pthread(zend_call_stack *stack)
function zend_call_stack_get_linux_proc_maps (line 181) | static bool zend_call_stack_get_linux_proc_maps(zend_call_stack *stack)
function zend_call_stack_get_linux (line 265) | static bool zend_call_stack_get_linux(zend_call_stack *stack)
function zend_call_stack_get_linux (line 274) | static bool zend_call_stack_get_linux(zend_call_stack *stack)
function zend_call_stack_is_main_thread (line 281) | static bool zend_call_stack_is_main_thread(void)
function zend_call_stack_get_freebsd_pthread (line 288) | static bool zend_call_stack_get_freebsd_pthread(zend_call_stack *stack)
function zend_call_stack_get_freebsd_pthread (line 321) | static bool zend_call_stack_get_freebsd_pthread(zend_call_stack *stack)
function zend_call_stack_get_freebsd_sysctl (line 327) | static bool zend_call_stack_get_freebsd_sysctl(zend_call_stack *stack)
function zend_call_stack_get_freebsd (line 364) | static bool zend_call_stack_get_freebsd(zend_call_stack *stack)
function zend_call_stack_get_freebsd (line 373) | static bool zend_call_stack_get_freebsd(zend_call_stack *stack)
function zend_call_stack_get_win32 (line 380) | static bool zend_call_stack_get_win32(zend_call_stack *stack)
function zend_call_stack_get_win32 (line 443) | static bool zend_call_stack_get_win32(zend_call_stack *stack)
function zend_call_stack_get_macos (line 450) | static bool zend_call_stack_get_macos(zend_call_stack *stack)
function zend_call_stack_get_macos (line 480) | static bool zend_call_stack_get_macos(zend_call_stack *stack)
function zend_call_stack_get_openbsd_pthread (line 488) | static bool zend_call_stack_get_openbsd_pthread(zend_call_stack *stack)
function zend_call_stack_get_openbsd_pthread (line 502) | static bool zend_call_stack_get_openbsd_pthread(zend_call_stack *stack)
function zend_call_stack_get_openbsd_vm (line 508) | static bool zend_call_stack_get_openbsd_vm(zend_call_stack *stack)
function zend_call_stack_get_openbsd (line 535) | static bool zend_call_stack_get_openbsd(zend_call_stack *stack)
function zend_call_stack_get_openbsd (line 546) | static bool zend_call_stack_get_openbsd(zend_call_stack *stack)
function zend_call_stack_get_haiku (line 552) | static bool zend_call_stack_get_haiku(zend_call_stack *stack)
function zend_call_stack_get_haiku (line 572) | static bool zend_call_stack_get_haiku(zend_call_stack *stack)
function zend_call_stack_get_netbsd_pthread (line 580) | static bool zend_call_stack_get_netbsd_pthread(zend_call_stack *stack)
function zend_call_stack_get_netbsd_pthread (line 611) | static bool zend_call_stack_get_netbsd_pthread(zend_call_stack *stack)
function zend_call_stack_get_netbsd_vm (line 616) | static bool zend_call_stack_get_netbsd_vm(zend_call_stack *stack, void *...
function zend_call_stack_get_netbsd (line 672) | static bool zend_call_stack_get_netbsd(zend_call_stack *stack)
function zend_call_stack_get_netbsd (line 684) | static bool zend_call_stack_get_netbsd(zend_call_stack *stack)
function zend_call_stack_get_solaris_pthread (line 691) | static bool zend_call_stack_get_solaris_pthread(zend_call_stack *stack)
function zend_call_stack_get_solaris_proc_maps (line 704) | static bool zend_call_stack_get_solaris_proc_maps(zend_call_stack *stack)
function zend_call_stack_get_solaris (line 777) | static bool zend_call_stack_get_solaris(zend_call_stack *stack)
function zend_call_stack_get_solaris (line 787) | static bool zend_call_stack_get_solaris(zend_call_stack *stack)
function ZEND_API (line 794) | ZEND_API bool zend_call_stack_get(zend_call_stack *stack)
FILE: Zend/zend_call_stack.h
type zend_call_stack (line 30) | typedef struct _zend_call_stack {
function zend_always_inline (line 40) | static zend_always_inline void *zend_call_stack_position(void) {
function zend_always_inline (line 52) | static zend_always_inline bool zend_call_stack_overflowed(void *stack_li...
function zend_call_stack_default_size (line 71) | static inline size_t zend_call_stack_default_size(void)
FILE: Zend/zend_closures.c
type zend_closure (line 31) | typedef struct _zend_closure {
function zend_valid_closure_binding (line 72) | static bool zend_valid_closure_binding(
function do_closure_bind (line 221) | static void do_closure_bind(zval *return_value, zval *zclosure, zval *ne...
function ZEND_NAMED_FUNCTION (line 285) | static ZEND_NAMED_FUNCTION(zend_closure_call_magic) /* {{{ */ {
function zend_result (line 329) | static zend_result zend_create_closure_from_callable(zval *return_value,...
function ZEND_COLD (line 416) | static ZEND_COLD zend_function *zend_closure_get_constructor(zend_object...
function zend_closure_compare (line 424) | static int zend_closure_compare(zval *o1, zval *o2) /* {{{ */
function ZEND_API (line 463) | ZEND_API zend_function *zend_get_closure_invoke_method(zend_object *obje...
function ZEND_API (line 492) | ZEND_API const zend_function *zend_get_closure_method_def(zend_object *o...
function ZEND_API (line 499) | ZEND_API zval* zend_get_closure_this_ptr(zval *obj) /* {{{ */
function zend_function (line 506) | static zend_function *zend_closure_get_method(zend_object **object, zend...
function zend_closure_free_storage (line 516) | static void zend_closure_free_storage(zend_object *object) /* {{{ */
function zend_object (line 539) | static zend_object *zend_closure_new(zend_class_entry *class_type) /* {{...
function zend_object (line 552) | static zend_object *zend_closure_clone(zend_object *zobject) /* {{{ */
function zend_result (line 563) | static zend_result zend_closure_get_closure(zend_object *obj, zend_class...
function HashTable (line 581) | static HashTable *zend_closure_get_debug_info(zend_object *object, int *...
function HashTable (line 684) | static HashTable *zend_closure_get_gc(zend_object *obj, zval **table, in...
function ZEND_COLD (line 698) | ZEND_COLD ZEND_METHOD(Closure, __construct)
function zend_register_closure_ce (line 704) | void zend_register_closure_ce(void) /* {{{ */
function ZEND_NAMED_FUNCTION (line 722) | static ZEND_NAMED_FUNCTION(zend_closure_internal_handler) /* {{{ */
function zend_create_closure_ex (line 732) | static void zend_create_closure_ex(zval *res, zend_function *func, zend_...
function ZEND_API (line 836) | ZEND_API void zend_create_closure(zval *res, zend_function *func, zend_c...
function ZEND_API (line 842) | ZEND_API void zend_create_fake_closure(zval *res, zend_function *func, z...
function zend_closure_from_frame (line 856) | void zend_closure_from_frame(zval *return_value, zend_execute_data *call...
function zend_closure_bind_var (line 902) | void zend_closure_bind_var(zval *closure_zv, zend_string *var_name, zval...
function zend_closure_bind_var_ex (line 910) | void zend_closure_bind_var_ex(zval *closure_zv, uint32_t offset, zval *v...
FILE: Zend/zend_closures.stub.php
class Closure (line 9) | final class Closure
method __construct (line 11) | private function __construct() {}
method bind (line 13) | public static function bind(
method bindTo (line 19) | public function bindTo(?object $newThis, object|string|null $newScope ...
method call (line 21) | public function call(object $newThis, mixed ...$args): mixed {}
method fromCallable (line 23) | public static function fromCallable(callable $callback): Closure {}
FILE: Zend/zend_closures_arginfo.h
function zend_class_entry (line 42) | static zend_class_entry *register_class_Closure(void)
FILE: Zend/zend_compile.c
type zend_loop_var (line 62) | typedef struct _zend_loop_var {
function zend_alloc_cache_slots (line 69) | static inline uint32_t zend_alloc_cache_slots(unsigned count) {
function zend_alloc_cache_slot (line 83) | static inline uint32_t zend_alloc_cache_slot(void) {
function zend_never_inline (line 106) | zend_never_inline static void zend_stack_limit_error(void)
function zend_check_stack_limit (line 118) | static void zend_check_stack_limit(void)
function zend_check_stack_limit (line 125) | static void zend_check_stack_limit(void)
function init_op (line 130) | static void init_op(zend_op *op)
function zend_always_inline (line 145) | static zend_always_inline uint32_t get_next_op_number(void)
function zend_op (line 150) | static zend_op *get_next_op(void)
function zend_brk_cont_element (line 168) | static zend_brk_cont_element *get_next_brk_cont_element(void)
function zend_string (line 175) | static zend_string *zend_build_runtime_definition_key(zend_string *name,...
function zend_get_unqualified_name (line 184) | static bool zend_get_unqualified_name(const zend_string *name, const cha...
type reserved_class_name (line 197) | struct reserved_class_name {
type reserved_class_name (line 201) | struct reserved_class_name
function zend_is_reserved_class_name (line 220) | static bool zend_is_reserved_class_name(const zend_string *name) /* {{{ */
function zend_assert_valid_class_name (line 240) | void zend_assert_valid_class_name(const zend_string *name, const char *t...
type builtin_type_info (line 252) | typedef struct _builtin_type_info {
type confusable_type_info (line 274) | typedef struct {
function zend_always_inline (line 288) | static zend_always_inline uint8_t zend_lookup_builtin_type_by_name(const...
function zend_always_inline (line 304) | static zend_always_inline bool zend_is_confusable_type(const zend_string...
function zend_is_not_imported (line 321) | static bool zend_is_not_imported(zend_string *name) {
function zend_oparray_context_begin (line 326) | void zend_oparray_context_begin(zend_oparray_context *prev_context, zend...
function zend_oparray_context_end (line 346) | void zend_oparray_context_end(zend_oparray_context *prev_context) /* {{{ */
function zend_reset_import_tables (line 361) | static void zend_reset_import_tables(void) /* {{{ */
function zend_end_namespace (line 385) | static void zend_end_namespace(void) /* {{{ */ {
function zend_file_context_begin (line 395) | void zend_file_context_begin(zend_file_context *prev_context) /* {{{ */
function zend_file_context_end (line 409) | void zend_file_context_end(zend_file_context *prev_context) /* {{{ */
function zend_init_compiler_data_structures (line 417) | void zend_init_compiler_data_structures(void) /* {{{ */
function zend_register_seen_symbol (line 432) | static void zend_register_seen_symbol(zend_string *name, uint32_t kind) {
function zend_have_seen_symbol (line 443) | static bool zend_have_seen_symbol(zend_string *name, uint32_t kind) {
function init_compiler (line 448) | void init_compiler(void) /* {{{ */
function shutdown_compiler (line 465) | void shutdown_compiler(void) /* {{{ */
function ZEND_API (line 493) | ZEND_API zend_string *zend_set_compiled_filename(zend_string *new_compil...
function ZEND_API (line 500) | ZEND_API void zend_restore_compiled_filename(zend_string *original_compi...
function ZEND_API (line 510) | ZEND_API zend_string *zend_get_compiled_filename(void) /* {{{ */
function ZEND_API (line 516) | ZEND_API int zend_get_compiled_lineno(void) /* {{{ */
function ZEND_API (line 522) | ZEND_API bool zend_is_compiling(void) /* {{{ */
function zend_always_inline (line 528) | static zend_always_inline uint32_t get_temporary_variable(void) /* {{{ */
function lookup_cv (line 534) | static int lookup_cv(zend_string *name) /* {{{ */{
function zend_string (line 558) | zend_string *zval_make_interned_string(zval *zv)
function zend_insert_literal (line 569) | static inline void zend_insert_literal(zend_op_array *op_array, zval *zv...
function zend_add_literal (line 583) | static int zend_add_literal(zval *zv) /* {{{ */
function zend_add_literal_string (line 599) | static inline int zend_add_literal_string(zend_string **str) /* {{{ */
function zend_add_func_name_literal (line 610) | static int zend_add_func_name_literal(zend_string *name) /* {{{ */
function zend_add_ns_func_name_literal (line 623) | static int zend_add_ns_func_name_literal(zend_string *name) /* {{{ */
function zend_add_class_name_literal (line 646) | static int zend_add_class_name_literal(zend_string *name) /* {{{ */
function zend_add_const_name_literal (line 659) | static int zend_add_const_name_literal(zend_string *name, bool unqualifi...
function zend_stop_lexing (line 698) | void zend_stop_lexing(void)
function zend_begin_loop (line 707) | static inline void zend_begin_loop(
function zend_end_loop (line 737) | static inline void zend_end_loop(int cont_addr, const znode *var_node) /...
function zend_do_free (line 750) | static void zend_do_free(znode *op1) /* {{{ */
function zend_modifier_token_to_flag (line 873) | uint32_t zend_modifier_token_to_flag(zend_modifier_target target, uint32...
function zend_modifier_list_to_flags (line 951) | uint32_t zend_modifier_list_to_flags(zend_modifier_target target, zend_a...
function zend_add_class_modifier (line 970) | uint32_t zend_add_class_modifier(uint32_t flags, uint32_t new_flag) /* {...
function zend_add_anonymous_class_modifier (line 995) | uint32_t zend_add_anonymous_class_modifier(uint32_t flags, uint32_t new_...
function zend_add_member_modifier (line 1014) | uint32_t zend_add_member_modifier(uint32_t flags, uint32_t new_flag, zen...
function ZEND_API (line 1062) | ZEND_API zend_string *zend_create_member_string(zend_string *class_name,...
function zend_string (line 1069) | static zend_string *zend_concat_names(char *name1, size_t name1_len, cha...
function zend_string (line 1073) | static zend_string *zend_prefix_with_ns(zend_string *name) {
function zend_string (line 1082) | static zend_string *zend_resolve_non_class_name(
function zend_string (line 1140) | static zend_string *zend_resolve_function_name(zend_string *name, uint32...
function zend_string (line 1146) | static zend_string *zend_resolve_const_name(zend_string *name, uint32_t ...
function zend_string (line 1152) | static zend_string *zend_resolve_class_name(zend_string *name, uint32_t ...
function zend_string (line 1215) | static zend_string *zend_resolve_class_name_ast(zend_ast *ast) /* {{{ */
function label_ptr_dtor (line 1225) | static void label_ptr_dtor(zval *zv) /* {{{ */
function str_dtor (line 1231) | static void str_dtor(zval *zv) /* {{{ */ {
function zend_add_try_element (line 1238) | static uint32_t zend_add_try_element(uint32_t try_op) /* {{{ */
function ZEND_API (line 1257) | ZEND_API void function_add_ref(zend_function *function) /* {{{ */
function do_bind_function_error (line 1275) | void do_bind_function_error(zend_string *lcname, zend_op_array *op_array...
function ZEND_API (line 1295) | ZEND_API zend_result do_bind_function(zend_function *func, zval *lcname)...
function ZEND_API (line 1314) | ZEND_API zend_class_entry *zend_bind_class_in_slot(
function ZEND_API (line 1356) | ZEND_API zend_result do_bind_class(zval *lcname, zend_string *lc_parent_...
function zend_string (line 1377) | static zend_string *add_type_string(zend_string *type, zend_string *new_...
function zend_string (line 1395) | static zend_string *resolve_class_name(zend_string *name, zend_class_ent...
function zend_string (line 1414) | static zend_string *add_intersection_type(zend_string *str,
function zend_string (line 1442) | zend_string *zend_type_to_string_resolved(zend_type type, zend_class_ent...
function ZEND_API (line 1532) | ZEND_API zend_string *zend_type_to_string(zend_type type) {
function is_generator_compatible_class_type (line 1536) | static bool is_generator_compatible_class_type(zend_string *name) {
function zend_mark_function_as_generator (line 1542) | static void zend_mark_function_as_generator(void) /* {{{ */
function ZEND_API (line 1575) | ZEND_API zend_string *zend_mangle_property_name(const char *src1, size_t...
function ZEND_API (line 1587) | ZEND_API zend_result zend_unmangle_property_name_ex(const zend_string *n...
function array_is_const_ex (line 1633) | static bool array_is_const_ex(zend_array *array, uint32_t *max_checks)
function array_is_const (line 1656) | static bool array_is_const(zend_array *array)
function can_ct_eval_const (line 1662) | static bool can_ct_eval_const(zend_constant *c) {
function zend_try_ct_eval_const (line 1683) | static bool zend_try_ct_eval_const(zval *zv, zend_string *name, bool is_...
function zend_is_scope_known (line 1708) | static inline bool zend_is_scope_known(void) /* {{{ */
function class_name_refers_to_active_ce (line 1731) | static inline bool class_name_refers_to_active_ce(zend_string *class_nam...
function zend_get_class_fetch_type (line 1744) | uint32_t zend_get_class_fetch_type(const zend_string *name) /* {{{ */
function zend_get_class_fetch_type_ast (line 1758) | static uint32_t zend_get_class_fetch_type_ast(zend_ast *name_ast) /* {{{ */
function zend_string (line 1769) | static zend_string *zend_resolve_const_class_name_reference(zend_ast *as...
function zend_ensure_valid_class_fetch_type (line 1780) | static void zend_ensure_valid_class_fetch_type(uint32_t fetch_type) /* {...
function zend_try_compile_const_expr_resolve_class_name (line 1796) | static bool zend_try_compile_const_expr_resolve_class_name(zval *zv, zen...
function zend_verify_ct_const_access (line 1839) | static bool zend_verify_ct_const_access(zend_class_constant *c, zend_cla...
function zend_try_ct_eval_class_const (line 1875) | static bool zend_try_ct_eval_class_const(zval *zv, zend_string *class_na...
function zend_add_to_list (line 1917) | static void zend_add_to_list(void *result, void *item) /* {{{ */
function zend_do_extended_stmt (line 1937) | static void zend_do_extended_stmt(void) /* {{{ */
function zend_do_extended_fcall_begin (line 1951) | static void zend_do_extended_fcall_begin(void) /* {{{ */
function zend_do_extended_fcall_end (line 1965) | static void zend_do_extended_fcall_end(void) /* {{{ */
function ZEND_API (line 1979) | ZEND_API bool zend_is_auto_global_str(const char *name, size_t len) /* {...
function ZEND_API (line 1992) | ZEND_API bool zend_is_auto_global(zend_string *name) /* {{{ */
function ZEND_API (line 2006) | ZEND_API zend_result zend_register_auto_global(zend_string *name, bool j...
function ZEND_API (line 2021) | ZEND_API void zend_activate_auto_globals(void) /* {{{ */
function zendlex (line 2037) | int ZEND_FASTCALL zendlex(zend_parser_stack_elem *elem) /* {{{ */
function ZEND_API (line 2054) | ZEND_API void zend_initialize_class_data(zend_class_entry *ce, bool null...
function ZEND_API (line 2123) | ZEND_API zend_string *zend_get_compiled_variable_name(const zend_op_arra...
function zend_ast (line 2129) | zend_ast *zend_ast_append_str(zend_ast *left_ast, zend_ast *right_ast) /...
function zend_ast (line 2150) | zend_ast *zend_negate_num_string(zend_ast *ast) /* {{{ */
function zend_verify_namespace (line 2172) | static void zend_verify_namespace(void) /* {{{ */
function ZEND_API (line 2182) | ZEND_API size_t zend_dirname(char *path, size_t len)
function zend_adjust_for_fetch_type (line 2247) | static void zend_adjust_for_fetch_type(zend_op *opline, znode *result, u...
function zend_make_var_result (line 2278) | static inline void zend_make_var_result(znode *result, zend_op *opline) ...
function zend_make_tmp_result (line 2286) | static inline void zend_make_tmp_result(znode *result, zend_op *opline) ...
function zend_op (line 2294) | static zend_op *zend_emit_op(znode *result, uint8_t opcode, znode *op1, ...
function zend_op (line 2314) | static zend_op *zend_emit_op_tmp(znode *result, uint8_t opcode, znode *o...
function zend_emit_tick (line 2335) | static void zend_emit_tick(void) /* {{{ */
function zend_op (line 2351) | static inline zend_op *zend_emit_op_data(znode *value) /* {{{ */
function zend_emit_jump (line 2357) | static inline uint32_t zend_emit_jump(uint32_t opnum_target) /* {{{ */
function ZEND_API (line 2366) | ZEND_API bool zend_is_smart_branch(const zend_op *opline) /* {{{ */
function zend_emit_cond_jump (line 2394) | static inline uint32_t zend_emit_cond_jump(uint8_t opcode, znode *cond, ...
function zend_update_jump_target (line 2418) | static inline void zend_update_jump_target(uint32_t opnum_jump, uint32_t...
function zend_update_jump_target_to_next (line 2441) | static inline void zend_update_jump_target_to_next(uint32_t opnum_jump) ...
function zend_op (line 2447) | static inline zend_op *zend_delayed_emit_op(znode *result, uint8_t opcod...
function zend_delayed_compile_begin (line 2469) | static inline uint32_t zend_delayed_compile_begin(void) /* {{{ */
function zend_op (line 2475) | static zend_op *zend_delayed_compile_end(uint32_t offset) /* {{{ */
function zend_ast_kind_is_short_circuited (line 2495) | static bool zend_ast_kind_is_short_circuited(zend_ast_kind ast_kind)
function zend_ast_is_short_circuited (line 2511) | static bool zend_ast_is_short_circuited(const zend_ast *ast)
function zend_assert_not_short_circuited (line 2528) | static void zend_assert_not_short_circuited(const zend_ast *ast)
function zend_short_circuiting_mark_inner (line 2541) | static void zend_short_circuiting_mark_inner(zend_ast *ast) {
function zend_short_circuiting_checkpoint (line 2547) | static uint32_t zend_short_circuiting_checkpoint(void)
function zend_short_circuiting_commit (line 2552) | static void zend_short_circuiting_commit(uint32_t checkpoint, znode *res...
function zend_emit_jmp_null (line 2580) | static void zend_emit_jmp_null(znode *obj_node, uint32_t bp_type)
function zend_compile_memoized_expr (line 2593) | static void zend_compile_memoized_expr(znode *result, zend_ast *expr) /*...
function zend_type_get_num_classes (line 2630) | static size_t zend_type_get_num_classes(zend_type type) {
function zend_emit_return_type_check (line 2656) | static void zend_emit_return_type_check(
function zend_emit_final_return (line 2723) | void zend_emit_final_return(bool return_one) /* {{{ */
function zend_is_variable (line 2753) | static inline bool zend_is_variable(zend_ast *ast) /* {{{ */
function zend_is_call (line 2763) | static inline bool zend_is_call(zend_ast *ast) /* {{{ */
function zend_is_variable_or_call (line 2772) | static inline bool zend_is_variable_or_call(zend_ast *ast) /* {{{ */
function zend_is_unticked_stmt (line 2778) | static inline bool zend_is_unticked_stmt(zend_ast *ast) /* {{{ */
function zend_can_write_to_variable (line 2786) | static inline bool zend_can_write_to_variable(zend_ast *ast) /* {{{ */
function zend_is_const_default_class_ref (line 2799) | static inline bool zend_is_const_default_class_ref(zend_ast *name_ast) /...
function zend_handle_numeric_op (line 2809) | static inline void zend_handle_numeric_op(znode *node) /* {{{ */
function zend_handle_numeric_dim (line 2822) | static inline void zend_handle_numeric_dim(zend_op *opline, znode *dim_n...
function zend_set_class_name_op1 (line 2841) | static inline void zend_set_class_name_op1(zend_op *opline, znode *class...
function zend_compile_class_ref (line 2853) | static void zend_compile_class_ref(znode *result, zend_ast *name_ast, ui...
function zend_result (line 2908) | static zend_result zend_try_compile_cv(znode *result, zend_ast *ast) /* ...
function zend_op (line 2939) | static zend_op *zend_compile_simple_var_no_cv(znode *result, zend_ast *a...
function is_this_fetch (line 2969) | static bool is_this_fetch(zend_ast *ast) /* {{{ */
function is_globals_fetch (line 2980) | static bool is_globals_fetch(const zend_ast *ast)
function is_global_var_fetch (line 2990) | static bool is_global_var_fetch(zend_ast *ast)
function this_guaranteed_exists (line 2995) | static bool this_guaranteed_exists(void) /* {{{ */
function zend_op (line 3015) | static zend_op *zend_compile_simple_var(znode *result, zend_ast *ast, ui...
function zend_separate_if_call_and_write (line 3039) | static void zend_separate_if_call_and_write(znode *node, zend_ast *ast, ...
function zend_emit_assign_znode (line 3057) | static inline void zend_emit_assign_znode(zend_ast *var_ast, znode *valu...
function zend_op (line 3067) | static zend_op *zend_delayed_compile_dim(znode *result, zend_ast *ast, u...
function zend_op (line 3130) | static zend_op *zend_compile_dim(znode *result, zend_ast *ast, uint32_t ...
function zend_op (line 3138) | static zend_op *zend_delayed_compile_prop(znode *result, zend_ast *ast, ...
function zend_op (line 3212) | static zend_op *zend_compile_prop(znode *result, zend_ast *ast, uint32_t...
function zend_op (line 3223) | static zend_op *zend_compile_static_prop(znode *result, zend_ast *ast, u...
function zend_verify_list_assign_target (line 3265) | static void zend_verify_list_assign_target(zend_ast *var_ast, zend_ast_a...
function zend_propagate_list_refs (line 3282) | static bool zend_propagate_list_refs(zend_ast *ast) { /* {{{ */
function list_is_keyed (line 3303) | static bool list_is_keyed(zend_ast_list *list)
function zend_compile_list_assign (line 3314) | static void zend_compile_list_assign(
function zend_ensure_writable_variable (line 3404) | static void zend_ensure_writable_variable(const zend_ast *ast) /* {{{ */
function zend_is_assign_to_self (line 3427) | static bool zend_is_assign_to_self(zend_ast *var_ast, zend_ast *expr_ast...
function zend_compile_expr_with_potential_assign_to_self (line 3452) | static void zend_compile_expr_with_potential_assign_to_self(
function zend_compile_assign (line 3468) | static void zend_compile_assign(znode *result, zend_ast *ast) /* {{{ */
function zend_compile_assign_ref (line 3565) | static void zend_compile_assign_ref(znode *result, zend_ast *ast) /* {{{ */
function zend_emit_assign_ref_znode (line 3627) | static inline void zend_emit_assign_ref_znode(zend_ast *var_ast, znode *...
function zend_compile_compound_assign (line 3637) | static void zend_compile_compound_assign(znode *result, zend_ast *ast) /...
function zend_get_arg_num (line 3709) | static uint32_t zend_get_arg_num(zend_function *fn, zend_string *arg_nam...
function zend_compile_args (line 3732) | static uint32_t zend_compile_args(
function ZEND_API (line 3935) | ZEND_API uint8_t zend_get_call_op(const zend_op *init_op, zend_function ...
function zend_compile_call_common (line 3966) | static bool zend_compile_call_common(znode *result, zend_ast *args_ast, ...
function zend_compile_function_name (line 4009) | static bool zend_compile_function_name(znode *name_node, zend_ast *name_...
function zend_compile_dynamic_call (line 4022) | static void zend_compile_dynamic_call(znode *result, znode *name_node, z...
function zend_args_contain_unpack_or_named (line 4056) | static inline bool zend_args_contain_unpack_or_named(zend_ast_list *args...
function zend_result (line 4069) | static zend_result zend_compile_func_strlen(znode *result, zend_ast_list...
function zend_result (line 4089) | static zend_result zend_compile_func_typecheck(znode *result, zend_ast_l...
function zend_result (line 4109) | static zend_result zend_compile_func_is_scalar(znode *result, zend_ast_l...
function zend_result (line 4124) | static zend_result zend_compile_func_cast(znode *result, zend_ast_list *...
function zend_result (line 4144) | static zend_result zend_compile_func_defined(znode *result, zend_ast_lis...
function zend_result (line 4176) | static zend_result zend_compile_func_chr(znode *result, zend_ast_list *a...
function zend_result (line 4194) | static zend_result zend_compile_func_ord(znode *result, zend_ast_list *a...
function fbc_is_finalized (line 4212) | static bool fbc_is_finalized(zend_function *fbc) {
function zend_compile_ignore_class (line 4216) | static bool zend_compile_ignore_class(zend_class_entry *ce, zend_string ...
function zend_compile_ignore_function (line 4226) | static bool zend_compile_ignore_function(zend_function *fbc, zend_string...
function zend_result (line 4237) | static zend_result zend_try_compile_ct_bound_init_user_func(zend_ast *na...
function zend_compile_init_user_func (line 4269) | static void zend_compile_init_user_func(zend_ast *name_ast, uint32_t num...
function zend_result (line 4288) | static zend_result zend_compile_func_cufa(znode *result, zend_ast_list *...
function zend_result (line 4341) | static zend_result zend_compile_func_cuf(znode *result, zend_ast_list *a...
function zend_compile_assert (line 4367) | static void zend_compile_assert(znode *result, zend_ast_list *args, zend...
function zend_result (line 4417) | static zend_result zend_compile_func_in_array(znode *result, zend_ast_li...
function zend_result (line 4502) | static zend_result zend_compile_func_count(znode *result, zend_ast_list ...
function zend_result (line 4519) | static zend_result zend_compile_func_get_class(znode *result, zend_ast_l...
function zend_result (line 4537) | static zend_result zend_compile_func_get_called_class(znode *result, zen...
function zend_result (line 4548) | static zend_result zend_compile_func_gettype(znode *result, zend_ast_lis...
function zend_result (line 4562) | static zend_result zend_compile_func_num_args(znode *result, zend_ast_li...
function zend_result (line 4573) | static zend_result zend_compile_func_get_args(znode *result, zend_ast_li...
function zend_result (line 4584) | static zend_result zend_compile_func_array_key_exists(znode *result, zen...
function zend_result (line 4600) | static zend_result zend_compile_func_array_slice(znode *result, zend_ast...
function find_frameless_function_offset (line 4633) | static uint32_t find_frameless_function_offset(uint32_t arity, void *han...
function zend_frameless_function_info (line 4647) | static const zend_frameless_function_info *find_frameless_function_info(...
function zend_compile_frameless_icall_ex (line 4688) | static uint32_t zend_compile_frameless_icall_ex(znode *result, zend_ast_...
function zend_compile_frameless_icall (line 4722) | static uint32_t zend_compile_frameless_icall(znode *result, zend_ast_lis...
function zend_compile_ns_call (line 4732) | static void zend_compile_ns_call(znode *result, znode *name_node, zend_a...
function zend_result (line 4794) | static zend_result zend_compile_func_sprintf(znode *result, zend_ast_lis...
function zend_result (line 4962) | static zend_result zend_try_compile_special_func_ex(znode *result, zend_...
function zend_result (line 5035) | static zend_result zend_try_compile_special_func(znode *result, zend_str...
function zend_string (line 5068) | static zend_string *zend_copy_unmangled_prop_name(zend_string *prop_name)
function zend_compile_parent_property_hook_call (line 5078) | static bool zend_compile_parent_property_hook_call(znode *result, zend_a...
function zend_compile_call (line 5143) | static void zend_compile_call(znode *result, zend_ast *ast, uint32_t typ...
function zend_compile_method_call (line 5222) | static void zend_compile_method_call(znode *result, zend_ast *ast, uint3...
function zend_is_constructor (line 5290) | static bool zend_is_constructor(zend_string *name) /* {{{ */
function zend_function (line 5296) | static zend_function *zend_get_compatible_func_or_null(zend_class_entry ...
function zend_compile_static_call (line 5314) | static void zend_compile_static_call(znode *result, zend_ast *ast, uint3...
function zend_compile_new (line 5392) | static void zend_compile_new(znode *result, zend_ast *ast) /* {{{ */
function zend_compile_clone (line 5423) | static void zend_compile_clone(znode *result, zend_ast *ast) /* {{{ */
function zend_compile_global_var (line 5434) | static void zend_compile_global_var(zend_ast *ast) /* {{{ */
function zend_compile_static_var_common (line 5471) | static void zend_compile_static_var_common(zend_string *var_name, zval *...
function zend_compile_static_var (line 5494) | static void zend_compile_static_var(zend_ast *ast) /* {{{ */
function zend_compile_unset (line 5548) | static void zend_compile_unset(zend_ast *ast) /* {{{ */
function zend_handle_loops_and_finally_ex (line 5600) | static bool zend_handle_loops_and_finally_ex(zend_long depth, znode *ret...
function zend_handle_loops_and_finally (line 5649) | static bool zend_handle_loops_and_finally(znode *return_value) /* {{{ */
function zend_has_finally_ex (line 5655) | static bool zend_has_finally_ex(zend_long depth) /* {{{ */
function zend_has_finally (line 5681) | static bool zend_has_finally(void) /* {{{ */
function zend_compile_return (line 5687) | static void zend_compile_return(zend_ast *ast) /* {{{ */
function zend_compile_echo (line 5755) | static void zend_compile_echo(zend_ast *ast) /* {{{ */
function zend_compile_throw (line 5768) | static void zend_compile_throw(znode *result, zend_ast *ast) /* {{{ */
function zend_compile_break_continue (line 5785) | static void zend_compile_break_continue(zend_ast *ast) /* {{{ */
function zend_resolve_goto_label (line 5862) | void zend_resolve_goto_label(zend_op_array *op_array, zend_op *opline) /...
function zend_compile_goto (line 5923) | static void zend_compile_goto(zend_ast *ast) /* {{{ */
function zend_compile_label (line 5940) | static void zend_compile_label(zend_ast *ast) /* {{{ */
function zend_compile_while (line 5959) | static void zend_compile_while(zend_ast *ast) /* {{{ */
function zend_compile_do_while (line 5983) | static void zend_compile_do_while(zend_ast *ast) /* {{{ */
function zend_compile_expr_list (line 6005) | static void zend_compile_expr_list(znode *result, zend_ast *ast) /* {{{ */
function zend_compile_for (line 6027) | static void zend_compile_for(zend_ast *ast) /* {{{ */
function zend_compile_foreach (line 6061) | static void zend_compile_foreach(zend_ast *ast) /* {{{ */
function zend_compile_if (line 6153) | static void zend_compile_if(zend_ast *ast) /* {{{ */
function determine_switch_jumptable_type (line 6205) | static uint8_t determine_switch_jumptable_type(zend_ast_list *cases) {
function should_use_jumptable (line 6246) | static bool should_use_jumptable(zend_ast_list *cases, uint8_t jumptable...
function zend_compile_switch (line 6261) | static void zend_compile_switch(zend_ast *ast) /* {{{ */
function count_match_conds (line 6395) | static uint32_t count_match_conds(zend_ast_list *arms)
function can_match_use_jumptable (line 6412) | static bool can_match_use_jumptable(zend_ast_list *arms) {
function zend_compile_match (line 6439) | static void zend_compile_match(znode *result, zend_ast *ast)
function zend_compile_try (line 6625) | static void zend_compile_try(zend_ast *ast) /* {{{ */
function zend_handle_encoding_declaration (line 6800) | bool zend_handle_encoding_declaration(zend_ast *ast) /* {{{ */
function zend_result (line 6852) | static zend_result zend_is_first_statement(zend_ast *ast, bool allow_nop...
function zend_compile_declare (line 6873) | static void zend_compile_declare(zend_ast *ast) /* {{{ */
function zend_compile_stmt_list (line 6937) | static void zend_compile_stmt_list(zend_ast *ast) /* {{{ */
function ZEND_API (line 6947) | ZEND_API void zend_set_function_arg_flags(zend_function *func) /* {{{ */
function zend_type (line 6972) | static zend_type zend_compile_single_typename(zend_ast *ast)
function zend_are_intersection_types_redundant (line 7040) | static void zend_are_intersection_types_redundant(zend_type left_type, z...
function zend_is_intersection_type_redundant_by_single_type (line 7090) | static void zend_is_intersection_type_redundant_by_single_type(zend_type...
function zend_is_type_list_redundant_by_single_type (line 7107) | static void zend_is_type_list_redundant_by_single_type(zend_type_list *t...
function zend_type (line 7124) | static zend_type zend_compile_typename_ex(
function zend_type (line 7350) | static zend_type zend_compile_typename(zend_ast *ast)
function zend_is_valid_default_value (line 7357) | static bool zend_is_valid_default_value(zend_type type, zval *value)
function zend_compile_attributes (line 7371) | static void zend_compile_attributes(
type find_property_usage_context (line 7491) | typedef struct {
function zend_property_hook_find_property_usage (line 7496) | static void zend_property_hook_find_property_usage(zend_ast **ast_ptr, v...
function zend_property_hook_uses_property (line 7529) | static bool zend_property_hook_uses_property(zend_string *property_name,...
function zend_property_is_virtual (line 7541) | static bool zend_property_is_virtual(zend_class_entry *ce, zend_string *...
function zend_compile_params (line 7564) | static void zend_compile_params(zend_ast *ast, zend_ast *return_type_ast...
function zend_compile_closure_binding (line 7866) | static void zend_compile_closure_binding(znode *closure, zend_op_array *...
type closure_info (line 7911) | typedef struct {
function find_implicit_binds_recursively (line 7916) | static void find_implicit_binds_recursively(closure_info *info, zend_ast...
function find_implicit_binds (line 7969) | static void find_implicit_binds(closure_info *info, zend_ast *params_ast...
function compile_implicit_lexical_binds (line 7985) | static void compile_implicit_lexical_binds(
function zend_compile_closure_uses (line 8012) | static void zend_compile_closure_uses(zend_ast *ast) /* {{{ */
function zend_compile_implicit_closure_uses (line 8046) | static void zend_compile_implicit_closure_uses(closure_info *info)
function add_stringable_interface (line 8056) | static void add_stringable_interface(zend_class_entry *ce) {
function zend_string (line 8074) | static zend_string *zend_begin_method_decl(zend_op_array *op_array, zend...
function zend_add_dynamic_func_def (line 8144) | static uint32_t zend_add_dynamic_func_def(zend_op_array *def) {
function zend_string (line 8153) | static zend_string *zend_begin_func_decl(znode *result, zend_op_array *o...
function zend_op_array (line 8240) | static zend_op_array *zend_compile_func_decl_ex(
function zend_op_array (line 8416) | static zend_op_array *zend_compile_func_decl(znode *result, zend_ast *as...
function zend_property_hook_kind (line 8421) | zend_property_hook_kind zend_get_property_hook_kind_from_name(zend_strin...
function zend_compile_property_hooks (line 8431) | static void zend_compile_property_hooks(
function zend_compile_prop_decl (line 8611) | static void zend_compile_prop_decl(zend_ast *ast, zend_ast *type_ast, ui...
function zend_compile_prop_group (line 8762) | static void zend_compile_prop_group(zend_ast *ast) /* {{{ */
function zend_check_trait_alias_modifiers (line 8772) | static void zend_check_trait_alias_modifiers(uint32_t attr) /* {{{ */
function zend_compile_class_const_decl (line 8782) | static void zend_compile_class_const_decl(zend_ast *ast, uint32_t flags,...
function zend_compile_class_const_group (line 8846) | static void zend_compile_class_const_group(zend_ast *ast) /* {{{ */
function zend_compile_method_ref (line 8856) | static void zend_compile_method_ref(zend_ast *ast, zend_trait_method_ref...
function zend_compile_trait_precedence (line 8871) | static void zend_compile_trait_precedence(zend_ast *ast) /* {{{ */
function zend_compile_trait_alias (line 8892) | static void zend_compile_trait_alias(zend_ast *ast) /* {{{ */
function zend_compile_use_trait (line 8916) | static void zend_compile_use_trait(zend_ast *ast) /* {{{ */
function zend_compile_implements (line 8959) | static void zend_compile_implements(zend_ast *ast) /* {{{ */
function zend_string (line 8980) | static zend_string *zend_generate_anon_class_name(zend_ast_decl *decl)
function zend_compile_enum_backing_type (line 9000) | static void zend_compile_enum_backing_type(zend_class_entry *ce, zend_as...
function zend_compile_class_decl (line 9020) | static void zend_compile_class_decl(znode *result, zend_ast *ast, bool t...
function zend_compile_enum_case (line 9239) | static void zend_compile_enum_case(zend_ast *ast)
function HashTable (line 9298) | static HashTable *zend_get_import_ht(uint32_t type) /* {{{ */
function zend_check_already_in_use (line 9342) | static void zend_check_already_in_use(uint32_t type, zend_string *old_na...
function zend_compile_use (line 9353) | static void zend_compile_use(zend_ast *ast) /* {{{ */
function zend_compile_group_use (line 9426) | static void zend_compile_group_use(zend_ast *ast) /* {{{ */
function zend_compile_const_decl (line 9446) | static void zend_compile_const_decl(zend_ast *ast) /* {{{ */
function zend_compile_namespace (line 9489) | static void zend_compile_namespace(zend_ast *ast) /* {{{ */
function zend_compile_halt_compiler (line 9552) | static void zend_compile_halt_compiler(zend_ast *ast) /* {{{ */
function zend_try_ct_eval_magic_const (line 9578) | static bool zend_try_ct_eval_magic_const(zval *zv, zend_ast *ast) /* {{{ */
function ZEND_API (line 9678) | ZEND_API bool zend_is_op_long_compatible(const zval *op)
function ZEND_API (line 9700) | ZEND_API bool zend_binary_op_produces_error(uint32_t opcode, const zval ...
function zend_try_ct_eval_binary_op (line 9765) | static inline bool zend_try_ct_eval_binary_op(zval *result, uint32_t opc...
function ZEND_API (line 9777) | ZEND_API bool zend_unary_op_produces_error(uint32_t opcode, const zval *op)
function zend_try_ct_eval_unary_op (line 9790) | static inline bool zend_try_ct_eval_unary_op(zval *result, uint32_t opco...
function zend_try_ct_eval_unary_pm (line 9802) | static inline bool zend_try_ct_eval_unary_pm(zval *result, zend_ast_kind...
function zend_ct_eval_greater (line 9810) | static inline void zend_ct_eval_greater(zval *result, zend_ast_kind kind...
function zend_try_ct_eval_array (line 9818) | static bool zend_try_ct_eval_array(zval *result, zend_ast *ast) /* {{{ */
function zend_compile_binary_op (line 9946) | static void zend_compile_binary_op(znode *result, zend_ast *ast) /* {{{ */
function zend_compile_greater (line 10039) | static void zend_compile_greater(znode *result, zend_ast *ast) /* {{{ */
function zend_compile_unary_op (line 10065) | static void zend_compile_unary_op(znode *result, zend_ast *ast) /* {{{ */
function zend_compile_unary_pm (line 10084) | static void zend_compile_unary_pm(znode *result, zend_ast *ast) /* {{{ */
function zend_compile_short_circuiting (line 10106) | static void zend_compile_short_circuiting(znode *result, zend_ast *ast) ...
function zend_compile_post_incdec (line 10161) | static void zend_compile_post_incdec(znode *result, zend_ast *ast) /* {{...
function zend_compile_pre_incdec (line 10188) | static void zend_compile_pre_incdec(znode *result, zend_ast *ast) /* {{{ */
function zend_compile_cast (line 10217) | static void zend_compile_cast(znode *result, zend_ast *ast) /* {{{ */
function zend_compile_shorthand_conditional (line 10236) | static void zend_compile_shorthand_conditional(znode *result, zend_ast *...
function zend_compile_conditional (line 10261) | static void zend_compile_conditional(znode *result, zend_ast *ast) /* {{...
function zend_compile_coalesce (line 10321) | static void zend_compile_coalesce(znode *result, zend_ast *ast) /* {{{ */
function znode_dtor (line 10345) | static void znode_dtor(zval *zv) {
function zend_compile_assign_coalesce (line 10353) | static void zend_compile_assign_coalesce(znode *result, zend_ast *ast) /...
function zend_compile_print (line 10456) | static void zend_compile_print(znode *result, zend_ast *ast) /* {{{ */
function zend_compile_yield (line 10472) | static void zend_compile_yield(znode *result, zend_ast *ast) /* {{{ */
function zend_compile_yield_from (line 10507) | static void zend_compile_yield_from(znode *result, zend_ast *ast) /* {{{ */
function zend_compile_instanceof (line 10524) | static void zend_compile_instanceof(znode *result, zend_ast *ast) /* {{{ */
function zend_compile_include_or_eval (line 10556) | static void zend_compile_include_or_eval(znode *result, zend_ast *ast) /...
function zend_compile_isset_or_empty (line 10572) | static void zend_compile_isset_or_empty(znode *result, zend_ast *ast) /*...
function zend_compile_silence (line 10652) | static void zend_compile_silence(znode *result, zend_ast *ast) /* {{{ */
function zend_compile_shell_exec (line 10671) | static void zend_compile_shell_exec(znode *result, zend_ast *ast) /* {{{ */
function zend_compile_array (line 10689) | static void zend_compile_array(znode *result, zend_ast *ast) /* {{{ */
function zend_compile_const (line 10768) | static void zend_compile_const(znode *result, zend_ast *ast) /* {{{ */
function zend_compile_class_const (line 10818) | static void zend_compile_class_const(znode *result, zend_ast *ast) /* {{...
function zend_compile_class_name (line 10859) | static void zend_compile_class_name(znode *result, zend_ast *ast) /* {{{ */
function zend_op (line 10886) | static zend_op *zend_compile_rope_add_ex(zend_op *opline, znode *result,...
function zend_op (line 10903) | static zend_op *zend_compile_rope_add(znode *result, uint32_t num, znode...
function zend_compile_rope_finalize (line 10922) | static void zend_compile_rope_finalize(znode *result, uint32_t rope_elem...
function zend_compile_encaps_list (line 10975) | static void zend_compile_encaps_list(znode *result, zend_ast *ast) /* {{...
function zend_compile_magic_const (line 11054) | static void zend_compile_magic_const(znode *result, zend_ast *ast) /* {{...
function zend_is_allowed_in_const_expr (line 11072) | static bool zend_is_allowed_in_const_expr(zend_ast_kind kind) /* {{{ */
function zend_compile_const_expr_class_const (line 11092) | static void zend_compile_const_expr_class_const(zend_ast **ast_ptr) /* {...
function zend_compile_const_expr_class_name (line 11130) | static void zend_compile_const_expr_class_name(zend_ast **ast_ptr) /* {{...
function zend_compile_const_expr_const (line 11158) | static void zend_compile_const_expr_const(zend_ast **ast_ptr) /* {{{ */
function zend_compile_const_expr_magic_const (line 11185) | static void zend_compile_const_expr_magic_const(zend_ast **ast_ptr) /* {...
function zend_compile_const_expr_new (line 11197) | static void zend_compile_const_expr_new(zend_ast **ast_ptr)
function zend_compile_const_expr_args (line 11222) | static void zend_compile_const_expr_args(zend_ast **ast_ptr)
type const_expr_context (line 11244) | typedef struct {
function zend_compile_const_expr (line 11249) | static void zend_compile_const_expr(zend_ast **ast_ptr, void *context) /...
function zend_const_expr_to_zval (line 11290) | void zend_const_expr_to_zval(zval *result, zend_ast **ast_ptr, bool allo...
function zend_compile_top_stmt (line 11309) | void zend_compile_top_stmt(zend_ast *ast) /* {{{ */
function zend_compile_stmt (line 11341) | static void zend_compile_stmt(zend_ast *ast) /* {{{ */
function zend_compile_expr_inner (line 11457) | static void zend_compile_expr_inner(znode *result, zend_ast *ast) /* {{{ */
function zend_compile_expr (line 11599) | static void zend_compile_expr(znode *result, zend_ast *ast)
function zend_op (line 11608) | static zend_op *zend_compile_var_inner(znode *result, zend_ast *ast, uin...
function zend_op (line 11661) | static zend_op *zend_compile_var(znode *result, zend_ast *ast, uint32_t ...
function zend_op (line 11671) | static zend_op *zend_delayed_compile_var(znode *result, zend_ast *ast, u...
function zend_eval_const_expr (line 11697) | static void zend_eval_const_expr(zend_ast **ast_ptr) /* {{{ */
FILE: Zend/zend_compile.h
type zend_op_array (line 54) | typedef struct _zend_op_array zend_op_array;
type zend_op (line 55) | typedef struct _zend_op zend_op;
type znode_op (line 68) | typedef union _znode_op {
type znode (line 83) | typedef struct _znode { /* used only during compilation */
type zend_ast_znode (line 92) | typedef struct _zend_ast_znode {
function zend_always_inline (line 101) | static zend_always_inline znode *zend_ast_get_znode(zend_ast *ast) {
type zend_declarables (line 105) | typedef struct _zend_declarables {
type zend_file_context (line 110) | typedef struct _zend_file_context {
type zend_parser_stack_elem (line 124) | typedef union _zend_parser_stack_elem {
type _zend_op (line 137) | struct _zend_op {
type zend_brk_cont_element (line 159) | typedef struct _zend_brk_cont_element {
type zend_label (line 167) | typedef struct _zend_label {
type zend_try_catch_element (line 172) | typedef struct _zend_try_catch_element {
type zend_live_range (line 186) | typedef struct _zend_live_range {
type zend_property_info (line 192) | typedef struct _zend_property_info zend_property_info;
type zend_oparray_context (line 195) | typedef struct _zend_oparray_context {
function zend_always_inline (line 404) | static zend_always_inline uint32_t zend_visibility_to_set_visibility(uin...
type zend_property_info (line 446) | typedef struct _zend_property_info {
type zend_class_constant (line 470) | typedef struct _zend_class_constant {
type zend_internal_arg_info (line 481) | typedef struct _zend_internal_arg_info {
type zend_arg_info (line 488) | typedef struct _zend_arg_info {
type zend_internal_function_info (line 499) | typedef struct _zend_internal_function_info {
type _zend_op_array (line 505) | struct _zend_op_array {
type zend_internal_function (line 564) | typedef struct _zend_internal_function {
type _zend_execute_data (line 615) | struct _zend_execute_data {
type zend_compile_position (line 847) | typedef enum _zend_compile_position {
type zend_modifier_target (line 893) | typedef enum {
type _zend_arena (line 927) | struct _zend_arena
type _zend_arena (line 933) | struct _zend_arena
function zend_always_inline (line 968) | static zend_always_inline const char *zend_get_unmangled_property_name(c...
type zend_auto_global (line 990) | typedef struct _zend_auto_global {
function zend_always_inline (line 1132) |
Copy disabled (too large)
Download .json
Condensed preview — 22009 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (102,125K chars).
[
{
"path": ".clang-format",
"chars": 3188,
"preview": "---\nLanguage: Cpp\n# BasedOnStyle: Google\nAccessModifierOffset: -2\nAlignAfterOpenBracket: Align\nAlignConsecutiveA"
},
{
"path": ".dockerignore",
"chars": 15,
"preview": "thirdparty\nvar\n"
},
{
"path": ".editorconfig",
"chars": 734,
"preview": "# https://editorconfig.org/\n\nroot = true\n\n[*]\ntrim_trailing_whitespace = true\ninsert_final_newline = true\nend_of_lin"
},
{
"path": ".gdbinit",
"chars": 13431,
"preview": "define set_ts\n\tset $tsrm_ls = $arg0\nend\n\ndocument set_ts\n\tset the ts resource, it is impossible for gdb to\n\tcall ts_reso"
},
{
"path": ".gitattributes",
"chars": 757,
"preview": "# Replace $Id$ strings with 40-character hexadecimal blob object name.\n/ext/ext_skel.php ident\n/ext/phar/p"
},
{
"path": ".github/workflows/artifact-hash.yml",
"chars": 1329,
"preview": "name: artifact-hash\n\non:\n workflow_dispatch:\n inputs:\n version:\n required: true\n description: \"发版"
},
{
"path": ".github/workflows/auto-cache-pool-tarball.yml",
"chars": 3980,
"preview": "name: auto-cache-pool-tarball\n\non:\n push:\n pull_request:\n schedule:\n - cron: '0 0 */6 * *'\n workflow_dispatch:\n\nj"
},
{
"path": ".github/workflows/build-alpine-builder-container.sh",
"chars": 1375,
"preview": "#!/usr/bin/env bash\n\nset -exu\n__DIR__=$(\n cd \"$(dirname \"$0\")\"\n pwd\n)\n__PROJECT__=$(\n cd ${__DIR__}/../../\n pwd\n)\ncd"
},
{
"path": ".github/workflows/linux-aarch64.yml",
"chars": 6489,
"preview": "name: build-swoole-cli-linux-aarch64\n\non: [ push, pull_request ]\n\njobs:\n linux-aarch64:\n if: ${{ !contains(github.ev"
},
{
"path": ".github/workflows/linux-glibc.yml",
"chars": 5768,
"preview": "name: build-swoole-cli-linux-glibc\n\non: [ push, pull_request ]\n\njobs:\n linux-glibc:\n if: ${{ !contains(github.event."
},
{
"path": ".github/workflows/linux-x86_64.yml",
"chars": 6616,
"preview": "name: build-swoole-cli-linux-x86_64\n\non: [ push, pull_request ]\n\njobs:\n linux-x86_64:\n if: ${{ !contains(github.even"
},
{
"path": ".github/workflows/macos-aarch64.yml",
"chars": 5771,
"preview": "name: build-swoole-cli-macos-aarch64\n\non: [ push, pull_request ]\n\njobs:\n macos-aarch64:\n if: ${{ !contains(github.ev"
},
{
"path": ".github/workflows/macos-x86_64.yml",
"chars": 5763,
"preview": "name: build-swoole-cli-macos-x86_64\n\non: [ push, pull_request ]\n\njobs:\n macos-x86_64:\n if: ${{ !contains(github.even"
},
{
"path": ".github/workflows/runner-images.md",
"chars": 325,
"preview": "[runner-images](https://github.com/actions/runner-images/tree/main/images)\n\n[available-images](https://github.com/action"
},
{
"path": ".github/workflows/windows-cygwin.yml",
"chars": 6912,
"preview": "name: build-swoole-cli-windows-cygwin\n\non: [ push, pull_request ]\n\njobs:\n windows-cygwin:\n if: ${{ !contains(github."
},
{
"path": ".github/workflows/windows-msys2.yml",
"chars": 4074,
"preview": "name: build-swoole-cli-windows-msys2\n\non:\n push:\n pull_request:\n\njobs:\n windows-msys2:\n if: 1\n runs-on: windows"
},
{
"path": ".gitignore",
"chars": 9177,
"preview": "# These files are generated during building or development and are intentionally\n# untracked to ignore by Git. For other"
},
{
"path": ".gitmodules",
"chars": 0,
"preview": ""
},
{
"path": "README.md",
"chars": 6099,
"preview": "# swoole-cli\n\n`Swoole-Cli` 是一个 `PHP`的二进制发行版,<br/>\n集成了 `swoole`、`php 内核`、`php-cli`、`php-fpm`以及多个常用扩展。<br/>\n`Swoole-Cli`是全"
},
{
"path": "TSRM/LICENSE",
"chars": 1314,
"preview": "Copyright (c) 1999-2006, Andi Gutmans, Sascha Schumann, Zeev Suraski.\nAll rights reserved.\n\nRedistribution and use in so"
},
{
"path": "TSRM/TSRM.c",
"chars": 24694,
"preview": "/*\n +----------------------------------------------------------------------+\n | Thread Safe Resource Manager "
},
{
"path": "TSRM/TSRM.h",
"chars": 6832,
"preview": "/*\n +----------------------------------------------------------------------+\n | Thread Safe Resource Manager "
},
{
"path": "TSRM/config.w32",
"chars": 134,
"preview": "// vim:ft=javascript\n\nADD_SOURCES(\"TSRM\", \"TSRM.c tsrm_win32.c\");\nADD_FLAG(\"CFLAGS_BD_TSRM\", \"/D ZEND_ENABLE_STATIC_TSRM"
},
{
"path": "TSRM/threads.m4",
"chars": 3830,
"preview": "dnl Copyright (c) 1999, 2000 Sascha Schumann. All rights reserved.\ndnl\ndnl Redistribution and use in source and binary"
},
{
"path": "TSRM/tsrm.m4",
"chars": 346,
"preview": "dnl This file contains TSRM specific autoconf macros.\n\ndnl\ndnl TSRM_CHECK_PTHREADS\ndnl\nAC_DEFUN([TSRM_CHECK_PTHREADS],[\n"
},
{
"path": "TSRM/tsrm_win32.c",
"chars": 21971,
"preview": "/*\n +----------------------------------------------------------------------+\n | Copyright (c) The PHP Group "
},
{
"path": "TSRM/tsrm_win32.h",
"chars": 3084,
"preview": "/*\n +----------------------------------------------------------------------+\n | Copyright (c) The PHP Group "
},
{
"path": "Zend/LICENSE",
"chars": 2803,
"preview": "--------------------------------------------------------------------\n The Zend Engine License, Version 2."
},
{
"path": "Zend/Makefile.frag",
"chars": 2279,
"preview": "#\n# Zend\n#\n\n$(builddir)/zend_language_scanner.lo: $(srcdir)/zend_language_parser.h\n$(builddir)/zend_ini_scanner.lo: $(sr"
},
{
"path": "Zend/Optimizer/block_pass.c",
"chars": 56357,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend OPcache "
},
{
"path": "Zend/Optimizer/compact_literals.c",
"chars": 26259,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend OPcache "
},
{
"path": "Zend/Optimizer/compact_vars.c",
"chars": 4495,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend Engine, Removing unused variabl"
},
{
"path": "Zend/Optimizer/dce.c",
"chars": 22933,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend Engine, DCE - Dead Code Elimina"
},
{
"path": "Zend/Optimizer/dfa_pass.c",
"chars": 57576,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend OPcache "
},
{
"path": "Zend/Optimizer/escape_analysis.c",
"chars": 14749,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend OPcache, Escape Analysis "
},
{
"path": "Zend/Optimizer/nop_removal.c",
"chars": 3446,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend OPcache "
},
{
"path": "Zend/Optimizer/optimize_func_calls.c",
"chars": 12416,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend OPcache "
},
{
"path": "Zend/Optimizer/optimize_temp_vars_5.c",
"chars": 6064,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend OPcache "
},
{
"path": "Zend/Optimizer/pass1.c",
"chars": 12002,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend OPcache "
},
{
"path": "Zend/Optimizer/pass3.c",
"chars": 8371,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend OPcache "
},
{
"path": "Zend/Optimizer/sccp.c",
"chars": 71885,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend Engine, SCCP - Sparse Condition"
},
{
"path": "Zend/Optimizer/scdf.c",
"chars": 10937,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend Engine, Sparse Conditional Data"
},
{
"path": "Zend/Optimizer/scdf.h",
"chars": 3584,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend Engine, Call Graph "
},
{
"path": "Zend/Optimizer/ssa_integrity.c",
"chars": 14709,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend Engine, SSA validation "
},
{
"path": "Zend/Optimizer/zend_call_graph.c",
"chars": 9408,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend Engine, Call Graph "
},
{
"path": "Zend/Optimizer/zend_call_graph.h",
"chars": 3331,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend Engine, Call Graph "
},
{
"path": "Zend/Optimizer/zend_cfg.c",
"chars": 26386,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend Engine, CFG - Control Flow Grap"
},
{
"path": "Zend/Optimizer/zend_cfg.h",
"chars": 5646,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend Engine, CFG - Control Flow Grap"
},
{
"path": "Zend/Optimizer/zend_dfg.c",
"chars": 10182,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend Engine, DFG - Data Flow Graph "
},
{
"path": "Zend/Optimizer/zend_dfg.h",
"chars": 2047,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend Engine, DFG - Data Flow Graph "
},
{
"path": "Zend/Optimizer/zend_dump.c",
"chars": 36909,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend Engine, Bytecode Visualisation "
},
{
"path": "Zend/Optimizer/zend_dump.h",
"chars": 2788,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend Engine, Bytecode Visualisation "
},
{
"path": "Zend/Optimizer/zend_func_info.c",
"chars": 8139,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend Engine, Func Info "
},
{
"path": "Zend/Optimizer/zend_func_info.h",
"chars": 3117,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend Engine, Func Info "
},
{
"path": "Zend/Optimizer/zend_func_infos.h",
"chars": 41694,
"preview": "/* This is a generated file, edit the .stub.php files instead. */\n\nstatic const func_info_t func_infos[] = {\n\tF1(\"zend_v"
},
{
"path": "Zend/Optimizer/zend_inference.c",
"chars": 165612,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend Engine, e-SSA based Type & Rang"
},
{
"path": "Zend/Optimizer/zend_inference.h",
"chars": 10527,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend Engine, e-SSA based Type & Rang"
},
{
"path": "Zend/Optimizer/zend_optimizer.c",
"chars": 59036,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend OPcache "
},
{
"path": "Zend/Optimizer/zend_optimizer.h",
"chars": 4957,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend OPcache "
},
{
"path": "Zend/Optimizer/zend_optimizer_internal.h",
"chars": 7237,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend OPcache "
},
{
"path": "Zend/Optimizer/zend_ssa.c",
"chars": 57063,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend Engine, SSA - Static Single Ass"
},
{
"path": "Zend/Optimizer/zend_ssa.h",
"chars": 12020,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend Engine, SSA - Static Single Ass"
},
{
"path": "Zend/Optimizer/zend_worklist.h",
"chars": 3911,
"preview": "/*\n +----------------------------------------------------------------------+\n | Zend Engine "
},
{
"path": "Zend/README.md",
"chars": 4587,
"preview": "# Zend Engine\n\n## Zend memory manager\n\n### General\n\nThe goal of the new memory manager (available since PHP 5.2) is to r"
},
{
"path": "Zend/Zend.m4",
"chars": 14034,
"preview": "dnl This file contains Zend specific autoconf macros.\n\ndnl\ndnl ZEND_CHECK_FLOAT_PRECISION\ndnl\ndnl x87 floating point int"
},
{
"path": "Zend/asm/LICENSE",
"chars": 1338,
"preview": "Boost Software License - Version 1.0 - August 17th, 2003\n\nPermission is hereby granted, free of charge, to any person or"
},
{
"path": "Zend/asm/jump_arm64_aapcs_elf_gas.S",
"chars": 4275,
"preview": "/*\n Copyright Edward Nevill + Oliver Kowalke 2015\n Distributed under the Boost Software License, Version 1.0.\n "
},
{
"path": "Zend/asm/jump_arm64_aapcs_macho_gas.S",
"chars": 4090,
"preview": "/*\n Copyright Edward Nevill + Oliver Kowalke 2015\n Distributed under the Boost Software License, Version 1.0.\n"
},
{
"path": "Zend/asm/jump_arm64_aapcs_pe_armasm.asm",
"chars": 5227,
"preview": "; Copyright Edward Nevill + Oliver Kowalke 2015\n; Distributed under the Boost Software License, Version 1.0.\n; "
},
{
"path": "Zend/asm/jump_arm_aapcs_elf_gas.S",
"chars": 3078,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/jump_arm_aapcs_macho_gas.S",
"chars": 3191,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/jump_combined_sysv_macho_gas.S",
"chars": 693,
"preview": "/*\n Copyright Sergue E. Leontiev 2013.\n Distributed under the Boost Software License, Version 1.0.\n (S"
},
{
"path": "Zend/asm/jump_i386_ms_pe_masm.asm",
"chars": 3600,
"preview": "\n; Copyright Oliver Kowalke 2009.\n; Distributed under the Boost Software License, Version 1.0.\n; (See acc"
},
{
"path": "Zend/asm/jump_i386_sysv_elf_gas.S",
"chars": 3859,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/jump_i386_sysv_macho_gas.S",
"chars": 3181,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/jump_loongarch64_sysv_elf_gas.S",
"chars": 3976,
"preview": "/*******************************************************\n * *\n * --"
},
{
"path": "Zend/asm/jump_mips32_o32_elf_gas.S",
"chars": 4211,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/jump_mips64_n64_elf_gas.S",
"chars": 4534,
"preview": "/*\n Copyright Jiaxun Yang 2018.\n Distributed under the Boost Software License, Version 1.0.\n (See acco"
},
{
"path": "Zend/asm/jump_ppc32_sysv_elf_gas.S",
"chars": 6297,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/jump_ppc32_sysv_macho_gas.S",
"chars": 7558,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/jump_ppc32_sysv_xcoff_gas.S",
"chars": 6059,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/jump_ppc64_sysv_elf_gas.S",
"chars": 7302,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/jump_ppc64_sysv_macho_gas.S",
"chars": 5865,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/jump_ppc64_sysv_xcoff_gas.S",
"chars": 6030,
"preview": "\n/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See "
},
{
"path": "Zend/asm/jump_riscv64_sysv_elf_gas.S",
"chars": 5103,
"preview": "/*\n Distributed under the Boost Software License, Version 1.0.\n (See accompanying file LICENSE_1_0.txt or copy at"
},
{
"path": "Zend/asm/jump_s390x_sysv_elf_gas.S",
"chars": 5249,
"preview": "/*******************************************************\n * ------------------------------------------------- *\n * | "
},
{
"path": "Zend/asm/jump_sparc64_sysv_elf_gas.S",
"chars": 1273,
"preview": "/*\n Copyright Claudio Jeker 2024\n Distributed under the Boost Software License, Version 1.0.\n (See accompan"
},
{
"path": "Zend/asm/jump_x86_64_ms_pe_gas.S",
"chars": 10561,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Copyright Thomas Sailer 2013.\n Distributed under the Boost S"
},
{
"path": "Zend/asm/jump_x86_64_ms_pe_masm.asm",
"chars": 9859,
"preview": "\n; Copyright Oliver Kowalke 2009.\n; Distributed under the Boost Software License, Version 1.0.\n; (See acc"
},
{
"path": "Zend/asm/jump_x86_64_sysv_elf_gas.S",
"chars": 5917,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/jump_x86_64_sysv_macho_gas.S",
"chars": 3306,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/make_arm64_aapcs_elf_gas.S",
"chars": 3716,
"preview": "/*\n Copyright Edward Nevill + Oliver Kowalke 2015\n Distributed under the Boost Software License, Version 1."
},
{
"path": "Zend/asm/make_arm64_aapcs_macho_gas.S",
"chars": 3532,
"preview": "/*\n Copyright Edward Nevill + Oliver Kowalke 2015\n Distributed under the Boost Software License, Version 1."
},
{
"path": "Zend/asm/make_arm64_aapcs_pe_armasm.asm",
"chars": 4461,
"preview": "; Copyright Edward Nevill + Oliver Kowalke 2015\n; Distributed under the Boost Software License, Version 1.0.\n; "
},
{
"path": "Zend/asm/make_arm_aapcs_elf_gas.S",
"chars": 3040,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/make_arm_aapcs_macho_gas.S",
"chars": 2783,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/make_combined_sysv_macho_gas.S",
"chars": 693,
"preview": "/*\n Copyright Sergue E. Leontiev 2013.\n Distributed under the Boost Software License, Version 1.0.\n (S"
},
{
"path": "Zend/asm/make_i386_ms_pe_masm.asm",
"chars": 4874,
"preview": "\n; Copyright Oliver Kowalke 2009.\n; Distributed under the Boost Software License, Version 1.0.\n; (See acc"
},
{
"path": "Zend/asm/make_i386_sysv_elf_gas.S",
"chars": 4346,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/make_i386_sysv_macho_gas.S",
"chars": 3613,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/make_loongarch64_sysv_elf_gas.S",
"chars": 3038,
"preview": "/*******************************************************\n * *\n * --"
},
{
"path": "Zend/asm/make_mips32_o32_elf_gas.S",
"chars": 3661,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/make_mips64_n64_elf_gas.S",
"chars": 3714,
"preview": "/*\n Copyright Jiaxun Yang 2018.\n Distributed under the Boost Software License, Version 1.0.\n (See acco"
},
{
"path": "Zend/asm/make_ppc32_sysv_elf_gas.S",
"chars": 5227,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/make_ppc32_sysv_macho_gas.S",
"chars": 5827,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/make_ppc32_sysv_xcoff_gas.S",
"chars": 4655,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/make_ppc64_sysv_elf_gas.S",
"chars": 6155,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/make_ppc64_sysv_macho_gas.S",
"chars": 5008,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/make_ppc64_sysv_xcoff_gas.S",
"chars": 5289,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/make_riscv64_sysv_elf_gas.S",
"chars": 4051,
"preview": "/*\n Distributed under the Boost Software License, Version 1.0.\n (See accompanying file LICENSE_1_0.txt or copy at"
},
{
"path": "Zend/asm/make_s390x_sysv_elf_gas.S",
"chars": 4087,
"preview": "/*******************************************************\n * ------------------------------------------------- *\n * | "
},
{
"path": "Zend/asm/make_sparc64_sysv_elf_gas.S",
"chars": 1829,
"preview": "/*\n Copyright Claudio Jeker 2024\n Distributed under the Boost Software License, Version 1.0.\n (See accompan"
},
{
"path": "Zend/asm/make_x86_64_ms_pe_gas.S",
"chars": 9696,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Copyright Thomas Sailer 2013.\n Distributed under the Boost S"
},
{
"path": "Zend/asm/make_x86_64_ms_pe_masm.asm",
"chars": 9133,
"preview": "\n; Copyright Oliver Kowalke 2009.\n; Distributed under the Boost Software License, Version 1.0.\n; (See acc"
},
{
"path": "Zend/asm/make_x86_64_sysv_elf_gas.S",
"chars": 6801,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/make_x86_64_sysv_macho_gas.S",
"chars": 3231,
"preview": "/*\n Copyright Oliver Kowalke 2009.\n Distributed under the Boost Software License, Version 1.0.\n (See a"
},
{
"path": "Zend/asm/save_xmm_x86_64_ms_masm.asm",
"chars": 1425,
"preview": ".code\n\n; ZEND_API void execute_ex(zend_execute_data *ex)\nPUBLIC execute_ex\n\nEXTERN execute_ex_real:PROC\n\n; Assembly wrap"
},
{
"path": "Zend/bench.php",
"chars": 7634,
"preview": "<?php\nif (function_exists(\"date_default_timezone_set\")) {\n date_default_timezone_set(\"UTC\");\n}\n\nfunction simple() {\n "
},
{
"path": "Zend/micro_bench.php",
"chars": 7226,
"preview": "<?php\n\nfunction hallo() {\n}\n\nfunction simpleucall($n) {\n for ($i = 0; $i < $n; $i++)\n hallo();\n}\n\nfunction simpleudc"
},
{
"path": "Zend/tests/001.phpt",
"chars": 1052,
"preview": "--TEST--\nfunc_num_args() tests\n--FILE--\n<?php\n\nfunction test1() {\n var_dump(func_num_args());\n}\n\nfunction test2($a) {"
},
{
"path": "Zend/tests/002.phpt",
"chars": 3560,
"preview": "--TEST--\nfunc_get_arg() tests\n--FILE--\n<?php\n\nfunction test1() {\n try {\n var_dump(func_get_arg(-10));\n } ca"
},
{
"path": "Zend/tests/003.phpt",
"chars": 1224,
"preview": "--TEST--\nfunc_get_args() tests\n--FILE--\n<?php\n\nfunction test1() {\n var_dump(func_get_args());\n}\n\nfunction test2($a) {"
},
{
"path": "Zend/tests/004.phpt",
"chars": 433,
"preview": "--TEST--\nstrncmp() tests\n--FILE--\n<?php\n\nvar_dump(strncmp(\"\", \"\", 100));\ntry {\n var_dump(strncmp(\"aef\", \"dfsgbdf\", -1"
},
{
"path": "Zend/tests/005.phpt",
"chars": 393,
"preview": "--TEST--\nstrcasecmp() tests\n--FILE--\n<?php\n\nvar_dump(strcasecmp(\"\", \"\"));\nvar_dump(strcasecmp(\"aef\", \"dfsgbdf\"));\nvar_du"
},
{
"path": "Zend/tests/006.phpt",
"chars": 598,
"preview": "--TEST--\nstrncasecmp() tests\n--FILE--\n<?php\n\ntry {\n var_dump(strncasecmp(\"\", \"\", -1));\n} catch (\\ValueError $e) {\n "
},
{
"path": "Zend/tests/008.phpt",
"chars": 884,
"preview": "--TEST--\ndefine() tests\n--FILE--\n<?php\n\ntry {\n var_dump(define(array(1,2,3,4,5), 1));\n} catch (TypeError $e) {\n ec"
},
{
"path": "Zend/tests/009.phpt",
"chars": 1264,
"preview": "--TEST--\nget_class() tests\n--FILE--\n<?php\n\nclass foo {\n function bar () {\n var_dump(get_class());\n }\n fu"
},
{
"path": "Zend/tests/010.phpt",
"chars": 2266,
"preview": "--TEST--\nget_parent_class() tests\n--FILE--\n<?php\n\ninterface i {\n function test();\n}\n\nclass foo implements i {\n fun"
},
{
"path": "Zend/tests/011.phpt",
"chars": 2367,
"preview": "--TEST--\nproperty_exists() tests\n--FILE--\n<?php\n\nclass foo {\n public $pp1 = 1;\n private $pp2 = 2;\n protected $p"
},
{
"path": "Zend/tests/012.phpt",
"chars": 425,
"preview": "--TEST--\nclass_exists() tests\n--FILE--\n<?php\n\nclass foo {\n}\n\nvar_dump(class_exists(\"qwerty\"));\nvar_dump(class_exists(\"\")"
},
{
"path": "Zend/tests/013.phpt",
"chars": 463,
"preview": "--TEST--\ninterface_exists() tests\n--FILE--\n<?php\n\ninterface foo {\n}\n\nvar_dump(interface_exists(\"qwerty\"));\nvar_dump(inte"
},
{
"path": "Zend/tests/014.inc",
"chars": 39,
"preview": "<?php\n/* dummy file for 014.phpt */\n?>\n"
},
{
"path": "Zend/tests/014.phpt",
"chars": 545,
"preview": "--TEST--\nget_included_files() tests\n--FILE--\n<?php\n\nvar_dump(get_included_files());\n\ninclude(__DIR__.\"/014.inc\");\nvar_du"
},
{
"path": "Zend/tests/015.phpt",
"chars": 814,
"preview": "--TEST--\ntrigger_error() tests\n--FILE--\n<?php\n\nvar_dump(trigger_error(\"error\"));\n\ntry {\n var_dump(trigger_error(\"erro"
},
{
"path": "Zend/tests/016.phpt",
"chars": 156,
"preview": "--TEST--\nisset() with object properties when operating on non-object\n--FILE--\n<?php\n\n$foo = NULL;\nisset($foo->bar->bar);"
},
{
"path": "Zend/tests/017.phpt",
"chars": 1230,
"preview": "--TEST--\nbuiltin functions tests\n--FILE--\n<?php\n\n$fp = fopen(__FILE__, \"r\");\nvar_dump(get_resource_type($fp));\nfclose($f"
},
{
"path": "Zend/tests/018.phpt",
"chars": 340,
"preview": "--TEST--\nconstant() tests\n--FILE--\n<?php\n\ntry {\n var_dump(constant(\"\"));\n} catch (Error $e) {\n echo $e->getMessage"
},
{
"path": "Zend/tests/019.phpt",
"chars": 26744,
"preview": "--TEST--\nTest unset(), empty() and isset() functions\n--FILE--\n<?php\necho \"*** Testing unset(), empty() & isset() with sc"
},
{
"path": "Zend/tests/020.phpt",
"chars": 530,
"preview": "--TEST--\nfunc_get_arg() invalid usage\n--FILE--\n<?php\n\ntry {\n var_dump(func_get_arg(1));\n} catch (\\Error $e) {\n ech"
},
{
"path": "Zend/tests/021.phpt",
"chars": 413,
"preview": "--TEST--\n?: operator\n--FILE--\n<?php\nvar_dump(true ?: false);\nvar_dump(false ?: true);\nvar_dump(23 ?: 42);\nvar_dump(0 ?: "
},
{
"path": "Zend/tests/022.phpt",
"chars": 343,
"preview": "--TEST--\nImplementing abstracting methods and optional parameters\n--FILE--\n<?php\n\nabstract class Base\n{\n abstract fun"
},
{
"path": "Zend/tests/023.phpt",
"chars": 523,
"preview": "--TEST--\nTesting variable variables as function name\n--FILE--\n<?php\n\n$a = 'ucfirst';\n$b = 'a';\nprint $$b('test');\nprint "
},
{
"path": "Zend/tests/024.phpt",
"chars": 1189,
"preview": "--TEST--\nTesting operations with undefined variable\n--FILE--\n<?php\n\nvar_dump($a[1]);\nvar_dump($a[$c]);\nvar_dump($a + 1);"
},
{
"path": "Zend/tests/025.phpt",
"chars": 270,
"preview": "--TEST--\nTesting dynamic calls\n--FILE--\n<?php\n\nclass foo {\n static public function a() {\n print \"ok\\n\";\n }\n"
},
{
"path": "Zend/tests/026.phpt",
"chars": 420,
"preview": "--TEST--\nTrying assign value to property when an object is not returned in a function\n--FILE--\n<?php\n\nclass foo {\n pu"
},
{
"path": "Zend/tests/027.phpt",
"chars": 310,
"preview": "--TEST--\nTesting dynamic calls using variable variables with curly syntax\n--FILE--\n<?php\n\n$a = 'b';\n$b = 'c';\n$c = 'strt"
},
{
"path": "Zend/tests/028.phpt",
"chars": 489,
"preview": "--TEST--\nTesting function call through of array item\n--FILE--\n<?php\n\n$arr = array('strtoupper', 'strtolower');\n\n$k = 0;\n"
},
{
"path": "Zend/tests/029.phpt",
"chars": 688,
"preview": "--TEST--\nTesting assign to property of an object in an array\n--FILE--\n<?php\n\n$arr = array(new stdClass);\n\n$arr[0]->a = c"
},
{
"path": "Zend/tests/030.phpt",
"chars": 627,
"preview": "--TEST--\nOverriding $this in catch and checking the object properties later.\n--FILE--\n<?php\n\nclass foo {\n public $tes"
},
{
"path": "Zend/tests/031.phpt",
"chars": 187,
"preview": "--TEST--\nTesting array with '[]' passed as argument by value\n--FILE--\n<?php\n\nfunction test($var) { }\ntest($arr[]);\n\n?>\n-"
},
{
"path": "Zend/tests/032.phpt",
"chars": 155,
"preview": "--TEST--\nTesting array with '[]' passed as argument by reference\n--FILE--\n<?php\n\nfunction test(&$var) { }\ntest($arr[]);\n"
},
{
"path": "Zend/tests/033.phpt",
"chars": 1628,
"preview": "--TEST--\nUsing undefined multidimensional array\n--FILE--\n<?php\n\n$arr[1][2][3][4][5];\n\necho $arr[1][2][3][4][5];\n\n$arr[1]"
},
{
"path": "Zend/tests/034.phpt",
"chars": 410,
"preview": "--TEST--\nTesting multiples 'default:' in switch\n--FILE--\n<?php\n\nswitch (1) {\n case 2:\n print 'foo';\n br"
},
{
"path": "Zend/tests/035.phpt",
"chars": 212,
"preview": "--TEST--\nUsing 'static' and 'global' in global scope\n--FILE--\n<?php\n\nstatic $var = -1;\nvar_dump($var);\n\nglobal $var, $va"
},
{
"path": "Zend/tests/036.phpt",
"chars": 214,
"preview": "--TEST--\nTrying to use lambda in array offset\n--FILE--\n<?php\n\ntry {\n $test[function(){}] = 1;\n} catch (Error $e) {\n "
},
{
"path": "Zend/tests/037.phpt",
"chars": 355,
"preview": "--TEST--\nTrying to access inexistent static property of Closure\n--FILE--\n<?php\n\nnamespace closure;\n\nclass closure { stat"
},
{
"path": "Zend/tests/038.phpt",
"chars": 224,
"preview": "--TEST--\nTrying to use lambda as array key\n--FILE--\n<?php\n\ntry {\n var_dump(array(function() { } => 1));\n} catch (Erro"
},
{
"path": "Zend/tests/67468.phpt",
"chars": 161,
"preview": "--TEST--\nBug #67468 (Segfault in highlight_file()/highlight_string())\n--FILE--\n<?php\nhighlight_string(\"<?php __CLASS__;\""
},
{
"path": "Zend/tests/ArrayAccess_indirect_append.phpt",
"chars": 760,
"preview": "--TEST--\nUsing indirect append on ArrayAccess object\n--FILE--\n<?php\n\nclass AA implements ArrayAccess {\n private $data"
},
{
"path": "Zend/tests/ErrorException_construct.phpt",
"chars": 1447,
"preview": "--TEST--\nTest default value handling of ErrorException::__construct()\n--FILE--\n<?php\n\n$e = new ErrorException();\nvar_dum"
},
{
"path": "Zend/tests/ErrorException_getSeverity.phpt",
"chars": 39921,
"preview": "--TEST--\nfinal public int ErrorException::getSeverity ( void );\n--CREDITS--\nmarcosptf - <marcosptf@yahoo.com.br> - #phpa"
},
{
"path": "Zend/tests/abstract-static.phpt",
"chars": 169,
"preview": "--TEST--\nTest for abstract static classes\n--FILE--\n<?php\nabstract class TestClass\n{\n abstract static public function "
},
{
"path": "Zend/tests/abstract_inheritance_001.phpt",
"chars": 207,
"preview": "--TEST--\nAllow abstract function override\n--FILE--\n<?php\n\nabstract class A { abstract function bar($x); }\nabst"
},
{
"path": "Zend/tests/abstract_inheritance_002.phpt",
"chars": 215,
"preview": "--TEST--\nAllow abstract function override\n--FILE--\n<?php\n\nabstract class A { abstract function bar($x); }\nabst"
},
{
"path": "Zend/tests/abstract_inheritance_003.phpt",
"chars": 299,
"preview": "--TEST--\nAllow abstract function override\n--FILE--\n<?php\n\nabstract class A { abstract function bar($x, $y = 0)"
},
{
"path": "Zend/tests/access_modifiers_001.phpt",
"chars": 264,
"preview": "--TEST--\nusing multiple access modifiers (methods)\n--FILE--\n<?php\n\nclass test {\n static public public static final pu"
},
{
"path": "Zend/tests/access_modifiers_002.phpt",
"chars": 250,
"preview": "--TEST--\nusing multiple access modifiers (attributes)\n--FILE--\n<?php\n\nclass test {\n static public public static final"
},
{
"path": "Zend/tests/access_modifiers_003.phpt",
"chars": 218,
"preview": "--TEST--\nusing multiple access modifiers (classes)\n--FILE--\n<?php\n\nfinal final class test {\n function foo() {}\n}\n\nech"
},
{
"path": "Zend/tests/access_modifiers_004.phpt",
"chars": 241,
"preview": "--TEST--\nusing multiple access modifiers (abstract methods)\n--FILE--\n<?php\n\nclass test {\n abstract abstract function "
},
{
"path": "Zend/tests/access_modifiers_005.phpt",
"chars": 229,
"preview": "--TEST--\nusing multiple access modifiers (final methods)\n--FILE--\n<?php\n\nclass test {\n final final function foo() {\n "
},
{
"path": "Zend/tests/access_modifiers_006.phpt",
"chars": 233,
"preview": "--TEST--\nusing multiple access modifiers (static methods)\n--FILE--\n<?php\n\nclass test {\n static static function foo() "
},
{
"path": "Zend/tests/access_modifiers_007.phpt",
"chars": 218,
"preview": "--TEST--\nabstract final methods errmsg\n--FILE--\n<?php\n\nclass test {\n final abstract function foo();\n}\n\necho \"Done\\n\";"
},
{
"path": "Zend/tests/access_modifiers_008.phpt",
"chars": 1262,
"preview": "--TEST--\nInconsistencies when accessing protected members\n--FILE--\n<?php\n\nclass A {\n static protected function ma() {"
},
{
"path": "Zend/tests/access_modifiers_009.phpt",
"chars": 1125,
"preview": "--TEST--\nInconsistencies when accessing protected members - is_callable\n--FILE--\n<?php\n\nclass A {\n static protected f"
},
{
"path": "Zend/tests/access_modifiers_010.phpt",
"chars": 545,
"preview": "--TEST--\nTesting visibility of methods\n--FILE--\n<?php\n\nclass d {\n private function test2() {\n print \"Bar\\n\";\n "
},
{
"path": "Zend/tests/access_modifiers_011.phpt",
"chars": 649,
"preview": "--TEST--\n__call() for private/protected methods\n--FILE--\n<?php\n\nclass A {\n private $var1 = 'var1 value';\n protec"
},
{
"path": "Zend/tests/access_modifiers_012.phpt",
"chars": 501,
"preview": "--TEST--\nTrigger __call() in lieu of non visible methods when called via a callback.\n--FILE--\n<?php\nclass C {\n protec"
},
{
"path": "Zend/tests/access_modifiers_013.phpt",
"chars": 238,
"preview": "--TEST--\nPrevent abstract and final in the same class declaration\n--FILE--\n<?php\n\nfinal abstract class C {\n private f"
},
{
"path": "Zend/tests/add_001.phpt",
"chars": 709,
"preview": "--TEST--\nadding arrays\n--FILE--\n<?php\n\n$a = array(1,2,3);\n$b = array(\"str\", \"here\");\n\n$c = $a + $b;\nvar_dump($c);\n\n$a = "
},
{
"path": "Zend/tests/add_002.phpt",
"chars": 465,
"preview": "--TEST--\nadding objects to arrays\n--FILE--\n<?php\n\n$a = array(1,2,3);\n\n$o = new stdclass;\n$o->prop = \"value\";\n\ntry {\n "
},
{
"path": "Zend/tests/add_003.phpt",
"chars": 465,
"preview": "--TEST--\nadding arrays to objects\n--FILE--\n<?php\n\n$a = array(1,2,3);\n\n$o = new stdclass;\n$o->prop = \"value\";\n\ntry {\n "
},
{
"path": "Zend/tests/add_004.phpt",
"chars": 413,
"preview": "--TEST--\nadding numbers to arrays\n--FILE--\n<?php\n\n$a = array(1,2,3);\n\ntry {\n var_dump($a + 5);\n} catch (Error $e) {\n "
},
{
"path": "Zend/tests/add_005.phpt",
"chars": 252,
"preview": "--TEST--\nadding integers to doubles\n--INI--\nprecision=14\n--FILE--\n<?php\n\n$i = 75636;\n$d = 2834681123.123123;\n\n$c = $i + "
},
{
"path": "Zend/tests/add_006.phpt",
"chars": 883,
"preview": "--TEST--\nadding numbers to strings\n--INI--\nprecision=14\n--FILE--\n<?php\n\n$i = 75636;\n$s1 = \"this is a string\";\n$s2 = \"876"
},
{
"path": "Zend/tests/add_007.phpt",
"chars": 445,
"preview": "--TEST--\nadding strings to arrays\n--FILE--\n<?php\n\n$a = array(1,2,3);\n\n$s1 = \"some string\";\n\ntry {\n var_dump($a + $s1)"
},
{
"path": "Zend/tests/add_optional_by_ref_arg.phpt",
"chars": 348,
"preview": "--TEST--\nAdding an optional by-ref arg in a child method\n--FILE--\n<?php\n\nclass Test1 {\n public function method1() {\n "
},
{
"path": "Zend/tests/allow_dynamic_properties_on_enum.phpt",
"chars": 225,
"preview": "--TEST--\n#[AllowDynamicProperties] cannot be applied to enum (GH-15731)\n--FILE--\n<?php\n\n#[AllowDynamicProperties]\nenum T"
},
{
"path": "Zend/tests/allow_dynamic_properties_on_interface.phpt",
"chars": 229,
"preview": "--TEST--\n#[AllowDynamicProperties] cannot be applied to interface\n--FILE--\n<?php\n\n#[AllowDynamicProperties]\ninterface Te"
},
{
"path": "Zend/tests/allow_dynamic_properties_on_trait.phpt",
"chars": 217,
"preview": "--TEST--\n#[AllowDynamicProperties] cannot be applied to trait\n--FILE--\n<?php\n\n#[AllowDynamicProperties]\ntrait Test {}\n\n?"
},
{
"path": "Zend/tests/alternative_offset_syntax_compile_error_in_const_expr.phpt",
"chars": 265,
"preview": "--TEST--\nAlternative offset syntax should emit E_COMPILE_ERROR in const expression\n--FILE--\n<?php\nconst FOO_COMPILE_ERRO"
},
{
"path": "Zend/tests/alternative_offset_syntax_compile_error_outside_const_expr.phpt",
"chars": 231,
"preview": "--TEST--\nAlternative offset syntax should emit E_COMPILE_ERROR outside const expression\n--FILE--\n<?php\n$foo = 'BAR';\nvar"
},
{
"path": "Zend/tests/alternative_offset_syntax_in_encaps_string.phpt",
"chars": 232,
"preview": "--TEST--\nAlternative offset syntax should emit only E_COMPILE_ERROR in string interpolation\n--FILE--\n<?php \"{$g{'h'}}\"; "
},
{
"path": "Zend/tests/and_001.phpt",
"chars": 419,
"preview": "--TEST--\nbitwise AND and strings\n--FILE--\n<?php\n\n$s = \"123\";\n$s1 = \"234\";\n\nvar_dump($s & $s1);\n\n$s = \"test\";\n$s1 = \"some"
},
{
"path": "Zend/tests/anon/001.phpt",
"chars": 119,
"preview": "--TEST--\ndeclare bare anonymous class\n--FILE--\n<?php\nvar_dump(new class{});\n?>\n--EXPECTF--\nobject(class@%s)#%d (0) {\n}\n"
},
{
"path": "Zend/tests/anon/002.phpt",
"chars": 304,
"preview": "--TEST--\ndeclare anonymous class extending another\n--FILE--\n<?php\nclass A{}\n\ninterface B{\n public function method();\n"
},
{
"path": "Zend/tests/anon/003.phpt",
"chars": 682,
"preview": "--TEST--\nreusing anonymous classes\n--FILE--\n<?php\nwhile (@$i++<10) {\n var_dump(new class($i) {\n public $i;\n "
},
{
"path": "Zend/tests/anon/004.phpt",
"chars": 899,
"preview": "--TEST--\ntesting anonymous inheritance\n--FILE--\n<?php\nclass Outer {\n protected $data;\n\n public function __construc"
},
{
"path": "Zend/tests/anon/005.phpt",
"chars": 1126,
"preview": "--TEST--\ntesting reusing anons that implement an interface\n--FILE--\n<?php\nclass Outer {\n protected $data;\n\n public"
},
{
"path": "Zend/tests/anon/006.phpt",
"chars": 188,
"preview": "--TEST--\ntesting anon classes inside namespaces\n--FILE--\n<?php\nnamespace lone {\n $hello = new class{} ;\n}\n\nnamespace {"
},
{
"path": "Zend/tests/anon/007.phpt",
"chars": 362,
"preview": "--TEST--\ntesting anon classes in functions outside of classes in namespaces\n--FILE--\n<?php\nnamespace lone {\n function"
}
]
// ... and 21809 more files (download for full content)
About this extraction
This page contains the full source code of the swoole/swoole-cli GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 22009 files (106.2 MB), approximately 24.8M tokens, and a symbol index with 26244 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.