Skip to content

php-in-php: strnatcmp/strnatcasecmp LLVM standalone bodies (#5517) - #6907

Merged
PurHur merged 1 commit into
masterfrom
agent/runtime-php-strnatcmp-5517
Jun 6, 2026
Merged

php-in-php: strnatcmp/strnatcasecmp LLVM standalone bodies (#5517)#6907
PurHur merged 1 commit into
masterfrom
agent/runtime-php-strnatcmp-5517

Conversation

@PurHur

@PurHur PurHur commented Jun 6, 2026

Copy link
Copy Markdown
Owner

Summary

C runtime shrink

  • ~155 lines already removed (prior merges): lib/AOT/runtime/phpc_strnatcmp.c, phpc_strnatcasecmp.c — not in Linker.php.
  • This PR removes the standalone early-return that left strnatcmp/strnatcasecmp as declaration-only stubs.

php-src reference

  • ext/standard/string.cPHP_FUNCTION(strnatcmp), PHP_FUNCTION(strnatcasecmp)
  • PHP implementation: ext/standard/VmString.php, lib/JIT/Builtin/StringNaturalCompareJit.php

Verification

# Issue repro (Zend parity)
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh
php -r "var_export(strnatcmp(\"2\", \"10\"));"'
# => -1

php bin/vm.php -r "var_export(strnatcmp('2', '10'));"
php bin/jit.php -r "var_export(strnatcmp('2', '10'));"

# Confirm C absent
! ls lib/AOT/runtime/phpc_strnat*.c 2>/dev/null
! grep -q strnatcmp lib/AOT/Linker.php

# Targeted PHPUnit
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && vendor/bin/phpunit test/compliance/StrnatcmpJITTest.php'
PHPUnit 9.6.21 … OK (1 test, 1 assertion)

Closes #5517

Made with Cursor

Emit strnatcmp/strnatcasecmp LLVM in standalone load type (no phpc_strnatcmp*.c),
add JIT compliance + standalone unit test, and AOT fixture.

Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

php-in-php: strnatcmp()/strnatcasecmp() — delete phpc_strnatcmp.c + phpc_strnatcasecmp.c (~155 lines)

1 participant