fix(compiler): 修复PHP到C++编译器中的类型解析问题

- 在循环中添加键值引用以支持数组元素删除操作
- 当遇到不支持的语法时从列表中移除对应文件
- 添加varTypes属性用于存储变量类型信息
- 为parseType方法添加返回类型声明
- 将未知类型默认处理为对象类型并记录到varTypes中
- 在示例代码中添加测试函数验证类型解析功能
pull/1/head
韩天峰 8 months ago
parent ca1ee88d5f
commit ecbb00542e
  1. 3
      bin/compiler.php
  2. 5
      examples/class/main.php
  3. 7
      src/Php/CompilerBase.php

@ -48,7 +48,7 @@ foreach ($list as $k => $file) {
$translator->sortFiles($list);
// 生成 C++ 文件
foreach ($list as $file) {
foreach ($list as $k => $file) {
try {
if (FileScanner::isPhpFile($file)) {
$cppFile = $translator->convert($file);
@ -61,6 +61,7 @@ foreach ($list as $file) {
} catch (Unsupported $e) {
echo " unsupported syntax: " . $e->getMessage() . "\n";
echo " skip: " . $file . "\n";
unset($list[$k]);
}
}

@ -4,3 +4,8 @@ function main()
{
var_dump("hello");
}
function test2(stdClass $o)
{
var_dump($o);
}

@ -100,6 +100,7 @@ class CompilerBase extends \PhpAot\Core\Translator
'argv' => self::TYPE_ARRAY,
];
protected array $localVars = [];
protected array $varTypes = [];
protected array $objectWrappers = [];
protected bool $strictTypes = false;
@ -969,7 +970,7 @@ class CompilerBase extends \PhpAot\Core\Translator
'}';
}
protected function parseType($type)
protected function parseType($type): string
{
if ($type == null) {
return self::TYPE_VAR;
@ -990,8 +991,8 @@ class CompilerBase extends \PhpAot\Core\Translator
case 'string':
return self::TYPE_STR;
default:
var_dump($name);
abort($type);
$this->varTypes[$name] = $name;
return self::TYPE_OBJECT;
}
}

Loading…
Cancel
Save