- Add forceArrayArgs parameter to CallArgumentGenerator methods to properly handle
named arguments with setValue method instead of set
- Implement direct foreach array target optimization to improve iteration
performance by allowing direct assignment to variant variables
- Add comprehensive tests for dynamic call cache argument preservation
including small, large, named, unpacked, reference, and exception arguments
- Add tests for dynamic property access with string, referenced-string, and
converted names
- Add tests for foreach direct array targets preserving keys, values, references
- Update CI workflows to checkout PHPX from third_party directory instead of vendor
- Add smoke test for full static builds to verify module globals setup
- Enhance benchmark suite with additional dynamic call cases for different
argument counts (zero, two, four args) to separate cache lookup from argument
materialization costs
- Add case filtering option to property
This benchmark compares the same dynamic and static property operations under
Zend PHP and a TypePHP -O3 + LTO binary. Each metric is the best of seven
rounds after three warm-up rounds and is reported in nanoseconds per property
access.
Run it from the repository root:
php benchmark/property-access/run.php
To reuse an existing binary, add --skip-build. For local regression checks,
--max-ratio=1.5 exits unsuccessfully when a dynamic read or write takes more
than 1.5 times the corresponding Zend PHP result. Use
--case=dynamic_write, --case=dynamic_read, --case=static_write, or
--case=static_read to isolate one workload while profiling.