- Add test for property hooks preservation and invocation after __clone
- Add test for private/protected/readonly property scope handling in clone-with
- Add test for trait method scope usage inside clone-with operations
- Update documentation to reflect completed clone-with implementation coverage
- Remove pending classification for clone-with scoped/readonly/hooked properties
- Remove TODO comment about property handlers preservation in clone-with operation
- Implement clone-with functionality with one/two argument support
- Add preservation of evaluation order for clone-with operations
- Support dynamic, numeric and object-valued properties in clone-with
- Handle error cases and stop property updates at first error
- Reject active references and unwrap sole remaining references
- Respect property scope and unlock readonly properties during cloning
- Add first-class callable and string callable support for clone
- Preserve lexical class scope in Zend call frames for method calls
- Update documentation with clone-with compatibility requirements
- Add comprehensive test coverage for clone-with features
- Implement scope argument handling in runtime function calls
- Add new NegativeCompatibilityTest class with 320 lines of test cases
- Implement closure and arrow function reference return validation with error messages
- Add foreach list destructuring reference binding validation and error reporting
- Move foreach by-reference variable validation to proper location in parser
- Update documentation to reflect foreach list destructuring reference limitations
- Refactor incompatibility classification documentation for clarity
- Remove outdated attribute argument limitation from documentation
- Create diagnostic reporter for controlled compiler boundary testing
- Add comprehensive test coverage for PHP incompatibility boundaries
- Ensure clean failure modes instead of crashes or invalid C++ emission
- Add php85 flag to control closure validation behavior based on PHP version
- Implement rejectUnsupportedClosure method to detect and reject closures in constant expressions
- Add validation for closures in class constant declarations with appropriate error messages
- Add validation for closures in property default values with appropriate error messages
- Add validation for closures in parameter default values with appropriate error messages
- Update documentation to reflect PHP 8.5 closure incompatibility in constants and defaults
- Add comprehensive test cases covering various closure usage scenarios in PHP 8.5
- Remove previously allowed PHP 8.5 class constant closure test case from validation tests
- Add support for __NAMESPACE__ magic constant resolution in namespace, class, and global scopes
- Add support for __PROPERTY__ magic constant that resolves to property name within property context
- Implement namespace\name relative name resolution for functions, constants, classes, and members
- Update AnonClassGenerator to properly parse identifiers instead of using toString()
- Extend CompilerBase to handle Scalar_MagicConst_Namespace and Scalar_MagicConst_Property
- Modify class inheritance and interface implementation to use parseIdentifier for proper name resolution
- Add comprehensive tests for namespace magic constant behavior across different scopes
- Add tests for property magic constant resolving correctly in property contexts only
- Implement runtime attribute factory lowering with proper namespace context handling
- Update visitor pattern to track property magic boundaries and namespace context correctly
- Document incompatibility with PHP 8.5 #[NoDiscard]
- Replace reinterpret_cast<void **> with direct reference operator &
- Remove unnecessary casting for local variable slot registration
- Maintain same functionality while improving code clarity
docs(runtime): add comprehensive runtime lifecycle documentation
- Create detailed RUNTIME_LIFECYCLE.html explaining four-layer architecture
- Document different modes: ext, bin, lib, and WASM with their lifecycle flows
- Add visual flowcharts showing initialization and shutdown sequences
- Include troubleshooting section with shutdown order constraints
- Add naming conventions and maintenance rules for lifecycle management
test(array): add null key append behavior test case
- Create test for null array key appending behavior
- Verify boolean keys convert to integer indexes properly
- Document expected output for null and boolean key handling
- Replace direct typephp_runtime_init calls with TYPEPHP_RUNTIME_INIT macro
- Add conditional linking for Unix PHP extensions to prevent duplicate ZendVM
- Implement dynamic lookup for macOS extensions to resolve host symbols
- Move typephp_helper.h from misc to include directory
- Update WASM interface generator to use project-specific runtime symbols
- Add tests for native module linking behavior and macOS extension options
- Refactor Translator to generate proper embed module entry functions
- Update documentation for new runtime initialization patterns
- Add comprehensive C++ naming rules for typephp_, php::, typephp_<project>, and php_ prefixes
- Document ABI boundaries and symbol collision prevention guidelines
- Update MIXED_CPP_PHP.md with cross-reference to new naming convention document
- Clarify php_ prefix usage for user callable ABI mapping vs internal helpers
- Add project-specific namespace details for typephp_<target> data declarations
- Include code review checklist for naming convention compliance
- Reference new documentation in main README table of contents
- Replace php_get_class with get_class throughout the codebase
- Replace php_get_persistent_class with get_persistent_class
- Replace php_get_func with get_func and update related helpers
- Replace php_get_persistent_method with get_persistent_method
- Replace php_get_persistent_prop with get_persistent_prop
- Replace php_globals_array with php::globalsArray
- Replace php_deindirect with php::deindirect
- Replace php_get_called_ce with php::getCalledCe
- Replace php_get_callable_scope with php::getCallableScope
- Replace php_get_str with get_str for literal string access
- Update build script to handle TypePHP project module accessor
- Add test case for helper symbol collision prevention
- Modify module initialization from app_init/app_clean to module_init/module_clean
- Introduce $allowLocalClassEntryHoisting flag to control class entry hoisting behavior
- Add withoutLocalClassEntryHoisting method to temporarily disable hoisting during callback execution
- Modify getLocalClassEntryPtr to respect hoisting allowance when checking process stable class
- Wrap parameter default parsing in withoutLocalClassEntryHoisting to prevent unwanted hoisting
- Update array initialization in Preprocessor to use hoisting control for literal arrays
- Add support for new expressions in array parameter defaults with proper class resolution
- Include tests for array parameter defaults containing new expressions
- Add tests for runtime array property defaults with copy-on-write behavior
- Rename generated request array default symbols with 'typephp_' prefix for consistency
- Update documentation to reflect implemented optimizations and remaining costs
- Add optimized array write operations that preserve references and avoid temporaries
- Implement direct array append and item assignment for known array types
- Optimize compound assignment operations like += for known array slots
- Add compile-time expansion for $this::CONST class constant fetches
- Cache process-stable class entry pointers at function level to avoid repeated lookups
- Optimize string concatenation with two scalar operands using efficient overload
- Skip unnecessary type conversions for arguments that already have exact types
- Add comprehensive test coverage for optimized array operations and object creation
- Implement lazy initialization of request-scoped array default templates
- Generate efficient
- Replace php::safeIndex with php::safeArrayIndex for consistent boundary checking
- Remove special case handling for property[count(property)] append operations
- Use zend_hash_next_free_element() based append position instead of length()
- Update tests to verify inclusive upper bound behavior for sparse arrays
- Add comprehensive test coverage for unset() hole scenarios
- Modify documentation to reflect new indexing behavior and boundaries
- Implement ArrayDef attribute for compile-time array type contracts
- Add support for list and map type definitions with key/value constraints
- Create ArrayDefinition and ArrayDefWritePlan data structures
- Integrate ArrayDef validation into assignment operations
- Add documentation for ArrayDef usage and limitations
- Support class value types, subclasses, and dynamic type checking
- Enable static property array dimension assignments
- Optimize literal assignments into variable declarations
- Add comprehensive test cases for various ArrayDef scenarios
- Updated default initial collection threshold from 10 MiB to 16 MiB
- Increased test loop iterations to accommodate new memory threshold
- Removed padding fields from native class test objects
- Adjusted gc-threshold test to allocate 1100000 objects instead of 300000
- Updated documentation to reflect new 16 MiB initial threshold value
- Modified multiple native class test files to align with new threshold settings
- Add $padding field to NativeFailedClonePressure class in failed-clone-finalizer.phpt
- Add $padding field to NativeFailedLifecyclePressure class in failed-lifecycle-escape.phpt
- Add $padding field to NativeFinalizerFiller class in finalizer-allocation.phpt
- Add $padding field to NativeFinalizerPressureObject class in finalizer-inheritance-exception.phpt
- Add multiple padding fields ($padding1, $padding2, $padding3) to NativeGcThresholdValue class in gc-threshold.phpt
- Add $padding field to NativeLifecycleFiller class in lifecycle-exceptions.phpt
- Update native heap memory layout documentation with fixed header size information
- Clarify that GC header uses two machine words (16 bytes on 64-bit platforms)
- Explain that object size, alignment and callbacks are stored in static NativeTypeDescriptor
- Remove mention of initial
- Remove bundled PHPX wit-bindgen binary and switch to PATH-based discovery
- Require wit-bindgen-cli 0.60.0 to be installed separately in system PATH
- Update error messages to reflect standalone wit-bindgen installation requirement
- Exclude host build tools from package distribution, only include target SDK
- Add WIT_BINDGEN_VERSION constant and detection logic in WasiToolchain
- Implement wit-bindgen version validation in toolchain detection
- Add test cases for wit-bindgen presence and version compatibility checks
- Update documentation to reflect wit-bindgen-cli 0.60.0 installation requirement
- Modify build scripts to locate wit-bindgen through PATH instead of PHPX bundle
- Remove makeScopedCallableMap helper function
- Change preg_replace_callback_array strategy from 'map' to 'dynamic-map'
- Add dynamic-map strategy support in CompilerBase for efficient callback processing
- Update documentation to reflect new callback map implementation approach
- Modify tests to verify UserCodeScopeGuard usage instead of makeScopedCallableMap
- Add test case with static closure in preg_replace_callback_array
- Create comprehensive guide for rebuilding PHPX WASM static library
- Document directory conventions and toolchain preparation steps
- Provide detailed instructions for daily development builds with CMake
- Include procedures for full SDK rebuild and PHP ABI changes
- Add validation steps and common error troubleshooting
- Update main documentation index with new rebuild guide link
- Implement BashCompletion class that generates bash completion script
- Add CompletionCommand to handle --generate-completion=bash argument
- Create CompletionMetadata to provide option and value definitions
- Integrate completion check into main compiler flow
- Add unit tests for bash completion generation and functionality
- Update documentation with bash completion usage instructions
- Add --generate-completion=bash to CLI help text
- Add hooks property to PropertyInfo class with get/set method mappings
- Register property hooks as Zend metadata during AOT compilation
- Implement proper virtual property handling with ZEND_VIRTUAL_PROPERTY_OFFSET
- Support object introspection via Reflection and iteration with hook invocation
- Add reflection metadata exposure through ReflectionProperty::hasHooks() and getHooks()
- Implement backing storage detection to distinguish virtual vs backed properties
- Add comprehensive test coverage for property hooks introspection and reflection
- Document lazy object limitation with persistent AOT class entries in PHP 8.4
- Update documentation to reflect property hooks compilation strategy changes
- Rename hasDynamicCall to needsUnpackedCallbackScope in MethodDef
- Replace genScopeSwitchCode with genUnpackedCallbackScopeGuard
- Change prepareScopedCallback to use php::UserCodeScopeGuard
- Add callableScopeVar to FunctionContext for reusable scope management
- Update compiler logic to track unpacked callback scope requirements
- Generate single reusable CallableScope variable per method when needed
- Add comprehensive documentation for scope management design
- Create tests for callback context reuse and scope restoration
- Add non-static self callable test case
- Update method name references in traits test suite
- Support chained assignments like x = y = 1
- Implement destructuring assignments using ->toArray() conversion
- Add walrus operator (:=) expression support
- Enable function decorator handling with variable rebinding
- Support floor division //= and matrix multiplication @= operators
- Add tuple/list target expansion for del statements
- Convert pure annotations to comments instead of errors
- Rename main function to main_ to avoid TypePHP entry point conflict
- Generate proper decorator rebindings in main() section
- Handle decorated function calls through variable indirection
- Support stacked decorators with bottom-up application order
- Process decorator factories with argument evaluation
- Add imported symbol decorator support
- Implement proper global variable injection for decorated functions
- Add detailed PY2PHP.md documentation covering usage, architecture, statement/expression support matrix
- Document function signature conversion rules and print/sys.exit lowering behavior
- Include known behaviors and unsupported syntax with error messages
- Create comprehensive test suite for PythonAstLoader with real Python subprocess integration
- Add extensive test coverage for PythonToTypePhpConverter including supported/unsupported syntax cases
- Implement CLI layer tests for --convert-python-to-php command with various scenarios
- Add test matrix aligned with documentation covering all supported Python constructs
- Include test cases for error handling and edge conditions with proper exception propagation
- Remove initialization window semantics for readonly properties
- Restrict readonly property writes to direct assignment only
- Add explicit error messages for unsupported readonly operations
- Update tests to reflect new readonly property behavior
- Remove constructor and clone method invocation restrictions
- Add support for closure rebinding rejection at compile time
- Modify property write target preparation with readonly checks
- Update documentation to remove outdated readonly initialization rules
- Add new test cases for readonly property direct assignment enforcement
- Create python.php with Python builtin symbols for IDE completion
- Scan builtins module when generating any module helper
- Convert Python print() calls to PHP echo statements when behavior matches
- Convert sys.exit() calls to PHP exit() when using integer codes
- Fix attribute access on module aliases to use -> syntax after first member
- Add proper dereferencing for f-string expressions
- Update documentation to reflect builtin helper generation
- Add tests for native statement conversion and attribute handling
- Add Command class to handle --gen-python-helper and --convert-python-to-php operations
- Integrate PythonToolsCommand execution into main compiler flow
- Remove toPlainValue from CompilerBase keyword method map
- Update tests to use new toValue() and toArray() methods instead of toPlainValue()
- Rename plain-value tests to object-conversion-methods with updated expectations
- Replace toPlainValue documentation with toValue() and toArray() explanations
- Add HelperRenderer to generate PHP declarations for Python modules
- Implement PhpyModuleScanner to inspect Python modules via reflection
- Add PyObjectHelperRenderer to generate base PyObject IDE helper
- Create example pi.php demonstrating new Python integration features
- Update gitignore to exclude ide-helper directory
- Replace all module property access from module::$property to module\property
- Replace all module function calls from module::function() to module\function()
- Update documentation to reflect new namespace constant syntax for module members
- Modify parser to recognize python module attributes using constant expression trait
- Remove special handling of python use statements in declaration symbol resolver
- Add support for fully qualified python module access without use declarations
- Implement proper namespace resolution for python modules in global and local scopes
- Update tests to verify new module access patterns work correctly
- Remove resetPythonModuleAliases call from compiler base initialization
- Rename parsePythonBuiltinCall to parsePythonFunctionCall for clarity
- Add comprehensive test coverage for imported symbols and fully qualified access
- Mark obsolete module static call and property access patterns as errors
- Move python/design.md to docs/python/design.md
- Move python/implementation-plan.md to docs/python/implementation.md
- Add clarification about unary operator limitations with dynamic ZendVM code
- Update implementation status from in-progress to completed for first round CPython failure path audit
- Add details about seventh round audit covering dynamic PHP Python operator protocols
- Document performance benchmarks for module property and operator calls
- Include memory gate results showing 0 invalid-access, 0 definite leak, 0 indirect leak
- Update stage 6 final gate results with current test pass
- Integrate browser-based WASM test runner using Puppeteer
- Add built-in extensions test for WASM runtime compatibility
- Implement WASI filesystem, clock and random functionality tests
- Create IO and environment variable handling tests for WASI
- Add PHPX numeric containers test for high precision types
- Include basic runtime platform detection tests
- Update run-tests.php with --target and --wasm command options
- Implement multi-target test execution for native and WASM backends
- Add WASM-specific configuration sections and argument parsing
- Integrate dependency management for browser test harness
- Refactor build script references from build-typephp-program.sh to build-program.sh
- Remove legacy numeric smoke test files and update documentation
- Migrate high precision example location from wasm/examples to examples directory
- Introduce build-sdk.sh script to orchestrate complete TypePHP WASI SDK building
- Add numeric-smoke-test.cc and link-numeric-smoke-test.sh for GMP/MPFR/mpdecimal validation
- Create high-precision.php example demonstrating bigInt/bigFloat/decimal usage
- Add test-typephp-program.sh for WASI integration testing with wasmtime
- Update ABI version from v2 to v4 and expand included system libraries
- Document new SDK build process and updated extension list in WASI_BUILD.md
- Include zlib, sodium, openssl, libxml, sqlite3, zip
- Add wasm_mode environment variable with command/library options
- Implement WIT interface generation with manifest, adapter, and binding files
- Create WasmExport attribute for marking functions as component exports
- Generate C bindings and integrate wit-bindgen for component compilation
- Add support for library mode with reactor execution model
- Update build script to handle component vs command compilation
- Add JavaScript integration for calling exported Wasm functions
- Implement example extension info retrieval via WasmExport functions
- Add CSS styling for extension detail UI components
- Update documentation for WASI component library workflow
- Change default TYPEPHP_WASM_BROWSER from 1 to 0 in build script
- Add PHP extensions panel to WASM hello example UI with dynamic loading
- Update project.yml schema to require explicit 'browser' or 'component' values
- Modify help text to reflect component as default WASI output
- Update documentation to clarify component vs browser build profiles
- Remove legacy boolean and array config formats for wasm option
- Add validation for unsupported profile aliases like 'web'
- Refactor profile normalization to only accept 'browser' or 'component'
- Update tests to verify new configuration behavior and error handling