Skip to content

Commit 2a0da8c

Browse files
committed
Use weakmap to keep track of seen objects.
1 parent 85da04a commit 2a0da8c

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

packages/guides/src/Compiler/NodeTransformers/MoveAnchorTransformer.php

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,18 @@
1212
use phpDocumentor\Guides\Nodes\AnchorNode;
1313
use phpDocumentor\Guides\Nodes\Node;
1414
use phpDocumentor\Guides\Nodes\SectionNode;
15-
16-
use function spl_object_hash;
15+
use WeakMap;
1716

1817
/** @implements NodeTransformer<AnchorNode> */
1918
final class MoveAnchorTransformer implements NodeTransformer
2019
{
21-
/** @var array<string, string> */
22-
private array $seen = [];
20+
/** @var WeakMap<AnchorNode, true> */
21+
private WeakMap $seen;
22+
23+
public function __construct()
24+
{
25+
$this->seen = new WeakMap();
26+
}
2327

2428
public function enterNode(Node $node, CompilerContext $compilerContext): Node
2529
{
@@ -29,11 +33,11 @@ public function enterNode(Node $node, CompilerContext $compilerContext): Node
2933
public function leaveNode(Node $node, CompilerContext $compilerContext): Node|null
3034
{
3135
//When exists in seen, it means that the node has already been processed. Ignore it.
32-
if (isset($this->seen[spl_object_hash($node)])) {
36+
if (isset($this->seen[$node])) {
3337
return $node;
3438
}
3539

36-
$this->seen[spl_object_hash($node)] = spl_object_hash($node);
40+
$this->seen[$node] = true;
3741
$parent = $compilerContext->getShadowTree()->getParent();
3842
if ($parent === null) {
3943
throw new LogicException('Node not found in shadow tree');

0 commit comments

Comments
 (0)