// This is a cheeky hack - since we need the list of allowed bindings in both
// the build script and in the CLI crate (in different formats), we define the
// `allowed_bindings.rs` file, which calls a macro called `bind` that doesn't
// exist in the bindings file. Which ever script include!s the bindings must
// define the `bind` macro. This allows us to have the list in string format
// inside the build script and in macro format inside the CLI crate.
//
// NOTE TO EDITORS:
//   When updating this file, you must re-generate the `docsrs_bindings.rs`
//   file used by docs.rs to build documentation. To perform this from
//   within the repository root:
//
//     $ tools/update_bindings.sh
//     $ git add . && git commit -m "update docs.rs bindings"
//
//   This will build the bindings using docker, and then copy the
//   `docsrs_bindings.rs` file to the root of the repository.
//   This will ensure that the file is always built in the same environment.
//
//   Docker and buildx are required to run the script, so make sure you have
//   those installed. For more information, see:
//   https://docs.docker.com/engine/install/

bind! {
    HashTable,
    _Bucket,
    _call_user_function_impl,
    _efree,
    _emalloc,
    _estrdup,
    _zend_executor_globals,
    _zend_compiler_globals,
    _sapi_globals_struct,
    _sapi_module_struct,
    _zend_expected_type,
    _zend_expected_type_Z_EXPECTED_ARRAY,
    _zend_expected_type_Z_EXPECTED_BOOL,
    _zend_expected_type_Z_EXPECTED_DOUBLE,
    _zend_expected_type_Z_EXPECTED_LONG,
    _zend_expected_type_Z_EXPECTED_OBJECT,
    _zend_expected_type_Z_EXPECTED_RESOURCE,
    _zend_expected_type_Z_EXPECTED_STRING,
    _zend_new_array,
    _zval_struct__bindgen_ty_1,
    _zval_struct__bindgen_ty_2,
    _zend_known_string_id,
    // ext_php_rs_executor_globals,
    // ext_php_rs_compiler_globals,
    // ext_php_rs_php_build_id,
    // ext_php_rs_zend_object_alloc,
    // ext_php_rs_zend_object_release,
    // ext_php_rs_zend_string_init,
    // ext_php_rs_zend_string_release,
    // ext_php_rs_is_known_valid_utf8,
    // ext_php_rs_set_known_valid_utf8,
    object_properties_init,
    php_error_docref,
    php_info_print_table_end,
    php_info_print_table_header,
    php_info_print_table_row,
    php_info_print_table_start,
    std_object_handlers,
    zend_array_destroy,
    zend_array_dup,
    zend_call_known_function,
    zend_fetch_function_str,
    zend_hash_str_find_ptr_lc,
    zend_ce_argument_count_error,
    zend_ce_arithmetic_error,
    zend_ce_compile_error,
    zend_ce_division_by_zero_error,
    zend_ce_error_exception,
    zend_ce_exception,
    zend_ce_parse_error,
    zend_ce_throwable,
    zend_ce_type_error,
    zend_ce_unhandled_match_error,
    zend_ce_value_error,
    zend_ce_traversable,
    zend_ce_aggregate,
    zend_ce_iterator,
    zend_ce_arrayaccess,
    zend_ce_serializable,
    zend_ce_countable,
    zend_ce_stringable,
    zend_class_entry,
    zend_declare_class_constant,
    zend_declare_property,
    zend_do_implement_interface,
    zend_enum_add_case,
    zend_enum_get_case,
    zend_enum_new,
    zend_execute_data,
    zend_function_entry,
    zend_hash_clean,
    zend_hash_find_known_hash,
    _zend_hash_find_known_hash,
    zend_hash_index_del,
    zend_hash_index_find,
    zend_hash_index_update,
    zend_hash_next_index_insert,
    zend_hash_str_del,
    zend_hash_str_find,
    zend_hash_str_update,
    zend_internal_arg_info,
    zend_is_callable,
    zend_is_identical,
    zend_is_iterable,
    zend_known_strings,
    zend_long,
    zend_lookup_class_ex,
    zend_module_entry,
    zend_object,
    zend_object_handlers,
    zend_object_std_init,
    zend_objects_clone_members,
    zend_register_bool_constant,
    zend_register_double_constant,
    zend_register_ini_entries,
    zend_register_internal_enum,
    zend_register_internal_interface,
    zend_ini_entry_def,
    zend_register_internal_class_ex,
    zend_register_long_constant,
    zend_register_string_constant,
    zend_resource,
    zend_string,
    zend_string_init_interned,
    zend_throw_exception_ex,
    zend_throw_exception_object,
    zend_type,
    zend_value,
    zend_wrong_parameters_count_error,
    zval,
    CONST_CS,
    CONST_DEPRECATED,
    CONST_NO_FILE_CACHE,
    CONST_PERSISTENT,
    E_ERROR,
    E_WARNING,
    E_PARSE,
    E_NOTICE,
    E_CORE_ERROR,
    E_CORE_WARNING,
    E_COMPILE_ERROR,
    E_COMPILE_WARNING,
    E_USER_ERROR,
    E_USER_WARNING,
    E_USER_NOTICE,
    E_STRICT,
    E_RECOVERABLE_ERROR,
    E_DEPRECATED,
    E_USER_DEPRECATED,
    HT_MIN_SIZE,
    IS_ARRAY,
    IS_ARRAY_EX,
    IS_CALLABLE,
    IS_CONSTANT_AST,
    IS_CONSTANT_AST_EX,
    IS_DOUBLE,
    IS_FALSE,
    IS_INDIRECT,
    IS_INTERNED_STRING_EX,
    IS_LONG,
    IS_MIXED,
    IS_NULL,
    IS_OBJECT,
    IS_OBJECT_EX,
    IS_REFERENCE,
    IS_REFERENCE_EX,
    IS_RESOURCE,
    IS_RESOURCE_EX,
    IS_STRING,
    IS_STRING_EX,
    IS_TRUE,
    IS_TYPE_COLLECTABLE,
    IS_TYPE_REFCOUNTED,
    IS_UNDEF,
    IS_VOID,
    IS_PTR,
    IS_ITERABLE,
    MAY_BE_ANY,
    MAY_BE_BOOL,
    PHP_INI_USER,
    PHP_INI_PERDIR,
    PHP_INI_SYSTEM,
    PHP_INI_ALL,
    USING_ZTS,
    ZEND_ACC_ABSTRACT,
    ZEND_ACC_ANON_CLASS,
    ZEND_ACC_CALL_VIA_TRAMPOLINE,
    ZEND_ACC_CHANGED,
    ZEND_ACC_CLOSURE,
    ZEND_ACC_CONSTANTS_UPDATED,
    ZEND_ACC_CTOR,
    ZEND_ACC_DEPRECATED,
    ZEND_ACC_DONE_PASS_TWO,
    ZEND_ACC_EARLY_BINDING,
    ZEND_ACC_ENUM,
    ZEND_ACC_FAKE_CLOSURE,
    ZEND_ACC_FINAL,
    ZEND_ACC_GENERATOR,
    ZEND_ACC_HAS_FINALLY_BLOCK,
    ZEND_ACC_HAS_RETURN_TYPE,
    ZEND_ACC_HAS_TYPE_HINTS,
    ZEND_ACC_HAS_UNLINKED_USES,
    ZEND_ACC_HEAP_RT_CACHE,
    ZEND_ACC_IMMUTABLE,
    ZEND_ACC_IMPLICIT_ABSTRACT_CLASS,
    ZEND_ACC_INTERFACE,
    ZEND_ACC_LINKED,
    ZEND_ACC_NEARLY_LINKED,
    ZEND_ACC_NEVER_CACHE,
    ZEND_ACC_NO_DYNAMIC_PROPERTIES,
    ZEND_ACC_PRELOADED,
    ZEND_ACC_PRIVATE,
    ZEND_ACC_PROMOTED,
    ZEND_ACC_PROPERTY_TYPES_RESOLVED,
    ZEND_ACC_PROTECTED,
    ZEND_ACC_PUBLIC,
    ZEND_ACC_RESOLVED_INTERFACES,
    ZEND_ACC_RESOLVED_PARENT,
    ZEND_ACC_RETURN_REFERENCE,
    ZEND_ACC_REUSE_GET_ITERATOR,
    ZEND_ACC_STATIC,
    ZEND_ACC_STRICT_TYPES,
    ZEND_ACC_TOP_LEVEL,
    ZEND_ACC_TRAIT,
    ZEND_ACC_TRAIT_CLONE,
    ZEND_ACC_UNRESOLVED_VARIANCE,
    ZEND_ACC_USES_THIS,
    ZEND_ACC_USE_GUARDS,
    ZEND_ACC_VARIADIC,
    ZEND_DEBUG,
    ZEND_HAS_STATIC_IN_METHODS,
    ZEND_ISEMPTY,
    // ZEND_MM_ALIGNMENT,
    // ZEND_MM_ALIGNMENT_MASK,
    ZEND_MODULE_API_NO,
    ZEND_PROPERTY_EXISTS,
    ZEND_PROPERTY_ISSET,
    Z_TYPE_FLAGS_SHIFT,
    _IS_BOOL,
    _ZEND_IS_VARIADIC_BIT,
    _ZEND_SEND_MODE_SHIFT,
    _ZEND_TYPE_NULLABLE_BIT,
    ts_rsrc_id,
    _ZEND_TYPE_NAME_BIT,
    _ZEND_TYPE_LITERAL_NAME_BIT,
    ZEND_INTERNAL_FUNCTION,
    ZEND_USER_FUNCTION,
    ZEND_EVAL_CODE,
    zval_ptr_dtor,
    zend_refcounted_h,
    zend_is_true,
    zend_object_std_dtor,
    zend_std_read_property,
    zend_std_write_property,
    zend_std_get_properties,
    zend_std_has_property,
    zend_objects_new,
    zend_standard_class_def,
    zend_class_serialize_deny,
    zend_class_unserialize_deny,
    zend_executor_globals,
    zend_compiler_globals,
    sapi_module_struct,
    zend_objects_store_del,
    zend_hash_move_forward_ex,
    zend_hash_get_current_key_type_ex,
    zend_hash_get_current_key_zval_ex,
    zend_hash_get_current_data_ex,
    zend_hash_move_backwards_ex,
    zend_hash_key_type,
    zend_array_count,
    gc_possible_root,
    ZEND_ACC_NOT_SERIALIZABLE,
    executor_globals,
    compiler_globals,
    php_core_globals,
    core_globals,
    sapi_globals_struct,
    sapi_globals,
    sapi_module,
    php_printf,
    __zend_malloc,
    tsrm_get_ls_cache,
    executor_globals_offset,
    compiler_globals_offset,
    core_globals_offset,
    sapi_globals_offset,
    php_file_globals,
    file_globals,
    file_globals_id,
    TRACK_VARS_POST,
    TRACK_VARS_GET,
    TRACK_VARS_COOKIE,
    TRACK_VARS_SERVER,
    TRACK_VARS_ENV,
    TRACK_VARS_FILES,
    TRACK_VARS_REQUEST,
    sapi_request_info,
    sapi_header_struct,
    zend_is_auto_global,
    zend_llist_get_next_ex,
    zend_llist_get_prev_ex,
    php_register_url_stream_wrapper,
    php_stream_locate_url_wrapper,
    php_unregister_url_stream_wrapper,
    php_unregister_url_stream_wrapper_volatile,
    php_register_url_stream_wrapper_volatile,
    php_stream_wrapper,
    php_stream_stdio_ops,
    zend_atomic_bool_store,
    zend_interrupt_function,
    zend_eval_string,
    zend_file_handle,
    zend_stream_init_filename,
    zend_destroy_file_handle,
    php_execute_script,
    zend_register_module_ex,
    _zend_bailout,
    sapi_startup,
    sapi_shutdown,
    php_module_startup,
    php_module_shutdown,
    php_request_startup,
    php_request_shutdown,
    instanceof_function_slow,
    uid_t,
    gid_t,
    php_default_post_reader,
    php_default_treat_data,
    php_default_input_filter,
    php_error,
    php_ini_builder,
    php_ini_builder_prepend,
    php_ini_builder_unquoted,
    php_ini_builder_quoted,
    php_ini_builder_define
}
