- Added check for staticVars when processing closure use references
- Prevented redeclaration of static variables as local variables in closures
- Updated variable resolution logic to include static variable scope
- Added comprehensive test case for static variable closure reference behavior
- Fixed variable name collision in preprocessor class constant handling
- Updated version number to 0.4.1
- Simplified test case prop-001 to focus on short-circuit evaluation
- Updated expected output values in object property tests
- Modified dynamic call return tests to expect 'user' instead of 'foo'
- Removed skip conditions and extensive test suite documentation
- Kept core functionality testing for isset and assignment operations
- Renamed ExtensionProvider attribute to MethodsFor across all test files
- Updated keyword extension tests to use MethodsFor instead of ExtensionProvider
- Modified universal method extension tests to reflect the attribute name change
- Adjusted stream method extension tests to use new attribute naming
- Changed object extension tests to use MethodsFor attribute
- Updated constant expression validation logic for PHP 8.3+ static initializers
- Added support for dynamic static variable initializers in PHP 8.3 and later
- Removed
- Implemented expected() and unexpected() compile-time functions for branch prediction hints
- Added C++ macro generation for EXPECTED(...) and UNEXPECTED(...) in compiled output
- Updated documentation to include new branch prediction functions
- Added comprehensive tests for branch prediction macro generation
- Modified compiler base to handle expected/unexpected function type detection
- Added parser support for branch prediction function calls with proper argument validation
- Included polyfill implementations for expected and unexpected functions
- Updated version number from 1086 to 1087
- Fixed zend_update_property call to use correct class entry variable
- Refactored object creation logic to delegate to parent allocator when needed
- Added parentHasCustomCreateObjectOnPhp84 method to detect parent class properties
- Simplified create object handler implementation using typephp_create_object_with_defaults
- Updated property initialization to work properly with asymmetric visibility
- Modified test case to include options property verification in inheritance scenario
- Add canConsumeWrapperArgument method to determine when arguments can be consumed
- Modify argument passing logic to use php::takeValue for consumable arguments
- Support variadic arguments and specific types (mixed, string, array, object) for consumption
- Preserve reference arguments without consumption to maintain memory safety
- Add comprehensive test coverage for argument move semantics
- Create test files to verify correct argument handling in wrapper generation
- Modified multi_return_repeated_value function to return three values instead of two
- Updated variable assignment to include $tail value in return statement
- Changed destructuring assignment to handle three returned values
- Updated expected output in test cases to include the additional tail value
- Modified PHPUnit test assertions to match new three
perf(compiler): optimize multi-return tuple assignment with move semantics
- Replace temporary Var construction with direct tuple element assignment
- Implement std::move for final local variable uses to avoid unnecessary copies
- Track remaining variable uses to determine when to apply move semantics
- Preserve PHP value-assignment semantics for references and indirect zvals
- Add comprehensive test coverage for tuple multi-return scenarios
- Include tests for repeated values, references, globals, and static variables
```
- Add test case for namespaced class name escaping in C++ string generation
- Verify proper error message display for type mismatch in namespaced properties
- Test native scalar property assignments with configuration arrays
- Validate TypeError handling for invalid type assignments in namespaced context
fix(compiler): ensure namespaced class names are properly escaped in property type checks
- Update genCharPtr call with escape parameter set to true
- Fix object property type check display name generation for namespaced classes
- Maintain backward compatibility with existing property access patterns
- Implement anonymous and arrow generator closures with lazy execution
- Add proper context preservation for closure generator compilation
- Support yield evaluation order with key and value side effects
- Enable yield from with iterator evaluation order matching PHP behavior
- Add FiberGenerator as global type replacing TypePHP\FiberGenerator
- Implement proper return value handling for closed and failed generators
- Add validation for generator closure parameter restrictions
- Support reentrant generator advance with error handling
- Add comprehensive test coverage for generator edge cases
- Add support for array references using byRef flag in ArrayExpressionTrait
- Modify hasReference check in array parsing logic to handle mixed references
- Implement reference value parsing with proper error handling for unpacking
- Enhance foreach reference binding with improved type checking and error messages
- Add proper scope handling for foreach iterators with class context
- Update foreach value assignment to use correct reference expression syntax
- Implement structural mutation protection for std containers during iteration
- Add comprehensive test coverage for foreach edge cases and reference mutations
- Document std container modification restrictions during foreach loops
- Update yield from and foreach documentation for iterator handling differences
- Add test case for foreach by value behavior when current element is removed
- Verify that foreach maintains stable array snapshot during iteration
- Confirm expected output matches array traversal before modifications
- Document behavior where unset operations don't affect ongoing loop
refactor(parser): simplify foreach array handling logic
- Remove dedicated parseForeachArray method from ForeachTrait
- Consolidate array iteration to use existing parseForeachIterable method
- Maintain same functional behavior while reducing code duplication
- Update type checking logic to route arrays
- Replace direct php::concat calls with flattened concatenation using parseFlattenedConcat
- Add prepareConcatOperand method to handle proper string conversion for different types
- Implement unified foreach iterator using php::ForeachIterator for both arrays and objects
- Remove separate parseForeachObject method and consolidate iteration logic
- Add support for precompiled headers in GCC-like backends
- Implement PrecompiledHeaderManager for PCH preparation and caching
- Optimize build queue with SourceCompileQueue using largest-first sorting strategy
- Improve progress percentage calculation during compilation
- Add new test case for unified foreach iteration over different iterable types
- Replace ExtensionProvider::Keyword constant with direct '*' string usage
- Add LibPhpxInstaller class to automatically build libphpx.so from source
- Implement PHPX build dependency installation via system package managers
- Update installer documentation to include libphpx.so auto-build instructions
- Modify PHP directory detection to prioritize running PHP installation
- Adjust CompilerBase to use Composer InstalledVersions for PHPX path resolution
- Refactor LinuxPackageManager to separate build tool packages from configure options
- Add comprehensive tests for LibPhpxInstaller shared library detection
- Update platform warnings to guide users toward interactive auto-build
- Revise ExtensionProvider parsing to handle
- Replace appendCapturedStmtLines helper with direct formatCapturedStmtLines calls
- Change createPropertyAccessResolver from private to protected for extensibility
- Change resolveNativeInstanceProperty from private to protected for extensibility
- Change resolveNativeStaticProperty from private to protected for extensibility
- Change applyNativePropertyAccessResult from private to protected for extensibility
- Change containsNullsafeChain from private to protected for extensibility
- Replace parseTypeDecl output parameter with resolveTypeDecl returning array
- Change sortFiles to getSortedFiles returning sorted array instead of modifying input
- Update name resolution to handle imported namespace prefixes correctly
- Enhance property hook backing access detection with additional conditions
- Add redis extension availability check to test skip conditions
- Document compiler self-hosting constraints regarding reference parameters across traits
- Change all documentation references from bin/compiler.php to bin/tpc.php
- Update composer.json with new binary entry point
- Update run-tests.php default compiler path
- Update all example commands and guides to use new executable name
- Add composer package configuration for swoole/typephp
- Update README installation instructions for new naming convention
- Add ExtensionProvider attribute to StreamExtensions class
- Rename stream_write_test function to writeTest method
- Convert function to static method in StreamExtensions class
- Add proper class declaration and method signature
- Maintain original stream write functionality
- Replaced all occurrences of native_types::type_* with Type::* constants
- Replaced all occurrences of complex_types::type_* with Type::* constants
- Updated ExtensionProvider annotation to use ExtensionProvider::Keyword
- Modified std array, vector, map, ordered_map, bigfloat, bigint, decimal tests
- Updated stream, array multidimensional, unsafe pointer, and type mismatch tests
- Changed camel case keyword extension to use Type::Any constant
- Updated documentation to reflect Type::* constant usage instead of type_* constants
- Add ExtensionProvider attribute class to define extension targets
- Convert function-based extensions to class-based ExtensionProvider pattern
- Support various target types including native_types, complex_types, and class names
- Parse ExtensionProvider attributes during preprocessing phase
- Generate proper extension method calls using provider classes
- Update test cases to use ExtensionProvider syntax instead of function prefixes
- Remove old extension function name patterns and related logic
- Add validation for extension provider method signatures and parameters
- Support both snake_case and camel
- Renamed test directory from tests/aot/ to tests/compiler/
- Updated all references in documentation files to point to new location
- Modified test runner commands to use new compiler test path
- Updated guide documentation to reflect directory name change
- Changed all test file paths in markdown documentation accordingly
- Add readonly flag to PropertyDef entity
- Implement readonly check in property hoisting logic
- Prevent hoisting of readonly properties in SsaPropOptimizer
- Update canHoist methods to accept PropertyDef parameter
- Add test case for readonly cross-class property access
- Document readonly property restriction in hoisting rules
- Removed camelCase to snake_case conversion in extension function lookups
- Changed object extension methods to require exact name matches without case conversion
- Updated universal method extensions to use exact spelling instead of case variants
- Modified keyword extension methods to use exact __{method} naming
- Simplified function candidate search to single exact match instead of multiple variants
- Updated test cases to reflect exact naming requirements for all extension methods
- Maintained case-insensitive lookup behavior according to PHP function semantics
- Create new test file for trait method writing injected private property on child object
- Add trait PrivatePropertyWriter with private array property and items method
- Implement PropertyOwner class using the trait
- Create ChildPropertyOwner class extending PropertyOwner
- Add main function to test the inherited private property access
- Define expected output for the array dump result