pub(crate) fn type_init_code(
        type_: DataType,
        pass_by_ref: bool,
        is_variadic: bool,
        allow_null: bool,
    ) -> u32 {
        let type_ = type_.as_u32();

        (if type_ == _IS_BOOL {
            MAY_BE_BOOL
        } else if type_ == IS_MIXED {
            MAY_BE_ANY
        } else {
            1 << type_
        }) | (if allow_null {
            _ZEND_TYPE_NULLABLE_BIT
        } else {
            0
        }) | Self::arg_info_flags(pass_by_ref, is_variadic)
    }
Calculates the internal flags of the type.
Translation of the `ZEND_TYPE_INIT_CODE` macro from `zend_API.h:163`.

# Parameters

* `type_` - The type to initialize the Zend type with.
* `pass_by_ref` - Whether the value should be passed by reference.
* `is_variadic` - Whether this type represents a variadic argument.
* `allow_null` - Whether the value can be null.
src/zend/_type.rs