refactor(php): 优化编译器中的返回值类型处理和赋值操作解析

- 当函数存在多种返回值类型时统一修改为 var 类型表示 any
- 重构位移和异或赋值操作的解析逻辑,使用通用的 parseAssignOp 方法
- 简化代码结构,提高类型判断和表达式转换的一致性
pull/1/head
韩天峰 7 months ago
parent c7c375019d
commit 3bd95121de
  1. 9
      src/Php/CompilerBase.php

@ -993,6 +993,9 @@ class CompilerBase extends \PhpAot\Core\Translator
// 函数定义时没有声明返回值,但函数体中有返回值,修改为实际的返回值类型
if ($this->getReturnType() === 'void') {
$this->resetReturnType($type);
} elseif ($this->getReturnType() !== self::TYPE_VAR and $this->getReturnType() !== $type) {
// 返回值类型不一致,说明存在多种类型的返回值,修改为 var 表示 any
$this->resetReturnType(self::TYPE_VAR);
}
$exprCode = $this->convertExprType($expr, $this->getReturnType(), $type);
// return 如果使用了 Indirect 语句,可能会导致变量提前析构,出现悬空指针
@ -2138,14 +2141,12 @@ class CompilerBase extends \PhpAot\Core\Translator
protected function parseAssignOpShiftRight(Node $node): string
{
$var = $this->parseIdentifier($node->var);
return $var . ' >>= ' . $this->parseIdentifier($node->expr);
return $this->parseAssignOp($node, '>>=');
}
protected function parseAssignOpBitwiseXor(Node $node): string
{
$var = $this->parseIdentifier($node->var);
return $var . ' ^= ' . $this->parseIdentifier($node->expr);
return $this->parseAssignOp($node, '^=');
}
protected function parseMagicConst(MagicConst $expr): string

Loading…
Cancel
Save