3v4l.org

run code in 300+ PHP versions simultaneously
<?php trait Eq { public function equiv(Eq $lhs, Eq $rhs): bool { return $lhs->equiv($lhs, $rhs); } } class Tuple2 { use Eq; public function __construct(public Eq $key, public Eq $value) {} public function equiv(Eq $lhs, Eq $rhs): bool { return $lhs->key->equiv($lhs->key, $rhs->key) && $lhs->value->equiv($lhs->value, $rhs->value); } } class Tuple3 { use Eq; public function __construct(public Eq $key, public Eq $value, public Eq $column) {} public function equiv(Eq $lhs, Eq $rhs): bool { return $lhs->key->equiv($lhs->key, $rhs->key) && $lhs->value->equiv($lhs->value, $rhs->value) && $lhs->column->equiv($lhs->column, $rhs->column); } } function check_equiv(Eq $lhs, Eq $rhs) { return $lhs->equiv($lhs, $rhs); } class Number { use Eq; public function __construct(public int $value) {} public function equiv(int $lhs, int $rhs): bool { return $lhs === $rhs; } } var_dump(check_equiv( new Tuple3(new Tuple2(new Number(1), new Number(2)), new Tuple2(new Number(3), new Number(4)), new Tuple2(new Number(5), new Number(6))), new Tuple3(new Tuple2(new Number(1), new Number(2)), new Tuple2(new Number(3), new Number(4)), new Tuple2(new Number(5), new Number(6))) ));
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/QKBbK
function name:  (null)
number of ops:  81
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   10     0  E >   DECLARE_CLASS                                            'tuple2'
   20     1        DECLARE_CLASS                                            'tuple3'
   37     2        DECLARE_CLASS                                            'number'
   47     3        INIT_FCALL                                               'var_dump'
          4        INIT_FCALL                                               'check_equiv'
   48     5        NEW                                              $0      'Tuple3'
          6        NEW                                              $1      'Tuple2'
          7        NEW                                              $2      'Number'
          8        SEND_VAL_EX                                              1
          9        DO_FCALL                                      0          
         10        SEND_VAR_NO_REF_EX                                       $2
         11        NEW                                              $4      'Number'
         12        SEND_VAL_EX                                              2
         13        DO_FCALL                                      0          
         14        SEND_VAR_NO_REF_EX                                       $4
         15        DO_FCALL                                      0          
         16        SEND_VAR_NO_REF_EX                                       $1
         17        NEW                                              $7      'Tuple2'
         18        NEW                                              $8      'Number'
         19        SEND_VAL_EX                                              3
         20        DO_FCALL                                      0          
         21        SEND_VAR_NO_REF_EX                                       $8
         22        NEW                                              $10     'Number'
         23        SEND_VAL_EX                                              4
         24        DO_FCALL                                      0          
         25        SEND_VAR_NO_REF_EX                                       $10
         26        DO_FCALL                                      0          
         27        SEND_VAR_NO_REF_EX                                       $7
         28        NEW                                              $13     'Tuple2'
         29        NEW                                              $14     'Number'
         30        SEND_VAL_EX                                              5
         31        DO_FCALL                                      0          
         32        SEND_VAR_NO_REF_EX                                       $14
         33        NEW                                              $16     'Number'
         34        SEND_VAL_EX                                              6
         35        DO_FCALL                                      0          
         36        SEND_VAR_NO_REF_EX                                       $16
         37        DO_FCALL                                      0          
         38        SEND_VAR_NO_REF_EX                                       $13
         39        DO_FCALL                                      0          
         40        SEND_VAR                                                 $0
   49    41        NEW                                              $20     'Tuple3'
         42        NEW                                              $21     'Tuple2'
         43        NEW                                              $22     'Number'
         44        SEND_VAL_EX                                              1
         45        DO_FCALL                                      0          
         46        SEND_VAR_NO_REF_EX                                       $22
         47        NEW                                              $24     'Number'
         48        SEND_VAL_EX                                              2
         49        DO_FCALL                                      0          
         50        SEND_VAR_NO_REF_EX                                       $24
         51        DO_FCALL                                      0          
         52        SEND_VAR_NO_REF_EX                                       $21
         53        NEW                                              $27     'Tuple2'
         54        NEW                                              $28     'Number'
         55        SEND_VAL_EX                                              3
         56        DO_FCALL                                      0          
         57        SEND_VAR_NO_REF_EX                                       $28
         58        NEW                                              $30     'Number'
         59        SEND_VAL_EX                                              4
         60        DO_FCALL                                      0          
         61        SEND_VAR_NO_REF_EX                                       $30
         62        DO_FCALL                                      0          
         63        SEND_VAR_NO_REF_EX                                       $27
         64        NEW                                              $33     'Tuple2'
         65        NEW                                              $34     'Number'
         66        SEND_VAL_EX                                              5
         67        DO_FCALL                                      0          
         68        SEND_VAR_NO_REF_EX                                       $34
         69        NEW                                              $36     'Number'
         70        SEND_VAL_EX                                              6
         71        DO_FCALL                                      0          
         72        SEND_VAR_NO_REF_EX                                       $36
         73        DO_FCALL                                      0          
         74        SEND_VAR_NO_REF_EX                                       $33
         75        DO_FCALL                                      0          
         76        SEND_VAR                                                 $20
         77        DO_FCALL                                      0  $40     
         78        SEND_VAR                                                 $40
         79        DO_ICALL                                                 
   50    80      > RETURN                                                   1

Function check_equiv:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/QKBbK
function name:  check_equiv
number of ops:  8
compiled vars:  !0 = $lhs, !1 = $rhs
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   32     0  E >   RECV                                             !0      
          1        RECV                                             !1      
   34     2        INIT_METHOD_CALL                                         !0, 'equiv'
          3        SEND_VAR_EX                                              !0
          4        SEND_VAR_EX                                              !1
          5        DO_FCALL                                      0  $2      
          6      > RETURN                                                   $2
   35     7*     > RETURN                                                   null

End of function check_equiv

Class Eq:
Function equiv:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/QKBbK
function name:  equiv
number of ops:  10
compiled vars:  !0 = $lhs, !1 = $rhs
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    4     0  E >   RECV                                             !0      
          1        RECV                                             !1      
    6     2        INIT_METHOD_CALL                                         !0, 'equiv'
          3        SEND_VAR_EX                                              !0
          4        SEND_VAR_EX                                              !1
          5        DO_FCALL                                      0  $2      
          6        VERIFY_RETURN_TYPE                                       $2
          7      > RETURN                                                   $2
    7     8*       VERIFY_RETURN_TYPE                                       
          9*     > RETURN                                                   null

End of function equiv

End of class Eq.

Class Tuple2:
Function __construct:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/QKBbK
function name:  __construct
number of ops:  7
compiled vars:  !0 = $key, !1 = $value
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   13     0  E >   RECV                                             !0      
          1        RECV                                             !1      
          2        ASSIGN_OBJ                                               'key'
          3        OP_DATA                                                  !0
          4        ASSIGN_OBJ                                               'value'
          5        OP_DATA                                                  !1
          6      > RETURN                                                   null

End of function __construct

Function equiv:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 46) Position 1 = 12, Position 2 = 22
Branch analysis from position: 12
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 22
filename:       /in/QKBbK
function name:  equiv
number of ops:  26
compiled vars:  !0 = $lhs, !1 = $rhs
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   14     0  E >   RECV                                             !0      
          1        RECV                                             !1      
   16     2        FETCH_OBJ_R                                      ~2      !0, 'key'
          3        INIT_METHOD_CALL                                         ~2, 'equiv'
          4        CHECK_FUNC_ARG                                           
          5        FETCH_OBJ_FUNC_ARG                               $3      !0, 'key'
          6        SEND_FUNC_ARG                                            $3
          7        CHECK_FUNC_ARG                                           
          8        FETCH_OBJ_FUNC_ARG                               $4      !1, 'key'
          9        SEND_FUNC_ARG                                            $4
         10        DO_FCALL                                      0  $5      
         11      > JMPZ_EX                                          ~6      $5, ->22
         12    >   FETCH_OBJ_R                                      ~7      !0, 'value'
         13        INIT_METHOD_CALL                                         ~7, 'equiv'
         14        CHECK_FUNC_ARG                                           
         15        FETCH_OBJ_FUNC_ARG                               $8      !0, 'value'
         16        SEND_FUNC_ARG                                            $8
         17        CHECK_FUNC_ARG                                           
         18        FETCH_OBJ_FUNC_ARG                               $9      !1, 'value'
         19        SEND_FUNC_ARG                                            $9
         20        DO_FCALL                                      0  $10     
         21        BOOL                                             ~6      $10
         22    >   VERIFY_RETURN_TYPE                                       ~6
         23      > RETURN                                                   ~6
   17    24*       VERIFY_RETURN_TYPE                                       
         25*     > RETURN                                                   null

End of function equiv

End of class Tuple2.

Class Tuple3:
Function __construct:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/QKBbK
function name:  __construct
number of ops:  10
compiled vars:  !0 = $key, !1 = $value, !2 = $column
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   23     0  E >   RECV                                             !0      
          1        RECV                                             !1      
          2        RECV                                             !2      
          3        ASSIGN_OBJ                                               'key'
          4        OP_DATA                                                  !0
          5        ASSIGN_OBJ                                               'value'
          6        OP_DATA                                                  !1
          7        ASSIGN_OBJ                                               'column'
          8        OP_DATA                                                  !2
          9      > RETURN                                                   null

End of function __construct

Function equiv:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 46) Position 1 = 12, Position 2 = 22
Branch analysis from position: 12
2 jumps found. (Code = 46) Position 1 = 23, Position 2 = 33
Branch analysis from position: 23
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 33
Branch analysis from position: 22
filename:       /in/QKBbK
function name:  equiv
number of ops:  37
compiled vars:  !0 = $lhs, !1 = $rhs
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   24     0  E >   RECV                                             !0      
          1        RECV                                             !1      
   26     2        FETCH_OBJ_R                                      ~2      !0, 'key'
          3        INIT_METHOD_CALL                                         ~2, 'equiv'
          4        CHECK_FUNC_ARG                                           
          5        FETCH_OBJ_FUNC_ARG                               $3      !0, 'key'
          6        SEND_FUNC_ARG                                            $3
          7        CHECK_FUNC_ARG                                           
          8        FETCH_OBJ_FUNC_ARG                               $4      !1, 'key'
          9        SEND_FUNC_ARG                                            $4
         10        DO_FCALL                                      0  $5      
         11      > JMPZ_EX                                          ~6      $5, ->22
   27    12    >   FETCH_OBJ_R                                      ~7      !0, 'value'
         13        INIT_METHOD_CALL                                         ~7, 'equiv'
         14        CHECK_FUNC_ARG                                           
         15        FETCH_OBJ_FUNC_ARG                               $8      !0, 'value'
         16        SEND_FUNC_ARG                                            $8
         17        CHECK_FUNC_ARG                                           
         18        FETCH_OBJ_FUNC_ARG                               $9      !1, 'value'
         19        SEND_FUNC_ARG                                            $9
         20        DO_FCALL                                      0  $10     
         21        BOOL                                             ~6      $10
         22    > > JMPZ_EX                                          ~6      ~6, ->33
   28    23    >   FETCH_OBJ_R                                      ~11     !0, 'column'
         24        INIT_METHOD_CALL                                         ~11, 'equiv'
         25        CHECK_FUNC_ARG                                           
         26        FETCH_OBJ_FUNC_ARG                               $12     !0, 'column'
         27        SEND_FUNC_ARG                                            $12
         28        CHECK_FUNC_ARG                                           
         29        FETCH_OBJ_FUNC_ARG                               $13     !1, 'column'
         30        SEND_FUNC_ARG                                            $13
         31        DO_FCALL                                      0  $14     
         32        BOOL                                             ~6      $14
         33    >   VERIFY_RETURN_TYPE                                       ~6
         34      > RETURN                                                   ~6
   29    35*       VERIFY_RETURN_TYPE                                       
         36*     > RETURN                                                   null

End of function equiv

End of class Tuple3.

Class Number:
Function __construct:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/QKBbK
function name:  __construct
number of ops:  4
compiled vars:  !0 = $value
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   40     0  E >   RECV                                             !0      
          1        ASSIGN_OBJ                                               'value'
          2        OP_DATA                                                  !0
          3      > RETURN                                                   null

End of function __construct

Function equiv:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/QKBbK
function name:  equiv
number of ops:  7
compiled vars:  !0 = $lhs, !1 = $rhs
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   41     0  E >   RECV                                             !0      
          1        RECV                                             !1      
   43     2        IS_IDENTICAL                                     ~2      !0, !1
          3        VERIFY_RETURN_TYPE                                       ~2
          4      > RETURN                                                   ~2
   44     5*       VERIFY_RETURN_TYPE                                       
          6*     > RETURN                                                   null

End of function equiv

End of class Number.

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
162.89 ms | 1415 KiB | 16 Q