|
15 | 15 |
|
16 | 16 | use Reli\Lib\PhpInternals\Opcodes\OpcodeFactory;
|
17 | 17 | use Reli\Lib\PhpInternals\Types\C\RawDouble;
|
| 18 | +use Reli\Lib\PhpInternals\Types\Zend\Bucket; |
18 | 19 | use Reli\Lib\PhpInternals\Types\Zend\Opline;
|
| 20 | +use Reli\Lib\PhpInternals\Types\Zend\ZendArray; |
19 | 21 | use Reli\Lib\PhpInternals\Types\Zend\ZendCastedTypeProvider;
|
20 |
| -use Reli\Lib\PhpInternals\Types\Zend\ZendExecuteData; |
21 | 22 | use Reli\Lib\PhpInternals\Types\Zend\ZendExecutorGlobals;
|
22 |
| -use Reli\Lib\PhpInternals\Types\Zend\ZendFunction; |
23 | 23 | use Reli\Lib\PhpInternals\Types\Zend\ZendOp;
|
| 24 | +use Reli\Lib\PhpInternals\Types\Zend\Zval; |
24 | 25 | use Reli\Lib\PhpInternals\ZendTypeReader;
|
25 | 26 | use Reli\Lib\PhpInternals\ZendTypeReaderCreator;
|
26 | 27 | use Reli\Lib\Process\MemoryReader\MemoryReaderInterface;
|
27 | 28 | use Reli\Lib\Process\MemoryReader\MemoryReaderException;
|
28 | 29 | use Reli\Lib\Process\Pointer\Dereferencer;
|
| 30 | +use Reli\Lib\Process\Pointer\PointedTypeResolver; |
29 | 31 | use Reli\Lib\Process\Pointer\Pointer;
|
30 | 32 | use Reli\Lib\Process\Pointer\RemoteProcessDereferencer;
|
31 | 33 | use Reli\Lib\Process\ProcessSpecifier;
|
@@ -62,7 +64,46 @@ private function getDereferencer(int $pid, string $php_version): Dereferencer
|
62 | 64 | new ProcessSpecifier($pid),
|
63 | 65 | new ZendCastedTypeProvider(
|
64 | 66 | $this->getTypeReader($php_version),
|
65 |
| - ) |
| 67 | + ), |
| 68 | + new class ($php_version) implements PointedTypeResolver { |
| 69 | + public function __construct( |
| 70 | + private string $php_version, |
| 71 | + ) { |
| 72 | + } |
| 73 | + |
| 74 | + public function resolve(string $type_name): string |
| 75 | + { |
| 76 | + return match ($this->php_version) { |
| 77 | + ZendTypeReader::V70, |
| 78 | + ZendTypeReader::V71, |
| 79 | + ZendTypeReader::V72 => match ($type_name) { |
| 80 | + Bucket::class => \Reli\Lib\PhpInternals\Types\Zend\V70\Bucket::class, |
| 81 | + ZendArray::class => \Reli\Lib\PhpInternals\Types\Zend\V70\ZendArray::class, |
| 82 | + Zval::class => \Reli\Lib\PhpInternals\Types\Zend\V70\Zval::class, |
| 83 | + default => $type_name, |
| 84 | + }, |
| 85 | + ZendTypeReader::V73 => match ($type_name) { |
| 86 | + Bucket::class => \Reli\Lib\PhpInternals\Types\Zend\V73\Bucket::class, |
| 87 | + ZendArray::class => \Reli\Lib\PhpInternals\Types\Zend\V73\ZendArray::class, |
| 88 | + Zval::class => \Reli\Lib\PhpInternals\Types\Zend\V73\Zval::class, |
| 89 | + default => $type_name, |
| 90 | + }, |
| 91 | + ZendTypeReader::V74 => match ($type_name) { |
| 92 | + Bucket::class => \Reli\Lib\PhpInternals\Types\Zend\V74\Bucket::class, |
| 93 | + ZendArray::class => \Reli\Lib\PhpInternals\Types\Zend\V74\ZendArray::class, |
| 94 | + Zval::class => \Reli\Lib\PhpInternals\Types\Zend\V74\Zval::class, |
| 95 | + default => $type_name, |
| 96 | + }, |
| 97 | + ZendTypeReader::V80, |
| 98 | + ZendTypeReader::V81 => match ($type_name) { |
| 99 | + ZendArray::class => \Reli\Lib\PhpInternals\Types\Zend\V80\ZendArray::class, |
| 100 | + default => $type_name, |
| 101 | + }, |
| 102 | + ZendTypeReader::V82, |
| 103 | + ZendTypeReader::V83 => $type_name, |
| 104 | + }; |
| 105 | + } |
| 106 | + } |
66 | 107 | );
|
67 | 108 | }
|
68 | 109 |
|
|
0 commit comments