fix(resolver): distinguish functions from colliding methods

pull/43/head
韩天峰 4 weeks ago
parent e0a8a8a4dc
commit cf559bc9f4
  1. 17
      phpunit/code/function-method-symbol-collision.php
  2. 15
      phpunit/src/FunctionTest.php
  3. 2
      src/CompilerBase.php

@ -0,0 +1,17 @@
<?php
namespace Collision {
class Worker
{
public function validate(array $data = []): void
{
}
}
}
namespace Collision\Worker {
function invoke_validate(mixed $validater): mixed
{
return validate($validater);
}
}

@ -2,6 +2,21 @@
class FunctionTest extends \BaseTest
{
public function testFunctionCallDoesNotResolveCollidingClassMethodSymbol(): void
{
global $translator;
$compiler = \TypePhp\CompilerTest::create(ROOT_PATH);
$translator = $compiler;
$testFile = __DIR__ . '/../code/function-method-symbol-collision.php';
$compiler->addFiles([$testFile]);
$compiler->prepareFile($testFile);
$cppFile = $compiler->convertFile($testFile);
$cpp = file_get_contents($cppFile);
$this->assertStringContainsString('php::call(', $cpp);
$this->assertStringNotContainsString('php_collision__worker__validate(validater)', $cpp);
}
public function testReturnRef(): void
{
$this->compile('function-return-ref.php');

@ -2845,7 +2845,7 @@ class CompilerBase implements PropertyAccessContext
$nativeFunc = $this->escapeNamespace($nativeFunc);
}
$this->checkFunction($nativeFunc);
if ($this->hasFunction($nativeFunc)) {
if ($this->hasFunction($nativeFunc) && !$this->getFunction($nativeFunc)->method) {
return $nativeFunc;
}
}

Loading…
Cancel
Save