Skip to content

Commit

Permalink
Add is_identical for zvals
Browse files Browse the repository at this point in the history
  • Loading branch information
Christian-Rades committed Jan 18, 2023
1 parent 7ed31eb commit 99abece
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 2 deletions.
1 change: 1 addition & 0 deletions allowed_bindings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ bind! {
zend_hash_str_update,
zend_internal_arg_info,
zend_is_callable,
zend_is_identical,
zend_long,
zend_lookup_class_ex,
zend_module_entry,
Expand Down
16 changes: 14 additions & 2 deletions src/types/zval.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ use crate::{
convert::{FromZval, FromZvalMut, IntoZval, IntoZvalDyn},
error::{Error, Result},
ffi::{
_zval_struct__bindgen_ty_1, _zval_struct__bindgen_ty_2, zend_is_callable, zend_resource,
zend_value, zval, zval_ptr_dtor,
_zval_struct__bindgen_ty_1, _zval_struct__bindgen_ty_2, zend_is_callable, zend_is_identical, zend_resource,
zend_value, zval, zval_ptr_dtor,
},
flags::DataType,
flags::ZvalTypeFlags,
Expand Down Expand Up @@ -327,6 +327,18 @@ impl Zval {
unsafe { zend_is_callable(ptr as *mut Self, 0, std::ptr::null_mut()) }
}

/// Checks if the zval is identical to another one.
/// This works like `===` in php.
///
/// # Parameters
///
/// * `other` - The the zval to check identity against.
pub fn is_identical(&self, other: &Self) -> bool {
let self_p: *const Self = self;
let other_p: *const Self = other;
unsafe { zend_is_identical(self_p as *mut Self, other_p as *mut Self) }
}

/// Returns true if the zval contains a pointer, false otherwise.
pub fn is_ptr(&self) -> bool {
self.get_type() == DataType::Ptr
Expand Down

0 comments on commit 99abece

Please sign in to comment.