diff --git a/src/Resolver/DeclarationSymbolTrait.php b/src/Resolver/DeclarationSymbolTrait.php index b4c1da57..52e9a36d 100644 --- a/src/Resolver/DeclarationSymbolTrait.php +++ b/src/Resolver/DeclarationSymbolTrait.php @@ -80,11 +80,11 @@ protected function parseUse(Node\Stmt\Use_ $v2): void if ($type === Node\Stmt\Use_::TYPE_FUNCTION) { $this->useFunctions[$alias] = $id; } elseif ($type === Node\Stmt\Use_::TYPE_CONSTANT) { - $lastIndex = strrpos($id, '\\'); - $cn = substr($id, $lastIndex + 1); - $ns = substr($id, 0, $lastIndex); - $fullName = $ns . '\\' . $cn; - $this->useConstants[$alias] = $fullName; + // $id is already the fully qualified constant name. Splitting + // and re-joining it on `\` corrupted single-segment imports: + // `use const PHP_EOL;` resolved to `\HP_EOL` because + // strrpos() returns false when there is no separator. + $this->useConstants[$alias] = $id; } else { $idLower = strtolower($id); if ($idLower === 'native_types') { diff --git a/tests/compiler/namespace/use-const-single-segment.phpt b/tests/compiler/namespace/use-const-single-segment.phpt new file mode 100644 index 00000000..c6426ee9 --- /dev/null +++ b/tests/compiler/namespace/use-const-single-segment.phpt @@ -0,0 +1,28 @@ +--TEST-- +use const with a single-segment (global) constant name +--FILE-- + +--EXPECT-- +hello +42