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

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

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

Loading…
Cancel
Save