From c3f5aca1a8ae1880ca3667b8d98f2ff35f1b451f Mon Sep 17 00:00:00 2001 From: tianfenghan Date: Tue, 13 Jan 2026 19:43:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(generator):=20=E6=B7=BB=E5=8A=A0=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E5=90=8D=E5=8F=82=E6=95=B0=E6=94=AF=E6=8C=81PHP?= =?UTF-8?q?=E5=85=A8=E5=B1=80=E5=8F=98=E9=87=8F=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 为initializeZval方法添加varName参数以支持全局变量赋值 - 在ZVAL初始化后添加php::global_vars映射设置 - 重置ZVAL类型标志确保正确的内存管理 - 更新函数调用以传递变量名称信息 --- bin/gen_stub.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bin/gen_stub.php b/bin/gen_stub.php index efdbc6ce..6949ec54 100755 --- a/bin/gen_stub.php +++ b/bin/gen_stub.php @@ -2360,7 +2360,7 @@ class EvaluatedValue $this->isUnknownConstValue = $isUnknownConstValue; } - public function initializeZval(string $zvalName, bool $alreadyExists = false, string $forStringDef = ''): string + public function initializeZval(string $zvalName, bool $alreadyExists = false, string $forStringDef = '', string $varName = ''): string { $cExpr = $this->getCExpr(); @@ -2401,6 +2401,8 @@ class EvaluatedValue $tmpVar = $translator->genTmpVarName(); $code .= "\tauto $tmpVar = " . $translator->parseExpr($this->expr) . ";\n"; $code .= "\t{$tmpVar}.moveTo(&$zvalName);\n"; + $code .= "\tphp::global_vars[\"$varName\"] = $zvalName;\n"; + $code .= "\tZ_TYPE_FLAGS($zvalName) = 0;\n"; } } else { throw new Exception("Invalid default value: " . print_r($this->value, true) . ", type: " . print_r($this->type, true)); @@ -3192,7 +3194,7 @@ class PropertyInfo extends VariableLike if ($this->defaultValue === null && $this->type !== null) { $code .= "\tzval $zvalName;\n\tZVAL_UNDEF(&$zvalName);\n"; } else { - $code .= $defaultValue->initializeZval($zvalName); + $code .= $defaultValue->initializeZval($zvalName, varName: $this->name->__toString()); } [$stringInit, $nameCode, $stringRelease] = StringBuilder::getString(