Skip to content

Commit fc0dc0e

Browse files
[VarDumper] Fix generator dump on PHP 8.4
1 parent 2e0dafa commit fc0dc0e

File tree

2 files changed

+84
-2
lines changed

2 files changed

+84
-2
lines changed

src/Symfony/Component/VarDumper/Caster/ReflectionCaster.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,13 @@ public static function castGenerator(\Generator $c, array $a, Stub $stub, bool $
8383
// Cannot create ReflectionGenerator based on a terminated Generator
8484
try {
8585
$reflectionGenerator = new \ReflectionGenerator($c);
86+
87+
return self::castReflectionGenerator($reflectionGenerator, $a, $stub, $isNested);
8688
} catch (\Exception $e) {
8789
$a[Caster::PREFIX_VIRTUAL.'closed'] = true;
8890

8991
return $a;
9092
}
91-
92-
return self::castReflectionGenerator($reflectionGenerator, $a, $stub, $isNested);
9393
}
9494

9595
public static function castType(\ReflectionType $c, array $a, Stub $stub, bool $isNested)

src/Symfony/Component/VarDumper/Tests/Caster/ReflectionCasterTest.php

+82
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,84 @@ class: "Symfony\Component\VarDumper\Tests\Caster\ReflectionCasterTest"
500500
);
501501
}
502502

503+
/**
504+
* @requires PHP < 8.4
505+
*/
506+
public function testGeneratorPriorTo84()
507+
{
508+
if (\extension_loaded('xdebug')) {
509+
$this->markTestSkipped('xdebug is active');
510+
}
511+
512+
$generator = new GeneratorDemo();
513+
$generator = $generator->baz();
514+
515+
$expectedDump = <<<'EODUMP'
516+
Generator {
517+
this: Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo { …}
518+
%s: {
519+
%sGeneratorDemo.php:14 {
520+
Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo->baz()
521+
› {
522+
› yield from bar();
523+
› }
524+
}
525+
%A}
526+
closed: false
527+
}
528+
EODUMP;
529+
530+
$this->assertDumpMatchesFormat($expectedDump, $generator);
531+
532+
foreach ($generator as $v) {
533+
break;
534+
}
535+
536+
$expectedDump = <<<'EODUMP'
537+
array:2 [
538+
0 => ReflectionGenerator {
539+
this: Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo { …}
540+
%s: {
541+
%s%eTests%eFixtures%eGeneratorDemo.php:%d {
542+
Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo::foo()
543+
%A › yield 1;
544+
%A }
545+
%s%eTests%eFixtures%eGeneratorDemo.php:20 { …}
546+
%s%eTests%eFixtures%eGeneratorDemo.php:14 { …}
547+
%A }
548+
closed: false
549+
}
550+
1 => Generator {
551+
%s: {
552+
%s%eTests%eFixtures%eGeneratorDemo.php:%d {
553+
Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo::foo()
554+
› yield 1;
555+
› }
556+
557+
}
558+
%A }
559+
closed: false
560+
}
561+
]
562+
EODUMP;
563+
564+
$r = new \ReflectionGenerator($generator);
565+
$this->assertDumpMatchesFormat($expectedDump, [$r, $r->getExecutingGenerator()]);
566+
567+
foreach ($generator as $v) {
568+
}
569+
570+
$expectedDump = <<<'EODUMP'
571+
Generator {
572+
closed: true
573+
}
574+
EODUMP;
575+
$this->assertDumpMatchesFormat($expectedDump, $generator);
576+
}
577+
578+
/**
579+
* @requires PHP 8.4
580+
*/
503581
public function testGenerator()
504582
{
505583
if (\extension_loaded('xdebug')) {
@@ -511,6 +589,7 @@ public function testGenerator()
511589

512590
$expectedDump = <<<'EODUMP'
513591
Generator {
592+
function: "Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo::baz"
514593
this: Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo { …}
515594
%s: {
516595
%sGeneratorDemo.php:14 {
@@ -519,6 +598,7 @@ public function testGenerator()
519598
› yield from bar();
520599
› }
521600
}
601+
Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo->baz() {}
522602
%A}
523603
closed: false
524604
}
@@ -545,6 +625,7 @@ public function testGenerator()
545625
closed: false
546626
}
547627
1 => Generator {
628+
function: "Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo::foo"
548629
%s: {
549630
%s%eTests%eFixtures%eGeneratorDemo.php:%d {
550631
Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo::foo()
@@ -566,6 +647,7 @@ public function testGenerator()
566647

567648
$expectedDump = <<<'EODUMP'
568649
Generator {
650+
function: "Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo::baz"
569651
closed: true
570652
}
571653
EODUMP;

0 commit comments

Comments
 (0)