fix(php): 修复闭包变量捕获逻辑

- 添加对已使用变量的检查以避免重复捕获
- 将uses数组改为关联数组以支持变量名索引
- 在处理完所有变量后重新索引uses数组
- 确保不会对相同变量名创建多个ClosureUse节点
pull/1/head
韩天峰 5 months ago
parent d55f4fed2d
commit 5650b71dd3
  1. 8
      src/Php/CompilerBase.php

@ -4316,11 +4316,15 @@ class CompilerBase extends \PhpAot\Core\Translator
}
foreach ($vars as $var) {
if ($var->name === 'this' or !$this->hasLocalVar($var->name) or isset($params[$var->name])) {
if ($var->name === 'this'
or !$this->hasLocalVar($var->name)
or isset($params[$var->name])
or isset($uses[$var->name])) {
continue;
}
$uses[] = new Node\ClosureUse($var);
$uses[$var->name] = new Node\ClosureUse($var);
}
$uses = array_values($uses);
$cb = function () use ($expr) {
$code = $this->parseExpr($expr->expr);

Loading…
Cancel
Save