From b69582011a143a1047a9e11f660f07ad81f8f12f Mon Sep 17 00:00:00 2001 From: NathanFreeman <1056159381@qq.com> Date: Sat, 8 Aug 2026 16:42:38 +0800 Subject: [PATCH] Force enable type checking --- src/Translator.php | 29 ++++------------------------- 1 file changed, 4 insertions(+), 25 deletions(-) diff --git a/src/Translator.php b/src/Translator.php index 8b0f1087..ffc160d9 100644 --- a/src/Translator.php +++ b/src/Translator.php @@ -94,7 +94,6 @@ class Translator extends Preprocessor */ protected array $classCeList = []; protected array $classCeInfo = []; - private int $strictTypes = 0; protected function isConstructorNativeFunction(FunctionDef $func): bool { @@ -2417,12 +2416,6 @@ CODE; $this->resetMethod(); $this->resetFunction(); - /** - * Here, the value of strict_types needs to be reset, - * as not every file has declare(strict_types=1); set. - */ - $this->setStrictTypes(0); - $cppCode = ''; foreach ($stmts as $v) { $type = $v->getType(); @@ -3257,9 +3250,9 @@ CODE; } /** - * If the current file declares `declare(strict_types=1);`, the current function must be marked with the `ZEND_ACC_STRICT_TYPES` flag. - * This flag is used to ensure that when the function calls other functions through the ZendVM, it strictly validates argument types - * according to the declared mode. + * Tthe current function must be marked with the `ZEND_ACC_STRICT_TYPES` flag. + * This flag is used to ensure that when the function calls other functions through the ZendVM, + * it strictly validates argument types according to the declared mode. * * It is important to note that this mechanism only applies to functions dynamically invoked by the ZendVM. * If the target function is compiled native code, type checking will not be triggered—this is by design in the ZendVM, @@ -5005,20 +4998,6 @@ CODE; private function genStrictTypesCode(): string { - /** - * Type checking is enabled only in binary mode. Since binary mode runs as a standalone executable, - * it must preserve behavioral semantics consistent with directly executed PHP code, - * so type checking must be retained to ensure safety. - * Conversely, when compiled as an extension (e.g., ext/curl), the compilation side does not need to - * enforce built-in type checking; whether it is enabled should be left to the calling PHP code to decide. - */ - return $this->strictTypes == 1 && $this->isBuildModeBin() && !$this->isWasiTarget() - ? "execute_data->func->common.fn_flags |= ZEND_ACC_STRICT_TYPES;" . PHP_EOL - : ''; - } - - private function setStrictTypes(int $value): void - { - $this->strictTypes = $value; + return "execute_data->func->common.fn_flags |= ZEND_ACC_STRICT_TYPES;" . PHP_EOL; } }