Category
php-in-php · language
Problem
eval() JIT lowering in lib/JIT/EvalHelper.php (~69 LOC) inlines compile-time literal eval via IncludeHelper::compileInlinedBlock and falls back to VmEval for dynamic strings. Mixed LLVM/inline paths duplicate ext/standard/VmEval.php semantics (#4652).
Goal: single PHP SSOT for eval return value, scope, and error handling — thin JIT trampoline only.
php-src reference
Repro
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh
php bin/vm.php -r "var_export(eval(\"return 1+2;\"));" 2>&1
php bin/jit.php -r "var_export(eval(\"return 1+2;\"));" 2>&1
php bin/jit.php -r "\$code=\"return 3;\"; var_export(eval(\$code));" 2>&1
wc -l lib/JIT/EvalHelper.php ext/standard/VmEval.php
'
Scope (PHP-in-PHP)
| Path |
Work |
lib/JIT/EvalHelper.php |
Always delegate to VmEval / runtime eval entry |
ext/standard/VmEval.php |
Own literal + dynamic eval; return false + exception parity |
lib/JIT/IncludeHelper.php |
Remove eval-specific inline block shortcut when PHP path handles literals |
Done when
Related
Category
php-in-php·languageProblem
eval()JIT lowering inlib/JIT/EvalHelper.php(~69 LOC) inlines compile-time literal eval viaIncludeHelper::compileInlinedBlockand falls back toVmEvalfor dynamic strings. Mixed LLVM/inline paths duplicateext/standard/VmEval.phpsemantics (#4652).Goal: single PHP SSOT for eval return value, scope, and error handling — thin JIT trampoline only.
php-src reference
ext/standard/basic_functions.c—zif_eval,zend_eval_stringlZend/zend_execute.c— eval scope flagsRepro
Scope (PHP-in-PHP)
lib/JIT/EvalHelper.phpVmEval/ runtime eval entryext/standard/VmEval.phpfalse+ exception paritylib/JIT/IncludeHelper.phpDone when
eval()match VM/Zend on reproEvalHelper.php≤ ~30 LOC; no separate literal inline LLVM path./script/ci-fast.sh --filter Evalgreen (Language: eval() — JIT/AOT lowering in caller scope (phase 2 of #4410 / #3358) #4652 compliance)Related