3v4l.org

run code in 300+ PHP versions simultaneously
<?php namespace wrossmann\merkle; class Node { public $value = NULL; public $isLeaf = false; public $height = 0; public $left = NULL; public $right = NULL; public $parent = NULL; } class Tree { protected $root = null; protected $nodes = []; public function serialize() { yield from $this->serializeGenerator($this->root); } // Serialize based on a depth-first traversal protected function serializeGenerator(Node $node) { yield [ 'v' => $node->value, 'l' => $node->isLeaf ]; if( ! is_null($node->left) ) { yield from $this->serializeGenerator($node->left); } if( ! is_null($node->right) ) { yield from $this->serializeGenerator($node->right); } } } // pre-constructed tree $m = unserialize(gzuncompress(base64_decode('eJy1VbtuwzAMzLdw7GTLz1K/UDhLxyxKIj9Qxy6kPoYg/17SXmIoKBBI2kj6rDvyaHmPIkX4NbO1FzVNh4s2H6M+vButAQVeLVYIu5edmecvkPvH6GY+E7pkdIHwo8ZvDdJijaCOp7Nuu57TEmGwb1q1II+YrIVeD11PBw9LIUcYdfs0T77yROUQzBGVgaDKIUj/JWjkcoRZHzYr9lMZPVFqME3k7R7wtB634QB6NqXSRyF5Etl1gp7CzkC8enriNhxAj+vJFuSjmZREvwEEc8TeBB128kXmuQluwwH0bEq517KSKZFtJ2gXdgiV16oT1G04gJ4Hprjf512l4bxe/tsTKbUgFaVXpqZbOCcNKb+VUiAoyDIKMj46oSDnXagoKPguYHDJQkoKKgpqWpPbH0CgjUU='))); // only outputs the final element printf("%s\n\n", json_encode(iterator_to_array($m->serialize()))); // produces all elemenst as expected foreach($m->serialize() as $item) { printf("%s\n", json_encode($item)); }
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 25, Position 2 = 34
Branch analysis from position: 25
2 jumps found. (Code = 78) Position 1 = 26, Position 2 = 34
Branch analysis from position: 26
1 jumps found. (Code = 42) Position 1 = 25
Branch analysis from position: 25
Branch analysis from position: 34
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 34
filename:       /in/LBeA4
function name:  (null)
number of ops:  36
compiled vars:  !0 = $m, !1 = $item
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   37     0  E >   INIT_NS_FCALL_BY_NAME                                    'wrossmann%5Cmerkle%5Cunserialize'
          1        INIT_NS_FCALL_BY_NAME                                    'wrossmann%5Cmerkle%5Cgzuncompress'
          2        INIT_NS_FCALL_BY_NAME                                    'wrossmann%5Cmerkle%5Cbase64_decode'
          3        SEND_VAL_EX                                              'eJy1VbtuwzAMzLdw7GTLz1K%2FUDhLxyxKIj9Qxy6kPoYg%2F17SXmIoKBBI2kj6rDvyaHmPIkX4NbO1FzVNh4s2H6M%2BvButAQVeLVYIu5edmecvkPvH6GY%2BE7pkdIHwo8ZvDdJijaCOp7Nuu57TEmGwb1q1II%2BYrIVeD11PBw9LIUcYdfs0T77yROUQzBGVgaDKIUj%2FJWjkcoRZHzYr9lMZPVFqME3k7R7wtB634QB6NqXSRyF5Etl1gp7CzkC8enriNhxAj%2BvJFuSjmZREvwEEc8TeBB128kXmuQluwwH0bEq517KSKZFtJ2gXdgiV16oT1G04gJ4Hprjf512l4bxe%2FtsTKbUgFaVXpqZbOCcNKb%2BVUiAoyDIKMj46oSDnXagoKPguYHDJQkoKKgpqWpPbH0CgjUU%3D'
          4        DO_FCALL                                      0  $2      
          5        SEND_VAR_NO_REF_EX                                       $2
          6        DO_FCALL                                      0  $3      
          7        SEND_VAR_NO_REF_EX                                       $3
          8        DO_FCALL                                      0  $4      
          9        ASSIGN                                                   !0, $4
   40    10        INIT_NS_FCALL_BY_NAME                                    'wrossmann%5Cmerkle%5Cprintf'
         11        SEND_VAL_EX                                              '%25s%0A%0A'
         12        INIT_NS_FCALL_BY_NAME                                    'wrossmann%5Cmerkle%5Cjson_encode'
         13        INIT_NS_FCALL_BY_NAME                                    'wrossmann%5Cmerkle%5Citerator_to_array'
         14        INIT_METHOD_CALL                                         !0, 'serialize'
         15        DO_FCALL                                      0  $6      
         16        SEND_VAR_NO_REF_EX                                       $6
         17        DO_FCALL                                      0  $7      
         18        SEND_VAR_NO_REF_EX                                       $7
         19        DO_FCALL                                      0  $8      
         20        SEND_VAR_NO_REF_EX                                       $8
         21        DO_FCALL                                      0          
   43    22        INIT_METHOD_CALL                                         !0, 'serialize'
         23        DO_FCALL                                      0  $10     
         24      > FE_RESET_R                                       $11     $10, ->34
         25    > > FE_FETCH_R                                               $11, !1, ->34
   44    26    >   INIT_NS_FCALL_BY_NAME                                    'wrossmann%5Cmerkle%5Cprintf'
         27        SEND_VAL_EX                                              '%25s%0A'
         28        INIT_NS_FCALL_BY_NAME                                    'wrossmann%5Cmerkle%5Cjson_encode'
         29        SEND_VAR_EX                                              !1
         30        DO_FCALL                                      0  $12     
         31        SEND_VAR_NO_REF_EX                                       $12
         32        DO_FCALL                                      0          
   43    33      > JMP                                                      ->25
         34    >   FE_FREE                                                  $11
   45    35      > RETURN                                                   1

Class wrossmann\merkle\Node: [no user functions]
Class wrossmann\merkle\Tree:
Function serialize:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 161) Position 1 = -2
filename:       /in/LBeA4
function name:  serialize
number of ops:  9
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   17     0  E >   GENERATOR_CREATE                                         
   18     1        INIT_METHOD_CALL                                         'serializeGenerator'
          2        CHECK_FUNC_ARG                                           
          3        FETCH_OBJ_FUNC_ARG                               $0      'root'
          4        SEND_FUNC_ARG                                            $0
          5        DO_FCALL                                      0  $1      
          6        YIELD_FROM                                       ~2      $1
          7        FREE                                                     ~2
   19     8      > GENERATOR_RETURN                                         

End of function serialize

Function serializegenerator:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 14, Position 2 = 21
Branch analysis from position: 14
2 jumps found. (Code = 43) Position 1 = 28, Position 2 = 35
Branch analysis from position: 28
1 jumps found. (Code = 161) Position 1 = -2
Branch analysis from position: 35
Branch analysis from position: 21
filename:       /in/LBeA4
function name:  serializeGenerator
number of ops:  36
compiled vars:  !0 = $node
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   22     0  E >   RECV                                             !0      
          1        GENERATOR_CREATE                                         
   24     2        FETCH_OBJ_R                                      ~1      !0, 'value'
          3        INIT_ARRAY                                       ~2      ~1, 'v'
   25     4        FETCH_OBJ_R                                      ~3      !0, 'isLeaf'
          5        ADD_ARRAY_ELEMENT                                ~2      ~3, 'l'
          6        YIELD                                                    ~2
   27     7        INIT_NS_FCALL_BY_NAME                                    'wrossmann%5Cmerkle%5Cis_null'
          8        CHECK_FUNC_ARG                                           
          9        FETCH_OBJ_FUNC_ARG                               $5      !0, 'left'
         10        SEND_FUNC_ARG                                            $5
         11        DO_FCALL                                      0  $6      
         12        BOOL_NOT                                         ~7      $6
         13      > JMPZ                                                     ~7, ->21
   28    14    >   INIT_METHOD_CALL                                         'serializeGenerator'
         15        CHECK_FUNC_ARG                                           
         16        FETCH_OBJ_FUNC_ARG                               $8      !0, 'left'
         17        SEND_FUNC_ARG                                            $8
         18        DO_FCALL                                      0  $9      
         19        YIELD_FROM                                       ~10     $9
         20        FREE                                                     ~10
   30    21    >   INIT_NS_FCALL_BY_NAME                                    'wrossmann%5Cmerkle%5Cis_null'
         22        CHECK_FUNC_ARG                                           
         23        FETCH_OBJ_FUNC_ARG                               $11     !0, 'right'
         24        SEND_FUNC_ARG                                            $11
         25        DO_FCALL                                      0  $12     
         26        BOOL_NOT                                         ~13     $12
         27      > JMPZ                                                     ~13, ->35
   31    28    >   INIT_METHOD_CALL                                         'serializeGenerator'
         29        CHECK_FUNC_ARG                                           
         30        FETCH_OBJ_FUNC_ARG                               $14     !0, 'right'
         31        SEND_FUNC_ARG                                            $14
         32        DO_FCALL                                      0  $15     
         33        YIELD_FROM                                       ~16     $15
         34        FREE                                                     ~16
   33    35    > > GENERATOR_RETURN                                         

End of function serializegenerator

End of class wrossmann\merkle\Tree.

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
131.99 ms | 1409 KiB | 27 Q