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='))); printf("%s\n\n", json_encode(iterator_to_array($m->serialize(), false)));
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/TQi2O
function name:  (null)
number of ops:  24
compiled vars:  !0 = $m
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  $1      
          5        SEND_VAR_NO_REF_EX                                       $1
          6        DO_FCALL                                      0  $2      
          7        SEND_VAR_NO_REF_EX                                       $2
          8        DO_FCALL                                      0  $3      
          9        ASSIGN                                                   !0, $3
   39    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  $5      
         16        SEND_VAR_NO_REF_EX                                       $5
         17        SEND_VAL_EX                                              <false>
         18        DO_FCALL                                      0  $6      
         19        SEND_VAR_NO_REF_EX                                       $6
         20        DO_FCALL                                      0  $7      
         21        SEND_VAR_NO_REF_EX                                       $7
         22        DO_FCALL                                      0          
         23      > 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/TQi2O
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/TQi2O
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:
179.5 ms | 1400 KiB | 27 Q