The object memory is automatically deallocated, however, anything that
has been allocated on the heap (strings, vectors etc.) must be
deallocated while we are freeing the object.
* Panic instead of return result when adding property
This will almost always be unwrapped
* Remove unused `set_refcount` function
Wasn't valid either way
* Add ability to get and set properties on class objects
* Updated documentation adding properties
* Allow returning of object references
`TYPE` is now also on `IntoZval` which means `FromZval` does not need to
be implemented on return types
* Clippy lints
* Replace `ZendObjectOverride` derive macro with `#[php_class]`
* Updated guide with `#[php_class]` macro
* Panic rather than return error when implementing interface
It's gonna panic either way so might as well make it easier for the
builder
* Remove `libc` dependency
* Started work on guide, added types
* Rewrite argument parser to allow referencs
Primarly so that `&str` is a valid parameter type.
* Remove generic `Into<String>` conversion to exception
* Worked on guide, added macros
* Build guide when building docs
* Allow manual trigger of docs build
* `cargo fmt`
* Fix memory leaks with strings and zvals
Add PhpAllocator - not meant for usage, only for memory leak debugging.
* Replace `impl AsRef<str>` with `&str`
* Added `ZendString::as_str()`
* Tidy up
* Replace owned string parameters with `Into<String>`
* Remove backtrace feature, un-import allocator
* Remove uses of `unwrap`, improve library safety
* Started work on `#[php_function]` attribute
* Added `PhantomData` to `ZendHashTable`
Proper lifetimes for `HashTable` type
* `#[php_function]` now accepts `Vec<T>`
Refactored `ZendHashTable` iterators - there is now `Iter` and
`IntoIter` depending on whether it will consume the HashTable or not.
* Add support for nullable types
* Allow `optional` parameter on attribute
* Support primitive and `Option` return types
* Tidied and refactored attribute
* Added documentation for `#[php_function]`
Implemented `IntoZval` for `Option<T>` when `IntoZval` is also
implemented for `T`. `None` resolves to `null`.
* Added `#[php_method]` attribute
* Added `Callable` type, implemented `Drop` on `Zval`
While implementing `Drop`, the `Copy` derivation was removed, however,
this should not have been there in the first place (`Zval` is not valid
for `Copy` if it contains a string).
* Added some macro functions to example
* Add support for boolean arguments
* Added wrapper around binary data
Future support for binary arguments with `#[php_function]` macros.
Unpacking binary data is no longer unsafe. It was never really unsafe in
the beginning, as we were always reading valid memory, just the contents
of the data could not be trusted.
* Added `#[php_module]` attribute, added support for binary arguments
* Added defaults for functions
* Add defaults for methods
* Add startup function macro and prelude
* Refactored method adding
Now done through impl attribute
* Don't rename functions - generate another internal fn
Also hide all generated functions from docs
* Generate startup function when not already defined
* Add support for class and global constants
* Updated `skel` project
* Updated macro documentation, added executor globals
* Remove `Copy` bound for HashMap to Zval
* Updated documentation
* Add `FromZval` trait, updated docs
* Fixed clippy lints
* Fixed ZTS executor globals
* Fix clippy lint
* Object functions now return references to objects
Added ability to get object class name as well as hashtable of
properties
* Return mutable reference to objects
* Optimized `unwrap_or_else` calls
* Fixed adding properties to classes
* Removed unused function from wrapper header
* Moved property functions into `ZendObject`
* Introduced `ZendString` wrapper for raw pointer
* Set refcount of Zval to 0 when setting string properties
* Added ability to check if a property exists
Made some lifetimes explicit, check if property exists before attempting
to get.
* Removed unused file
* Removed unused lifetimes
Clippy was complaining, they were added to ensure that a `'static`
lifetime wasn't returned.
* Added ability to `unpack` and `pack` from Rust
* Updated `Pack::pack_into` documentation
* Replaced constant with new flags, fixed example
* Accept slices/arrays when using `Zval::set_binary`
We shouldn't really be returning Zval objects, rather references to Zval
objects. There is currently a memory leak with arrays that need to be
resolved.
* Exceptions have static lifetimes
* Added functions for throwing exceptions
Changed the `ClassEntry` implementation to unwrap the result before
returning, as these types are guaranteed to be valid. Also replaced the
'a lifetime with 'static lifetimes.
* Initialize handlers on first touch
In the process of turning the two macros into one derive proc macro
* Changed the object handler macros into derive
* Add PHP thread safety to build matrix
* Revert "Add PHP thread safety to build matrix"
This reverts commit 7de868e6b6e329b87c412af8daf61cba1a3e29c5.
* Fixed arguments not being reconized by PHP
* Added function to create interned Zend string
* Changed statup/shutdown function types to Rust types
Prevents users having to import from bindings
* Added flags for classes
* WIP: class builder
* Added properties to classes
* Added class constants
* Added PHP base extensions
Added class inheritance
* Fixed memory leak with constants
Created C wrapper which is compiled and linked in the `build.rs`
script. In the process removed the `build_id()` function as now
we can just export the macro via a function which is defined in
`wrapper.c`.
* Fixed lint issue
* Added functions to set zval as different strings
Regular strings, persistent strings and interned strings
* Updated README with requirements
* Fixed lint issues
* Changed properties to use proper function
* Free zend string when it is changed for a persistent one
* WIP: overriding zend objects
* Added comments to the top of modules.
* Fixed some comments
* Initialize hash map with initial size when converting from HashMap and
Vec
* Removed unused imports
* WIP: object overrides
* Added DerefMut implementation for ZendClassObject
Tidied up lints that clippy was complaining about, removed debugging
statements.
* Fixed pointer dereference error in macro
* Added missing comments for trait
* All functions now take mutable references vs ptr
Removed SetZval implementation for *mut Zval.
Made bindings public, removed duplicate bindings.
Fixed `create_object` handler not working.
Note to self: smaller commits.
* Showcase ability to use shared object
* WIP: debugging property errors
Changed `function` to `method` in classes
Fixed doctest for `c_str`
* Disabled class properties temporarily
See #16
* Initialize args array with size
* Refactored types
Moved types into their own files within the types directory
* Moved Zval set logic into object
Updated example
* WIP: Implementation of hashtable
* Added ability to retrieve zend hashtable from Zval
* Change `ZendHashTable::push` to work with zend functions
Implement iterator for ZendHashTable
* Implemented immutable iterator for ZendHashTable
* Added implementations for converting HashMap and vectors to
ZendHashTable
* Changed ZendHashTable to a wrapper, zval array
Better design, allows for `Drop` implementation for arrays that
are created and unused.
* Allow `Zval::set_array` to be passed Vec and HashMap
* Added methods to retrieve values from Zend hashtable
* Added methods to remove values from Zend hashtable
* Added ability to set value of zval
This allows the return value to now be set.
See the example in `example/skel/src.lib`.
* Added PHP internals book to resources
* Pass self as pointer to keep consistency
* Added argument overloading
If a double is requested but a long is available, we can cast the
long into a double. This is required if the user gives an integer
into a double field.
As well as this, if a string is requested but a long or double is
available, we can cast both of these into a string.
* Check if zval is present before setting in arg
* Added optional argument example
* Updated documentation for ZendLong
* WIP: added null checks
* Moved not required argument logic into function
Seemed more logical, as you can't have a required argument after the
not required argument. Usage:
```rs
FunctionBuilder::new("skeleton_version", skeleton_version)
.arg(Arg::new("req_arg1", DataType::String))
.arg(Arg::new("req_arg1", DataType::String))
.not_required()
.arg(Arg::new("not_req_arg1", DataType::String))
.build()
```
* Added zend_value implementation
Helper functions to retrieve the value from zvals
* Started work on argument parser
* Added PHP version support notice
Due to the way the Zend API changes and the fact that the
stable interface is exposed via C macros, there is no
support for versions lower than PHP 8.0. In the future
we can support PHP 7.4 through Rust features.
* Added TryFrom implementations for Zval -> Types
* Added ability to select arguments from ExecutionData
* Added ability to parse arguments and retrieve val
See `example/skel/src/lib.rs` for usage.