* Disable serialization and unserialization on classes
Classes that have associated Rust types cannot be serialized for
obvious reasons so these need to be disabled. Disabling these actions
changes in PHP 8.1 to use a flag, so that will need to be solved with
PHP 8.1 support. Closes#97
* update docs stubs
* Fixed `ArgParser` lifetimes
Now stores a mutable reference to the underlying zval. Instead of
passing the execution data to the arg parser, a vector of args is now
passed to prevent a shared lifetime issue with the `$this` object.
* Implememt from traits for classes
* Added `ZBox` and `ZBoxable`
* Implement `ZBoxable` for `ZendStr`
Build for all f eatures on CI
* Replace `OwnedZendObject` with `ZBox<ZendObject>`
* Replace `ClassObject` with `ZBox<ZendClassObject>`
Fixed deserialization bug
Panic when uninitialized - better than UB
* Replace `OwnedHashTable` with `ZBox<HashTable>`
* Remove `MaybeUninit` from `ZendClassObject`
* Remove lifetime from `PhpException`
All class entries are effectively static (module start to module end) so
it's just a hassle carrying the lifetime everywhere.
* Removed forgotten lifetimes
* Implement `IntoZval` for `Result<T, E>`
Fixes function return error with `PhpResult` as the return type
* Updated changelog
* Rough implementation of struct properties
* Store properties hashtable once
* Tidy up handler functions with exceptions
* Add stub `get_properties` function for codegen structs
* Remove nightly features
* Revert storing properties
Technically, the zend object _could_ move in memory, leaving dangling
references in the properties hashtable. We will just build the hashtable
when required.
* Added `#[prop]` attribute
* Add pointer type to zval, tidy up zend string
* Add support for method properties
* Add `#[getter]` and `#[setter]` attributes
* Update documentation with method properties
* Tidy up macros code
* Remove string gc checks (done on PHP side)
* Move `RegisteredClass` implementation to module, update docs
* Fix read property `rv` segfault
* Fixed doctests
* Call zval destructor when changing zval type and dropping
* Remove `ZendHashTable` wrapper
Replaced by returning references to the actual hashtable, and having a
new type `OwnedHashTable` when creating a new hashtable.
* Refactor `ZendString` into a borrowed and owned variant
`&ZendStr` is now equivalent to `&str`, while `ZendString` is equivalent
to `String`.
* Tidy up `ZendString`, add `Debug` implementation
* Call zval destructor when changing zval type and dropping
* Remove zval return from array insert functions #73
The functions actually returned references to the new zval value, so
there's not much point in returning.
* Remove `ZendHashTable` wrapper
Replaced by returning references to the actual hashtable, and having a
new type `OwnedHashTable` when creating a new hashtable.
* Remove pointless `drop` field from `OwnedHashTable`
* Added `Values` iterator for Zend hashtable
* Change iterators to double ended and exact size
* Change the case of method identifiers to comply with PSR-1
* Expose methods as camelCase and add attributes for controlling renaming
Add an attribute to methods to control the name they're exported under
and an attribute to php_impl to override automatic case conversion
conventions.
* Cargo fmt
* Add option for no method renaming
Default to camel case renaming
Co-authored-by: David Cole <david.cole1340@gmail.com>
* Allowlist types generated by bindgen
Tidied up build script as well, layout tests are no longer generated
unless `EXT_PHP_RS_TEST` env variable is set. Much quicker build times
and smaller output size.
* Fix build
* Override Rust toolchain when running CI
* Start work on returning new objects
Change `IntoZval` to consume `self`
* Add conversion from vector reference to PHP hashtable through clones
* `set_binary` now only takes `Vec`
Used to take `AsRef<[T]>` to allow users to pass arrays, however, this
causes the data to be cloned even if the user passes a `Vec`.
* Rename `as_zval` to `into_zval` to match Rust conventions
* Started work on closures
* Finish implementation of closures
* Document closures, add to prelude, feature gate
* Fixed closure example
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