- Remove Windows-specific DLL backend and unify all platforms to source-composition model
- Add MSVC compiler support for section garbage collection with /Gy, /Gw, and /OPT flags
- Introduce platform-specific configuration loading for composer native packages
- Update nano capability policy to consistently reject external commands across all platforms
- Replace Windows DLL import checks with comprehensive symbol auditing
- Modify build configuration to handle platform-specific libraries and compilation flags
- Update documentation to reflect unified source-composition approach on Windows
- Remove deprecated nano policy modes and simplify syntax validation visitor
- Add proper C/C++ standard handling and preprocessing flags for MSVC
- Implement consistent section garbage collection for optimized linking on all platforms
- Add phpstan assertions for better type safety in AstNodeType and CallArgumentGenerator
- Replace null check with direct condition in ClassFieldSelection to streamline validation
- Remove unused FunctionLike import and add GlobalConstantDef import in CompilerBase
- Convert CompilerBase to abstract class with abstract methods for better structure
- Update constants array type hint from ConstantDef to GlobalConstantDef
- Replace class inheritance tracking with SymbolRepository for compiler symbols
- Change isScalarInt parameter type from Expr to Node and update return type
- Update getFunctionName parameter type to specific node types instead of FunctionLike
- Refactor parseScalar method to use instanceof checks instead of getType() switch
- Replace string comparison with instanceof check in getComment method
- Change parseNumericIdentifier condition to use instanceof instead of getType()
- Fix argument count comparison in function call validation logic
- Use getRawArgs() method for accessing call arguments in
- Replace sapiEntryFile with separate configured path and value properties
- Add sapiEntryConfiguredPath and sapiEntryConfiguredValue for deferred validation
- Move entry file existence checks to final SAPI selection phase
- Add warning when entry is ignored due to non-CLI SAPI configuration
- Update test cases to verify entry file handling behavior
- Remove redundant entry file addition in translator pipeline
- Refactor entry configuration to support CLI SAPI requirement validation
- Add --entry option to specify PHP entry file for CLI SAPI execution
- Make --php-builder option optional with default empty configuration {}
- Update documentation to reflect new --entry and optional --php-builder options
- Add CompilerToolchain class to manage C/C++ compiler and archiver tools
- Implement response file support for long object lists in archiving operations
- Add progress tracking and detailed build stage reporting for PHP compilation
- Support MSVC, GCC and Clang compiler toolchains with proper companion tools
- Add test cases for new entry point and toolchain functionality
- Adjust build pipeline to exclude entry file from source compilation
- Improve build logging and error handling during compilation processes
- Register shutdown function to clear reflection resolver caches in embed SAPI
- Add test to verify library builds exclude executable process title sources
- Remove embed-specific request cache clearing from module shutdown
- Add tests for embed binary module ordering behavior
- Implement temporary module storage switching for interned strings
- Add pre-shutdown functions for AST constant cleanup in embed mode
- Update platform detection to search multiple library directories
- Add test case for finding embed libraries outside standard lib dir
- Modify module initialization to handle persistent/temporary module types correctly
- Implement configureProxyEnvironment function to export CLI proxy for child processes
- Add --sapi option supporting embed, cli, fpm targets with comma-separated lists
- Introduce --php-builder option for building PHP from source with extensions and ZTS
- Update documentation for new SAPI and PHP builder configuration options
- Add PeclExtensionSource class for managing PECL extension downloads
- Modify build configuration to support PHP builder and multiple SAPI targets
- Update compiler base with new build mode validation and SAPI handling
- Enhance native build configuration with PHP builder specific library paths
- Add comprehensive test coverage for new SAPI and PHP builder features
- Add BUILD_MODE_SAPI constant and related methods for SAPI-specific builds
- Introduce sapiTargets, sapiEntryFile, and other SAPI-related configuration options
- Enhance Android platform with allowTargetVersion parameter in buildPhpIncludePaths
- Reorganize imports in CompilerBase with better grouping and ordering
- Add isSapiBuild() and getSapiTargets() methods for SAPI detection and management
- Update build mode logic to include SAPI in embed builds
- Refine expression type checking with shorter namespace references
- Add comprehensive SAPI build tests including target configuration scenarios
- Improve class property access in tests with parent class traversal support
- Standardize namespace separator handling in various compiler operations
- Add proper escaping and formatting in generated C++ code strings
- Implement SAPI-specific project parsing and validation rules
- Update test assertions to handle new namespace separator format
- Add error handling improvements for unsupported source conditions
- Enhance type checker generator
- Add version field to expose extension version through Zend module entry
- Add info mapping to accept arbitrary labels and scalar values for phpinfo()
- Generate PHP_MINFO_FUNCTION to display custom extension information
- Preserve info mapping order in module's phpinfo() section
- Validate version as non-empty string without NUL bytes
- Validate info as mapping of non-empty string labels to scalar values
- Add comprehensive tests for metadata parsing and generation
- Update documentation with extension metadata configuration examples
- Add referencedClasses array to store fully resolved class names
- Implement recordReferencedClass method to track class references
- Enhance function call parsing with static function resolution
- Add native function lookup and return type detection
- Insert type conversion for runtime call results
- Resolve extension dependencies based on internal functions and classes
- Append extension requirements to generated module header
- Update tests to validate extension dependency detection
- Add test case for runtime builtin int property assignment
- Modify polymorphic class dispatch to restore string representation
- Replace sequential indexing with stable ID allocation for persistent entities
- Add StableIdRegistry to maintain consistent IDs across builds
- Implement incremental compilation with dependency tracking
- Add IncrementalBuildState for tracking file dependencies and dirty propagation
- Update anonymous class generation to use stable call site IDs
- Modify type ID allocation to start from 1 and avoid renumbering
- Add literal string ID allocation using stable registry
- Implement global variable usage recording and tracking
- Add dependency symbols for classes, functions, constants, and globals
- Update property and function index allocation to use stable IDs
- Add cache site ID allocation based on call site context
- Implement compilation statistics merging and delta calculation
- Add file writing with content comparison to avoid unnecessary writes
- Implement incremental build cache clearing functionality
- Add metadata restoration for incremental compilation
- Create dependency graph building and dirty file propagation logic
- Implement translation unit emission tracking for incremental builds
- Configure kernel-only paging with separate user virtual regions
- Add PHP Nano project compilation with link library support
- Implement aligned memory block management for Zend allocator
- Create reusable libtypephp-os.a platform archive for TypePHP userspace
- Add uname system call support and update user-space syscalls
- Increase QEMU memory allocation from 128M to 160M
- Add TNHELLO.ELF as full TypePHP + PHPX
- Add objects section to project.yml for linking precompiled .o/.obj files
- Implement getProjectObjectFiles method to retrieve precompiled objects
- Add c-flags and asm-flags support in CompilerBase
- Extend GCC backend to handle cflags and nativeflags configuration
- Update compiler to include project object files in linking process
- Add freestanding C++ allocation ABI implementation using Zend MM
- Include example TypePHP OS with kernel entry point and hardware stubs
- Add assembly files for boot sequence and kernel entry point
- Implement basic libc compatibility layer for Zend bootstrap
- Add try/catch macro replacement in generated code indentation
- Create bridge between C++ kernel and PHP code
- Add linker script for 64-bit kernel binary generation
- Add native source project compilation workflow with project.xml configuration
- Implement closure reference capture analysis and type degradation for native objects
- Add WASI and nano mode function support checks with comprehensive API exclusions
- Introduce Composer native package discovery and validation system
- Add build scripts for WASI nano program compilation with browser module support
- Implement closure generator enhancements for reference capture handling
- Add CLI usage tests and compiler base API validations
- Integrate php-nano runtime dependencies and native package management
- Add type degradation analysis for closure use variables in generators and functions
- Replace multiple TLS arrays with single php_request_cache_storage struct
- Use one TLS pointer instead of multiple static THREAD_LOCAL arrays
- Implement new/delete allocation for request-scoped cache storage
- Remove memset calls in favor of proper object lifecycle management
- Add proper initialization checks and error handling in RINIT
- Update all cache access patterns to use php_request_cache pointer
- Move persistent caches outside of TLS to static storage
- Include <new> header for allocation operations
- Update tests to verify new cache storage structure and behavior
Consolidate float-to-C++ literal generation into Utils::genFloatLiteral().
Previously:
- genCValue() stringified floats directly via (string), emitting 'INF', '-INF', 'NAN', or losing the floating-point decimal point for whole numbers like 1.0 -> '1'.
- BinaryOpTrait::genFloatLiteral() used sprintf('%.17g') without handling INF or NAN.
Now all float code generation paths delegate to Utils::genFloatLiteral(), mapping INF/-INF/NAN to std::numeric_limits<double> and ensuring whole numbers retain .0.
- Remove TYPEPHP_PROJECT_NAME and TYPEPHP_RUNTIME_EXPORTS from common compile options
- Add dedicated getProjectRuntimeEntryCompileCommandOptions method for project-specific defines
- Update testEmbeddedCompileOptionsPassProjectNameForModuleAccessor to reflect new behavior
- Create new testProjectRuntimeEntryHasTargetDefineWithoutPchOrObjectCache
- Add testProjectIndependentMiscObjectsUseSharedCacheScope and testProjectIndependentMiscObjectCacheSurvivesTargetNameChange
- Update composer.json to use swoole/phpx ~2.6.4
- Modify object file caching logic to handle project-specific vs shared misc objects
- Add isProjectRuntimeEntryFile helper method for determining cache scope
- Update compileFile method to use source-specific compile options
- Handle different PHPX runtime source file layouts during embed mode builds
- Added support for `ext-deps` as equivalent shorthand name for `extension-dependencies`
- Implemented validation to prevent using both config names simultaneously
- Updated documentation to reflect the new alias and usage restrictions
- Added test cases to verify ext-deps alias parsing works correctly
- Added test cases to ensure configuration error occurs when both names are used
- Refactored Translator.php to handle both configuration key variants
- Maintained backward compatibility with existing extension-dependencies usage
- Prevent native classes from being exported through library stubs with proper error messages
- Add test cases to verify rejection of exported native classes in library builds
- Validate that NoExport native classes are omitted from library stub generation
- Implement check for native class usage in stub files with appropriate error handling
- Update hot path codegen to use appendValue method instead of append
- Add comprehensive test coverage for native class validation scenarios
- 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
- 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
- Cache GLOBALS variable check result to avoid redundant parsing
- Implement fast paths for typed array and string reads using direct method calls
- Add optimized handling for simple shorthand ternary operations
- Generate efficient C++ code for array dimension fetch with proper type detection
- Preserve PHP semantics for reference handling in array operations
- Add comprehensive test coverage for typed read optimizations
- Improve namespace isolation for generated runtime symbols across build modes
- Add test case for repeated dynamic static calls not reusing released trampoline
- Add test case for repeated static calls to runtime-defined magic class
- Throw LogicException in getFuncPtr when class method name is detected
- Update getFuncPtr to reject class method names with proper error message
- Replace getFuncPtr with getMethodPtr for static method calls in method call trait
- Update Closure::fromCallable handling to use getMethodPtr instead of getFuncPtr
- Fix Python module trait to use getMethodPtr for PyCore methods
- Update translator to clear function and class maps on every request shutdown
- Refactor property access resolver to use compiled class declaration for parent lookup
- Add test to verify subclass lookup uses compiled class declaration when parent index is missing
- Update request shutdown test to run in all build modes with proper assertions
- Add specific test for function pointer cache rejecting class method names
- Rename internal symbol maps to persistent maps (internal_class_map to
persistent_class_map, etc.)
- Replace process-level stable symbol caching with module lifecycle
persistent caching
- Implement lazy initialization of persistent caches after PHP startup
- Add support for built-in class property resolution via reflection
- Remove dynamic property map as all cached properties are module-stable
- Update cache initialization to use atomic operations for ZTS safety
- Modify RSHUTDOWN cleanup to only clear user-defined caches
- Add test coverage for persistent symbol cache behavior
- Update GCC backend to hide extension symbols by default with -fvisibility=hidden
- 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
- Update WASI target detection to support wasm32-wasip2 and wasm32-unknown-wasip2 only
- Add jco tool integration with version requirement and environment variables
- Implement comprehensive function validation for WASI unsupported functions
- Add WASI_UNSUPPORTED_FUNCTIONS list including exec, socket, pcntl, and posix functions
- Replace wasm-ld with wasm-component-ld for WASI Preview 2 compatibility
- Remove support for deprecated WASI Preview 1 targets with proper error messaging
- Update toolchain detection to use wasip2-specific compiler tools
- Add function prefix validation for pcntl_, posix_, and socket_ function families
- Enhance version detection regex pattern for more reliable tool version parsing
- Update test suite to validate new WASI Preview 2 target and tooling requirements
- Modified parseOrderedBinaryOperand and parseOrderedOperand to return string instead of float|int|string
- Changed parseNumericIdentifier to always return string values instead of numeric types
- Updated genCValue method to return string representations of boolean and float values
- Adjusted safeIndex method parameter type to accept int|string for size parameter
- Updated test cases to verify string output from numeric identifier parsing
- Modified generator test expectation to check Iterator instance instead of dumping object details
- Modified genCValue method to always return string type instead of mixed
- Changed float values to be cast to string in genCValue method
- Updated boolean values to return '1'/'0' strings instead of integers
- Fixed getInternalScalarConstantValue return type to string only
- Added explicit string casting for literal string keys in Translator
- Added comprehensive tests for C value generation ensuring source code strings
- Added comments explaining integer-string array key handling in literalStrings
- Add compiler_pdb option to specify PDB file path in debug mode
- Implement /Fd and /FS flags for PDB generation during compilation
- Generate linker PDB files following output path conventions
- Create cache/msvc directory for storing compiler PDB files
- Add Windows-specific debug configuration for PDB handling
- Update version number to reflect new feature implementation
- Modified parseProjectYaml to skip non-existent ignore paths instead of throwing errors
- Added test case verifying optional ignore paths are silently ignored when missing
- Maintained existing behavior for missing source files which still throw exceptions
- Updated version number from 1096 to 1097
- Remove static constant lookup logic from parseConstFetch method
- Add support for unqualified constants in namespaces with runtime fallback mechanism
- Implement UnqualifiedInNamespace constant lookup strategy for proper PHP behavior
- Update test cases to verify runtime constant resolution works correctly
- Add comprehensive test coverage for namespace constant fallback scenarios
- Remove isValidDefineName validation in favor of direct string checking
- Support define() calls with namespaced and non-identifier constant names
- Add proper error handling for undefined constants in namespaces
- Introduce EXTENSION_PREFIX constant in Constants class
- Add isTypePhpExtension method to Reflection class for proper extension identification
- Update getModuleName to use standardized extension prefix
- Modify internal class and interface detection to exclude TypePHP extension symbols
- Refactor internal functions loading to filter out TypePHP extension functions
- Remove deprecated ignoreExtensions property and related regex parsing logic
- Update version from 0.4.1 to 0.4.2
- Add test case to verify zend module always uses typephp prefix